ในเครือข่ายคอมพิวเตอร์ อัลกอริธึมพาธที่สั้นที่สุดมีเป้าหมายเพื่อค้นหาเส้นทางที่เหมาะสมที่สุดระหว่างโหนดเครือข่าย เพื่อลดต้นทุนการเราต์ เป็นการใช้งานโดยตรงของอัลกอริธึมพาธที่สั้นที่สุดที่เสนอในทฤษฎีกราฟ
คำอธิบาย
พิจารณาว่าเครือข่ายประกอบด้วยจุดยอด N (โหนดหรืออุปกรณ์เครือข่าย) ที่เชื่อมต่อด้วยขอบ M (สายส่งสัญญาณ) ขอบแต่ละด้านสัมพันธ์กับน้ำหนัก ซึ่งแสดงถึงระยะห่างทางกายภาพหรือความล่าช้าในการส่งของสายส่ง เป้าหมายของอัลกอริธึมพาธที่สั้นที่สุดคือการหาเส้นทางระหว่างจุดยอดคู่ใดๆ ตามขอบ ดังนั้นผลรวมของน้ำหนักของขอบจะน้อยที่สุด หากขอบมีน้ำหนักเท่ากัน อัลกอริธึมเส้นทางที่สั้นที่สุดจะมุ่งหมายเพื่อค้นหาเส้นทางที่มีจำนวนการกระโดดขั้นต่ำ
อัลกอริธึมพาธทั่วไปที่สั้นที่สุด
อัลกอริธึมพาธที่สั้นที่สุดทั่วไปคือ -
-
อัลกอริธึมของ Bellman Ford
-
อัลกอริทึมของ Dijkstra
-
อัลกอริธึมของ Floyd Warshall
ส่วนต่อไปนี้จะอธิบายแต่ละอัลกอริทึมเหล่านี้
เบลล์แมนฟอร์ดอัลกอริทึม
อินพุต - กราฟแสดงเครือข่าย และโหนดต้นทาง s
เอาต์พุต - เส้นทางที่สั้นที่สุดจาก s ไปยังโหนดอื่นทั้งหมด
-
เริ่มต้นระยะทางจาก s ถึงโหนดทั้งหมดเป็นอนันต์ (∞); ระยะห่างกับตัวเองเป็น 0; อาร์เรย์ dist[] ขนาด |V| (จำนวนโหนด) โดยมีค่าทั้งหมดเป็น ∞ ยกเว้น dist[s] .
-
คำนวณระยะทางที่สั้นที่สุดซ้ำๆ ทำซ้ำ |V|- 1 ครั้งสำหรับแต่ละโหนดยกเว้น s -
-
ทำซ้ำสำหรับแต่ละขอบที่เชื่อมต่อจุดยอด u และ v -
-
ถ้า dist[v]> (dist[u] + น้ำหนักของขอบ u-v) แล้ว
-
อัปเดต dist[v] =dist[u] + น้ำหนักของ edge u-v
-
-
-
-
อาร์เรย์ dist[] มีเส้นทางที่สั้นที่สุดจาก s ไปยังโหนดอื่น ๆ ทุกโหนด
อัลกอริทึมของ Dijkstra
อินพุต - กราฟแสดงเครือข่าย และโหนดต้นทาง s
เอาต์พุต - ต้นไม้พาธที่สั้นที่สุด spt[] โดยมี s เป็นโหนดรูท
การเริ่มต้น -
-
อาร์เรย์ของระยะทาง dist[] ขนาด |V| (จำนวนโหนด) โดยที่ dist[s] =0 และ dist[u] =∞ (อนันต์) โดยที่ u แทนโหนดในกราฟ ยกเว้น s.
-
อาร์เรย์ Q ซึ่งประกอบด้วยโหนดทั้งหมดในกราฟ เมื่ออัลกอริทึมทำงานเสร็จสิ้น Q จะว่างเปล่า
-
ชุดว่าง S ซึ่งโหนดที่เข้าชมจะถูกเพิ่มเข้าไป เมื่ออัลกอริทึมทำงานเสร็จสิ้น S จะมีโหนดทั้งหมดในกราฟ
-
ทำซ้ำในขณะที่ Q ไม่ว่าง -
-
ลบออกจาก Q , โหนด, คุณ มี dist[u] ที่เล็กที่สุด และที่ไม่อยู่ใน S . ในการรันครั้งแรก dist[s] จะถูกลบออก
-
เพิ่ม คุณ ถึง S , ทำเครื่องหมายว่าเยี่ยมชมแล้ว
-
สำหรับแต่ละโหนด v ซึ่งอยู่ติดกับ u , อัปเดต dist[v] เป็น −
-
ถ้า (dist[u] + น้ำหนักของขอบ u-v) <dist[v] แล้ว
-
อัปเดต dist[v] =dist[u] + น้ำหนักของ edge u-v
-
-
-
-
อาร์เรย์ dist[] มีเส้นทางที่สั้นที่สุดจาก s ไปยังโหนดอื่นทุกโหนด
อัลกอริทึมของ Floyd Warshall
อินพุต - เมทริกซ์ที่อยู่ติดกันต้นทุน adj[][] แสดงถึงเส้นทางระหว่างโหนดในเครือข่าย
ผลลัพธ์ - เมทริกซ์ต้นทุนเส้นทางที่สั้นที่สุด ต้นทุน[][] แสดงเส้นทางที่สั้นที่สุดในแง่ของต้นทุนระหว่างโหนดแต่ละคู่ในกราฟ
-
เติม ค่าใช้จ่าย[][] ดังนี้
-
ถ้า adj[][] ว่างเปล่า จากนั้น ค่าใช้จ่าย[][] =∞ (อนันต์)
-
ค่าใช้จ่าย[][] =adj[][]
-
-
ไม่มี =|V| โดยที่ วี แสดงถึงชุดของโหนดในเครือข่าย
-
ทำซ้ำสำหรับ k =1 ถึง N −
-
ทำซ้ำสำหรับ i =1 ถึง N −
-
ทำซ้ำสำหรับ j =1 ถึง N −
-
ถ้า ค่าใช้จ่าย[i][k] + ราคา[k][j] <ค่าใช้จ่าย[i][j] แล้ว
-
อัปเดต ค่าใช้จ่าย[i][j] :=ค่าใช้จ่าย[i][k] + ราคา[k][j]
-
-
-
-
-
เมทริกซ์ ค่าใช้จ่าย[][] มีต้นทุนที่สั้นที่สุดจากแต่ละโหนด i ไปยังโหนดอื่นทุกโหนด j .