![]() |
หลายๆปัญหาสามารถนำมาจำลองโดยใช้กราฟ
และน้ำหนักที่ถูกกำหนด ใส่ในแต่ละด้าน ในการยกตัวอย่างนี้จะพิจารณาระบบสายการบินที่ถูกจำลองขึ้นมา เราได้กำหนดแบบจำลองกราฟพื้นฐานโดยการแทนเมืองด้วยจุดยอด และสายการบินด้วยด้าน ปัญหาเกี่ยวกับระยะทางสามารถจำลองโดยการกำหนดระยะทาง ระหว่างเมืองแทนในด้าน ปัญหาที่เกี่ยวข้องกับเวลาของเที่ยวบินสามารถจำลองโดยการกำหนดเวลาของเที่ยวบินแทนในด้าน ปัญหาที่เกี่ยวข้องกับค่าโดยสาร สามารถจำลองโดยการกำหนดค่าโดยสารแทนในด้าน รูปที่ 1 แสดงให้เห็นการกำหนดที่แตกต่างกัน 3 แบบของน้ำหนักบนด้านของกราฟที่แทนด้วยระยะทาง เวลาของเที่ยวบินและค่าโดยสาร ตามลำดับ |
รูปที่ 1
กราฟซึ่งมีตัวเลขที่ถูกกำหนดในแต่ละด้าน
จะเรียกว่า กราฟมีน้ำหนัก กราฟนี้จะถูกใช้เพื่อจำลองเครือข่ายคอมพิวเตอร์ ค่าใช้จ่ายการสื่อสาร
(เช่น ค่าเช่าสาย โทรศัพท์รายเดือน) เวลาตอบสนองของคอมพิวเตอร์บนเส้นพวกนี้ หรือระยะทางระหว่างคอมพิวเตอร์เป็นต้น พวกนี้ทั้งหมดสามารถนำมาศึกษาโดยใช้กราฟ มีน้ำหนัก ปัญหาหลายๆแบบจะเกี่ยวข้องกับกราฟมีน้ำหนักบ่อยๆ การกำหนดเส้นทางที่สั้นที่สุดระหว่าง 2 จุดยอดบนเครือข่ายเป็นปัญหาหนึ่ง เราให้ความยาว ของเส้นทางในกาฟมีน้ำหนักเป็นผลรวมทั้งหมดของน้ำหนักบนด้านของเส้นทางนั้น มีคำถามว่าอะไรเป็นเส้นทางที่สั้นที่สุดระหว่าง 2 จุดยอดที่ให้ ตัวอย่างเช่น ในระบบสายการบินที่ถูกแทนด้วยกราฟมีน้ำหนักใน รูปที่ 1 อะไรเป็นเส้นทางที่สั้นที่สุดระหว่างบอสตั้นกับลอสแองเจอลิส การรวมกันของเที่ยวบินอะไรที่มีเวลา บินรวมน้อยที่สุดระหว่างบอสตั้นและลอสแองเจอลิส อะไรเป็นค่าโดยสารที่ถูกที่สุดระหว่าง 2 เมืองนี้ ในเครือข่ายคอมพิวเตอร์แสดงใน รูปที่ 2 อะไรเป็นกลุ่ม ของสายเช่าโทรศัพท์ที่แพงสุดที่ต้องการเชื่อมต่อคอมพิวเตอร์ในซันฟานซิสโกกับนิวยอร์ค ชุดของสายโทรศัพท์ไหนที่ให้เวลาตอบสนองที่เร็วสุด ในการติดต่อ สื่อสารระหว่างซันฟรานซิสโกกับนิวยอร์ค และชุดของโทรศัพท์อันไหนที่มีระยะทางโดยรวมสั้นที่สุด |
รูปที่ 2
ในการหาเส้นทางที่สั้นที่สุดมีอัลกอริทึมหลายแบบที่แตกต่างกันที่ใช้หาเส้นทางที่สั้นที่สุดระหว่าง
2 จุดยอดในกราฟมีน้ำหนัก เราจะแสดงขั้นตอนที่ค้นพบ |
|
ตัวอย่างที่1 อะไรเป็นความยาวของเส้นที่สั้นที่สุดระหว่าง a และ z ในกราฟมีน้ำหนัก |
วิธีแก้ปัญหา เส้นทางเดียวเท่านั้นที่เริ่มที่
a ทั้ง a ไป b และa ไป d ดังนั้นความยาวของ a ไป b และa ไป d คือ 4 และ 2 เราสามารถหาจุดถัดไปที่ใกล้ที่สุดได้โดยมองเส้นทางทั้งหมด
แล้วผ่านไปทาง a และ d เท่านั้น แล้วเส้นทาง การหาจุดที่ใกล้กับ
a มากที่สุดเป็นจุดที่ 3 เราต้องทดสอบเส้นทางที่ผ่าน a , d หรือ b เท่านั้น
มีเส้นทางหนึ่ง |
|
จาก ตัวอย่างที่1 เป็นการยกตัวอย่างวิธีการใช้ในอัลกอริทึมของ
Dijkstra สังเกตว่าระยะสั้นที่สุดจาก a ไปยัง z หาได้จากการไล่จนพบ แต่อย่างไรก็ตาม
ตอนนี้เราจะพิจารณาปัญหาทั่วๆไป ของการหาความยาวระยะทางสั้นที่สุดระหว่าง
a และ z ในแบบกราฟมีน้ำหนักทั่วๆไปที่เชื่อมกันอย่างไม่เป็นทิศทาง Dijkstra's Algorithm { G has vertices a = v0 , v1 , v2 , ... , vn = Z and weight w = ( vi , vj ) = ฅ if { vi , vj } is not an edge in G } For i = 1 to n
|
เราสามารถนำ Algorithm ของ Dijkstra นี้ไปเขียนเป็นตารางในขณะที่คำนวนหาเส้นทางที่สั้นที่สุดเพื่อให้เข้าง่ายขึ้นได้ดังนี้ |
การทำงาน - Loop
ที่ 1 พบว่ามีน้ำหนักจาก a ไปยังจุด b และ d ให้นำค่าน้ำหนักไปเขียนลงในตาราง
จุดอื่นๆที่ไม่มี - Loop
ที่ 2 จุดใดที่มีค่าน้ำหนักแต่ไม่มีการเลือกใน Loop ก่อนหน้านี้ให้นำมาเขียนไว้ดังเดิมนั่นคือน้ำหนัก
4 ที่ - Loop
ที่ 3 จะมองในลักษณะเดียวกับ Loop ก่อนหน้านี้ มีน้ำหนักจาก b ไปยัง c กับ
e มีน้ำหนักเท่ากับ 3 ที่จุด - Loop ที่ 4 ทำงานลักษณะเดียวกันกับ Loop ที่ผ่านมา
ที่ Loop นี้จะเลือก z เพราะมีน้ำหนักน้อยที่สุด ทำให้เรา |