คำถามติดแท็ก graph-traversal

3
จะค้นหาเส้นทางที่สั้นที่สุดที่มีโหนดหนอนได้อย่างไร
นี่คือตัวอย่างของสิ่งที่ฉันต้องการทำผ่านรหัส ฉันรู้ว่าคุณสามารถใช้การค้นหาจุดกระโดดได้อย่างง่ายดายจากโหนดสีเขียวไปยังโหนดสีแดงโดยไม่มีปัญหาหรือแม้แต่ A * แต่คุณจะคำนวณสิ่งนี้อย่างไรกับการแปรปรวน ในภาพคุณจะเห็นว่ามันใช้เวลาเพียง 8 ย้ายจากโหนดสีเขียวไปยังโหนดสีแดงเมื่อถ่ายเส้นทางสีฟ้า เส้นทางสีน้ำเงินย้ายตำแหน่งของคุณจากโหนดสีม่วงไปยังตำแหน่งถัดไปทันที พื้นที่ตรงกลางที่มีค่าใช้จ่าย 2 การเคลื่อนไหวเป็นจุดระหว่างสองโซน warp ที่คุณต้องย้ายไป เห็นได้ชัดว่าเร็วกว่าที่จะใช้เส้นทางสีฟ้าเนื่องจากคุณจะต้องย้ายครึ่งหนึ่ง (ประมาณ) เท่า ๆ กับเส้นทางสีเหลือง แต่ฉันจะทำสิ่งนี้อย่างไรในเชิงโปรแกรม? เพื่อจุดประสงค์ในการแก้ปัญหานี้สมมติว่ามี "วาร์ป" สีม่วงหลายรอบกราฟที่คุณสามารถใช้งานได้และเรารู้ว่าจุดสีม่วงแต่ละจุดจะโค้งงอและตรงไหนบนกราฟ วาร์ปสีม่วงบางตัวเป็นแบบสองทิศทางและบางอันไม่ใช่ความหมายบางครั้งคุณสามารถป้อนวาร์ปจากด้านหนึ่ง แต่ไม่กลับไปหลังจากการแปรปรวน ฉันคิดเกี่ยวกับวิธีแก้ปัญหาและสรุปเพียงว่าฉันจะสามารถคำนวณปัญหาได้โดยการตรวจสอบระยะทางไปยังจุดแปรปรวนแต่ละจุด (ลบจุดเดียวทิศทาง) และความแตกต่างระหว่างจุดเหล่านั้นและจุดที่อยู่ใกล้พวกเขา . โปรแกรมจะต้องคิดออกว่ามันจะมีประโยชน์มากกว่าที่จะใช้วิปริตที่สองแทนที่จะเดินจากการกระโดดครั้งแรก ดังนั้นแทนที่จะเคลื่อนที่ 6 จุดจากนั้นแปรปรวนจากนั้นย้ายส่วนที่เหลืออีก 8 ก้าวด้วยการเดินเท้า (ซึ่งเร็วกว่าการไม่ใช้ warps เลย) จะใช้การเคลื่อนไหว 6 ครั้งจากนั้นทั้งสองเดินไปที่วิปริตสอง แก้ไข:ฉันรู้ว่าเส้นทางสีน้ำเงินจะใช้เวลา 12 การเคลื่อนไหวแทนที่จะเป็น 8 แต่คำถามยังคงเหมือนเดิม

3
ประโยชน์ของการสำรวจเส้นทางก่อนและหลังการสั่งซื้อของต้นไม้ไบนารี
นี่อาจไร้เดียงสามาก แต่ฉันก็สงสัยว่ามันเป็นบริบทของต้นไม้ไบนารี (ธรรมดาเรียงและสมดุล) ของการสำรวจเส้นทางทั้งหมด: การสั่งซื้อล่วงหน้าครั้งแรกในเชิงลึก ความลึกเป็นลำดับแรก สั่งซื้อโพสต์แรกลึก กว้างแรก สิ่งที่เป็นประโยชน์จริงของคนก่อนและหลังสั่งซื้อคืออะไร ฉันหมายความว่ามีบางประเภทและ / หรือการกำหนดค่าของต้นไม้ไบนารีที่ก่อนและ / หรือการสำรวจเส้นทางการสั่งซื้อจะให้ประโยชน์ (บาง) มากกว่าอีกสอง? AFAICS มีบางประเภทและการกำหนดค่าของต้นไม้ไบนารีซึ่งเรียงตามลำดับและความกว้างก่อนอาจให้ข้อได้เปรียบบางอย่าง: สำหรับต้นไม้ไบนารีที่สมดุลการสำรวจเส้นทางในระดับความลึกใด ๆ จะใช้พื้นที่เก็บข้อมูลหน่วยความจำน้อยกว่าเมื่อเทียบกับความกว้างแรก (เช่นสำหรับต้นไม้ไบนารีที่สมดุลของ 6 หรือ 7 โหนดความสูงคือ 2 ดังนั้นความลึกการสำรวจเส้นทางแรก 2 โหนดในเวลาใดก็ตามในขณะที่ระดับสุดท้ายมี 3 หรือ 4 โหนดดังนั้นการสำรวจเส้นทางแรกที่กว้างที่สุดจะต้องเก็บได้ถึง 3 หรือ 4 โหนดในบางจุด) ในกรณีนี้การใช้การส่งผ่านตามลำดับจะใช้หน่วยความจำน้อยที่สุดและเข้าชมโหนดตามลำดับที่เป็นธรรมชาติ สำหรับต้นไม้ไบนารีที่ไม่สมดุลถ้าใกล้เคียงกับสถานการณ์การแทรกกรณีที่แย่ที่สุดการสำรวจโดยใช้ความกว้างก่อนจะใช้หน่วยความจำน้อยกว่าเมื่อเปรียบเทียบกับการสำรวจเส้นทางแรกที่มีความลึก ดังนั้นในกรณีนี้ความกว้างก่อนเสนอข้อได้เปรียบ การสำรวจเส้นทางตามลำดับมีความได้เปรียบอีกครั้งจากการเยี่ยมชมค่าตามลำดับธรรมชาติ อย่างไรก็ตามฉันไม่สามารถนึกถึงสถานการณ์ที่ก่อนและหลังการสำรวจเส้นทางจะให้ประโยชน์มากกว่าอีกสอง

3
เส้นทางการสั่งซื้อล่วงหน้าเหมือนกับการค้นหาลึกครั้งแรกหรือไม่
ดูเหมือนว่าฉันชอบการสำรวจเส้นทางการสั่งซื้อล่วงหน้าและ DFS เหมือนกันทั้งสองกรณีที่เราสำรวจจากรูทจนถึงสาขาซ้ายและกลับไปที่รูทจากนั้นไปยังสาขาที่ถูกเรียกซ้ำ โปรดแก้ไขให้ฉันได้ไหมถ้าฉันผิด? ขอบคุณล่วงหน้า!

1
วิธีการเรียนรู้แบบ Heuristic สำหรับการนำ DIFF แบบยืดหยุ่นมาใช้
ฉันได้สร้างการใช้ DIFF เพื่อเปรียบเทียบการแก้ไขเอกสารในที่ทำงาน มันขึ้นอยู่กับมี O (ND) ความแตกต่างขั้นตอนวิธีการและรูปแบบของมัน สิ่งหนึ่งที่มีความสำคัญคือการบันทึกรายการการเปลี่ยนแปลงและตีความให้เป็นข้อความที่มนุษย์อ่านได้ ในขณะที่อัลกอริทึมในปัจจุบันมีประสิทธิภาพมากมันก็มากจนยากที่จะขยาย คำถามสั้น ๆ ฉันคิดถึงการพยายามใช้ A * และฮิวริสติกที่เพิ่มบทลงโทษสำหรับ "การเปลี่ยน" แนวคิดที่จะทำให้เรียบโดยไม่จำเป็น "เพิ่มลบเพิ่มลบเพิ่มลบ" เพื่อให้ง่ายต่อการแยกวิเคราะห์เป็นสิ่งที่มนุษย์สามารถอ่านได้ โดยทั่วไปเปลี่ยนปัญหาเส้นทางที่สั้นที่สุดของฉันให้เป็นปัญหาเส้นทางที่ง่ายที่สุด และแน่นอนไม่สร้างผลลัพธ์ที่ "ลบทุกอย่างเพิ่มทุกอย่าง " เสมอ เสียงนี้สมเหตุสมผลหรือไม่ มีความสำคัญสำหรับการใช้ฮิวริสติกในการนำ DIFF ไปใช้หรือไม่? ฮิวริสติกคืออะไร? ปัญหา: หากมีการลบประโยคยาวและประโยคยาวอื่นถูกลบออก แต่พวกเขาแบ่งปันอย่างน้อยหนึ่งคำให้พูดว่า "with" การออกจากคำทั่วไปเพียงอย่างเดียว (ไม่ใช่ทั้งการเพิ่มและการลบ) จะเป็นการสร้างเส้นทางที่สั้นที่สุด อย่างไรก็ตามนี่เป็นเพียงแค่ทำให้งงงวยบริบทของการเปลี่ยนแปลงกับมนุษย์พยายามอ่านพิมพ์จากการเปลี่ยนแปลง ตัวอย่างด้วย DIFF ปัจจุบัน: ข้อความเก่า: สะอาด: Powerwash และเป่าให้แห้งด้วยอากาศในร้าน ข้อความใหม่: ล้าง: เช็ดด้วยอะซิโตนและผ้าสำลีฟรี เปลี่ยนรายการบันทึกย่อ: เปลี่ยน "Powerwash …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.