คำถามติดแท็ก dijkstra

5
อัลกอริทึมในการกำหนดเส้นทางที่เร็วที่สุด?
สมมติว่าเราไปจาก 1 ถึง 5 เส้นทางที่สั้นที่สุดจะเป็น 1-4-3-5 (รวม: 60 กม.) เราสามารถใช้อัลกอริทึมของ Dijkstraเพื่อทำสิ่งนั้น ตอนนี้ปัญหาคือเส้นทางที่สั้นที่สุดไม่ใช่เส้นทางที่เร็วที่สุดเสมอไปเนื่องจากการจราจรติดขัดหรือปัจจัยอื่น ๆ ตัวอย่างเช่น: เป็นที่ทราบกันว่า 1-2 มีการจราจรติดขัดบ่อยดังนั้นควรหลีกเลี่ยง ทันใดนั้นอุบัติเหตุทางรถยนต์ก็เกิดขึ้นในช่วง 4-3 ดังนั้นจึงควรหลีกเลี่ยงด้วย ฯลฯ ... ดังนั้นอาจเป็นไปได้ว่าเราสามารถเร่งความเร็วบนเส้นทาง 1-4-5 เนื่องจากไม่มีการจราจรติดขัด / อุบัติเหตุดังนั้นจะมาที่ 5 เร็วขึ้น นั่นเป็นแนวคิดทั่วไปและฉันยังไม่ได้คิดถึงรายละเอียดเพิ่มเติม มีอัลกอริทึมในการแก้ปัญหานี้หรือไม่?
17 graph  dijkstra 

1
ฉันพูดถูกเกี่ยวกับความแตกต่างระหว่างอัลกอริทึม Floyd-Warshall, Dijkstra และ Bellman-Ford หรือไม่?
ฉันกำลังศึกษาทั้งสามและฉันได้ระบุข้อสรุปจากพวกเขาด้านล่าง มีใครบอกฉันได้ไหมว่าฉันเข้าใจถูกต้องเพียงพอหรือไม่ ขอบคุณ. อัลกอริทึมของ Dijkstra จะใช้เมื่อคุณมีแหล่งเดียวและคุณต้องการทราบเส้นทางที่เล็กที่สุดจากโหนดหนึ่งไปยังอีกโหนดหนึ่ง แต่ล้มเหลวในกรณีเช่นนี้ อัลกอริทึมของ Floyd-Warshall ใช้เมื่อทุกโหนดใด ๆ สามารถเป็นต้นทางดังนั้นคุณต้องการให้ระยะทางที่สั้นที่สุดในการเข้าถึงโหนดปลายทางใด ๆ จากโหนดต้นทางใด ๆ สิ่งนี้จะล้มเหลวก็ต่อเมื่อมีรอบการลบเท่านั้น (นี่คือสิ่งที่สำคัญที่สุดฉันหมายถึงนี่คือสิ่งที่ฉันแน่ใจน้อยที่สุดเกี่ยวกับ :) 3.Bellman-Ford ใช้เหมือนของ Dijkstra เมื่อมีเพียงแหล่งเดียว สิ่งนี้สามารถรองรับน้ำหนักเชิงลบและการทำงานของมันเหมือนกับของ Floyd-Warshall ยกเว้นแหล่งเดียวใช่ไหม หากคุณต้องการดูอัลกอริธึมที่เกี่ยวข้องคือ (มารยาท Wikipedia): ยามฟอร์ด: procedure BellmanFord(list vertices, list edges, vertex source) // This implementation takes in a graph, represented as lists of vertices // and …

6
Dijkstra ตั้งใจที่จะทำโค้ดให้เป็นมาตรฐานหรือไม่เมื่อเขาเขียนเกี่ยวกับการแยกข้อกังวล?
ก่อนอื่นฉันอ่านข้อความที่ตัดตอนมาของ Edsger W. Dijkstra ในปี 1974 "ในบทบาทของความคิดทางวิทยาศาสตร์": ให้ฉันพยายามอธิบายให้คุณฟังว่าอะไรคือรสนิยมของฉันสำหรับการคิดที่ชาญฉลาด มันคือว่าเราเต็มใจที่จะศึกษาในเชิงลึกในแง่มุมของเนื้อหาที่แยกออกมาเพื่อความมั่นคงของตัวเองตลอดเวลาที่รู้ว่าคนนั้นครอบครองตัวเองด้วยแง่มุมใดด้านหนึ่งเท่านั้น เรารู้ว่าโปรแกรมจะต้องถูกต้องและเราสามารถศึกษาได้จากมุมมองนั้นเท่านั้น เรารู้ด้วยว่ามันควรจะมีประสิทธิภาพและเราสามารถศึกษาประสิทธิภาพของมันในอีกวันหนึ่ง ในอีกอารมณ์หนึ่งเราอาจถามตัวเองว่าและถ้าเป็นเช่นนั้น: ทำไมโปรแกรมนี้จึงเป็นที่ต้องการ แต่ไม่มีสิ่งใดได้รับ - ในทางตรงกันข้าม! - โดยจัดการกับแง่มุมต่าง ๆ เหล่านี้พร้อมกัน บางครั้งฉันก็เรียกว่า "การแยกความกังวล" ซึ่งแม้ว่าจะเป็นไปไม่ได้อย่างสมบูรณ์ก็ตาม ยังเป็นเทคนิคเดียวที่มีอยู่สำหรับการจัดลำดับความคิดของคน ๆ หนึ่งที่ฉันรู้ นี่คือสิ่งที่ฉันหมายถึงโดย "การมุ่งความสนใจไปที่บางแง่มุม": มันไม่ได้หมายถึงการเพิกเฉยต่อแง่มุมอื่น ๆ มันแค่ทำความยุติธรรมกับข้อเท็จจริงที่ว่าจากมุมมองของแง่มุมนี้มุมมองอื่น ๆ นั้นไม่เกี่ยวข้อง มันเป็นหนึ่งในใจและหลายแทร็คพร้อมกัน ฉันเห็นการแยกข้อกังวลที่ทันสมัยพูดคุยเกี่ยวกับการทำให้โค้ดของคุณเป็นโมดูล อย่างไรก็ตามการอ่านคำพูดข้างต้นฉันเข้าใจว่านี่คือการมุ่งความคิดของคุณไปที่งานหนึ่งโดยเฉพาะในขณะที่ไม่ได้มุ่งเน้นด้านอื่น ๆ นี่ไม่ได้แปลว่าจำเป็นต้องแบ่งรหัสออกเป็นส่วนย่อย ๆ กล่าวคือมีโค้ดอยู่ข้างหน้าคุณว่าในไฟล์เดียวมีแนวคิดของมุมมองพื้นที่เก็บข้อมูลตัวควบคุมการจัดการเหตุการณ์โรงงาน ฯลฯ ทั้งหมดในไฟล์เดียว สำหรับตัวอย่างสั้น ๆ นี่คือโค้ดบางส่วนที่มีการเข้าถึงข้อมูลและมุมมอง (เอาต์พุต): $sql = "SELECT * …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.