ต้นไม้ทอดต่ำสุดเทียบกับเส้นทางที่สั้นที่สุด


44

ความแตกต่างระหว่างอัลกอริทึม Spanning Tree ขั้นต่ำและอัลกอริธึมพา ธ ที่สั้นที่สุดคืออะไร

ในคลาสโครงสร้างข้อมูลของฉันเราครอบคลุมอัลกอริธึมแผนผังต้นไม้ขั้นต่ำสองอัน (Prim's และ Kruskal's) และอัลกอริธึมพา ธ สั้นที่สุด (Dijkstra's)

Spanning Tree ขั้นต่ำเป็นแผนผังในกราฟที่ครอบคลุมทุกจุดยอดและน้ำหนักรวมของต้นไม้น้อยที่สุด เส้นทางที่สั้นที่สุดนั้นค่อนข้างชัดเจนมันเป็นเส้นทางที่สั้นที่สุดจากจุดสุดยอดหนึ่งไปอีกจุดหนึ่ง

สิ่งที่ฉันไม่เข้าใจคือเนื่องจากต้นไม้ที่สแปนนิ่งขั้นต่ำมีน้ำหนักรวมเพียงเล็กน้อยเส้นทางในต้นไม้จะเป็นเส้นทางที่สั้นที่สุดหรือไม่ ใครช่วยอธิบายสิ่งที่ฉันหายไปได้บ้าง

ความช่วยเหลือใด ๆ ที่ชื่นชม


นี่คือตัวอย่างของฉันสำหรับคำถามที่คล้ายกันซึ่งพิสูจน์ว่าต้นไม้ที่สแปนนิ่งขั้นต่ำนั้นไม่เหมือนกันกับเส้นทางที่สั้นที่สุด cs.stackexchange.com/a/43327/34363
atayenel

นอกจากนี้อาจน่าสนใจ ต้นไม้ที่ทอดสูงสุดมีเส้นทางระหว่างโหนดที่แต่ละเส้นทางเป็นเส้นทางคอขวดคือแทนที่จะลดผลรวมคุณลดน้ำหนักให้น้อยที่สุด อาจจะมีความสัมพันธ์ที่คล้ายกันระหว่างแผนผังที่ครอบคลุมน้อยที่สุด
ยูจีน

คำตอบ:


37

พิจารณากราฟรูปสามเหลี่ยมที่มีน้ำหนักหน่วย - มันมีสามจุดและทั้งสามขอบ{ x , Y } , { x , Z } , { Y , Z }มีน้ำหนัก1 เส้นทางที่สั้นที่สุดระหว่างจุดยอดสองจุดใด ๆ คือเส้นทางโดยตรง แต่ถ้าคุณรวมทั้งหมดเข้าด้วยกันคุณจะได้รูปสามเหลี่ยมมากกว่าต้นไม้ คอลเลกชันของขอบทั้งสองจะสร้างแผนผังที่ครอบคลุมน้อยที่สุดในกราฟนี้ แต่ถ้า (ตัวอย่าง) คุณเลือก{ x , y } , { y ,x,Y,Z{x,Y},{x,Z},{Y,Z}1แล้วคุณพลาดเส้นทางที่สั้นที่สุด { x , Z }{x,Y},{Y,Z}{x,Z}

โดยสรุปหากคุณรวมเส้นทางที่สั้นที่สุดทั้งหมดเข้าด้วยกันคุณไม่จำเป็นต้องได้รับต้นไม้


32

คุณมีสิทธิ์ที่อัลกอริธึมสองตัวของDijkstra (เส้นทางที่สั้นที่สุดจากโหนดเริ่มต้นเดียว) และPrim (ต้นไม้ที่มีน้ำหนักน้อยที่สุดที่ทอดจากต้นที่กำหนด) มีโครงสร้างที่คล้ายกันมาก พวกเขาทั้งสองเป็นโลภ (ใช้ขอบที่ดีที่สุดจากมุมมองปัจจุบัน) และสร้างต้นไม้ที่ขยายกราฟ

ค่าที่พวกเขาย่อให้เล็กสุดนั้นแตกต่างกัน Dijkstra เลือกเป็นขอบถัดไปที่นำออกจากต้นไม้ไปยังโหนดที่ยังไม่ได้เลือกใกล้กับโหนดเริ่มต้น (จากนั้นด้วยตัวเลือกนี้ระยะทางจะคำนวณใหม่) Prim ไล่ตามขอบที่สั้นที่สุดที่นำออกมาจากต้นไม้ที่สร้างขึ้น ดังนั้นอัลกอริทึมทั้งสองจึงเลือก "ขั้นต่ำ" ความแตกต่างหลักคือค่าที่เลือกให้น้อยที่สุด สำหรับ Dijkstra มันคือความยาวของเส้นทางที่สมบูรณ์จากโหนดเริ่มต้นไปยังโหนดที่มีตัวเลือกสำหรับ Prim นั้นเป็นเพียงน้ำหนักของขอบเดียวนั้น

x,Y,Z{x,Y}{x,Z}{Y,Z}x{x,Y}{x,Z}{x,Y}{Y,Z}

ต้นไม้: Dijkstra กับ Kruskal

สำหรับKruskalนั้นแตกต่างกันเล็กน้อย มันแก้ต้นไม้ที่สแปนน้อยที่สุด แต่ในระหว่างการประมวลผลมันเลือกขอบที่อาจไม่ได้สร้างเป็นทรีพวกเขาเพียงแค่หลีกเลี่ยงรอบ ดังนั้นโซลูชั่นบางส่วนอาจถูกตัดการเชื่อมต่อ ในท้ายที่สุดคุณจะได้รับต้นไม้


12

แม้ว่าการคำนวณขั้นต่ำของ Spanning Tree และ Shortest Path algorithm จะมีลักษณะคล้ายกัน

ใน MST ความต้องการคือการเข้าถึงแต่ละจุดสุดยอดหนึ่งครั้ง (สร้างแผนภูมิกราฟ) และค่าใช้จ่ายทั้งหมด (รวม) ในการเข้าถึงแต่ละจุดสุดยอดจะต้องมีค่าต่ำสุดในชุดค่าผสมที่เป็นไปได้ทั้งหมด

ในเส้นทางที่สั้นที่สุดข้อกำหนดคือการเข้าถึงจุดสุดยอดปลายทางจากจุดสุดยอดต้นทางด้วยต้นทุนที่ต่ำที่สุด (น้ำหนักที่สั้นที่สุด) ดังนั้นที่นี่เราไม่ต้องกังวลกับการเข้าถึงจุดสุดยอดแต่ละจุดแทนที่จะมุ่งเน้นไปที่จุดยอดและปลายทางเท่านั้นและนั่นคือความแตกต่าง

นี่คือตัวอย่างที่จะอธิบายว่าทำไม MST ไม่จำเป็นต้องให้เส้นทางที่สั้นที่สุดระหว่าง 2 จุดยอด

(A)----5---(B)----5---(C)
 |                     |
 |----------7----------| 

ในกรณี MST ให้ขอบ AB BC จะอยู่ที่ MST ซึ่งมีน้ำหนักรวม 10 ดังนั้นค่าใช้จ่ายในการเข้าถึง A ถึง C ใน MST คือ 10

แต่ในกรณีเส้นทางที่สั้นที่สุดเส้นทางที่สั้นที่สุดระหว่าง A ถึง C คือ AC ซึ่งเป็น 7 AC ไม่เคยอยู่บน MST


4

ความแตกต่างอยู่ในเป้าหมายสูงสุดของอัลกอริธึมนี้คืออะไร

Dijkstra's - นี่คือเป้าหมายคือการเข้าถึงตั้งแต่ต้นจนจบ คุณมีความกังวลเกี่ยวกับ 2 คะแนนนี้เท่านั้นและปรับเส้นทางของคุณให้เหมาะสม

Krusal's - ที่นี่คุณสามารถเริ่มจากจุดใดก็ได้และต้องไปที่จุดอื่น ๆ ทั้งหมดในกราฟ ดังนั้นคุณอาจไม่เลือกเส้นทางที่สั้นที่สุดเสมอไปสำหรับสองคะแนน แทนที่จะมุ่งเน้นคือการเลือกเส้นทางที่จะนำคุณไปสู่เส้นทางที่สั้นกว่าสำหรับจุดอื่น ๆ ทั้งหมด


1

ฉันคิดว่าตัวอย่างจะทำให้ชัดเจนขึ้น ..

ป้อนคำอธิบายรูปภาพที่นี่

ต้นไม้ที่ขยายออกจะมีลักษณะดังนี้ นี่เป็นเพราะถ้าเราเพิ่มขอบในการกำหนดค่านี้เราจะได้รับค่าใช้จ่ายน้อยที่สุด : 2 + 5 + 14 + 4 = 25

(1)   (4)
  \   /
   (2)
  /   \
(3)   (5)

ด้วยการมองต้นไม้ที่ทอดคุณอาจคิดว่ามันทำให้เส้นทางที่สั้นที่สุด แต่ในทางปฏิบัติไม่ได้ ตัวอย่างเช่นถ้าเราอยากจะไปจากโหนด(1)ไป(4)ก็จะเสียค่าใช้จ่ายเรา 7 อย่างไรก็ตามถ้าเราใช้อัลกอริทึมของ Dijkstra ในรูปแบบของกราฟเดิมเราจะพบว่าเราสามารถไปได้โดยตรงจากโหนด(1)ไปกับค่าใช้จ่ายของ(4)5


-1

ตัวอย่างการปฏิบัติเพื่อแสดงความแตกต่าง>

สมมติว่าคุณมาถึงโดยรถไฟในเมืองและต้องการไปที่โรงแรมของคุณ

ตัวเลือกที่ 1: รับรถแท็กซี่: แท็กซี่จะใช้เส้นทางที่สั้นที่สุดไปยังโรงแรมของคุณจากสถานี หากผู้ขับขี่ควรปฏิบัติตามเส้นทางตามต้นไม้ที่สั้นที่สุดที่อยู่กึ่งกลางสถานี

ตัวเลือกที่ 2: ขึ้นรถบัส บริษัท รถบัสต้องการที่จะตอบสนองความต้องการของผู้คนไม่ใช่แค่คุณ เส้นทางที่เหมาะจะใช้ในประเด็นสำคัญทั้งหมดในเมือง ดังนั้นมันจะติดตาม (*) เส้นทางตามต้นไม้ทอดข้ามขั้นต่ำ นั่นเป็นสาเหตุที่ทำให้รถบัสช้าลง แต่เมื่อมีการแบ่งปันค่าใช้จ่ายก็จะถูกกว่า

(*) ที่จริงแล้วคนจะบ่นว่าต้นไม้ที่ทอดยาวขั้นต่ำถูกนำมาใช้ (การเดินทางรถบัสจะยาวเกินไป) ดังนั้นในทางปฏิบัติมันจะเป็นวิธีการแก้ปัญหาแบบผสมและจะใช้อัลฟ่า - ทรี (ครึ่งทางระหว่างต้นไม้ที่ทอดต่ำสุดและต้นไม้เส้นทางที่สั้นที่สุด)


1
ยินดีต้อนรับสู่เว็บไซต์ ฉันไม่คิดว่าการเปรียบเทียบของคุณเป็นสิ่งที่ดีเนื่องจากเส้นทางที่ใช้โดยรถบัสดูเหมือนจะไม่เกี่ยวข้องกับต้นไม้ที่ทอด โดยเฉพาะอย่างยิ่งมันไม่ได้ครอบคลุม (มันไม่ได้เยี่ยมชมทุกจุดในเมือง) และมันไม่ใช่ต้นไม้ แต่มันเป็นเส้นทาง (หรือรอบ) บางประเภทที่การเข้าชมหรือผ่านไปใกล้กับจุดสำคัญหลายจุดตามสมควรเพื่อเส้นทางนั้นมีประโยชน์พอสมควรสำหรับผู้คนจำนวนมากพอสมควร
David Richerby

-1

พวกเขาจะขึ้นอยู่กับคุณสมบัติที่แตกต่างกันสอง Spanning Tree ขั้นต่ำขึ้นอยู่กับคุณสมบัติของการตัดในขณะที่เส้นทางที่สั้นที่สุดจะขึ้นอยู่กับคุณสมบัติการผ่อนคลายของขอบ

การตัดแบ่งกราฟออกเป็นสององค์ประกอบ มันอาจเกี่ยวข้องกับหลายขอบ ใน MST เราเลือกขอบที่มีน้ำหนักน้อยที่สุด

การผ่อนคลายขอบบอกว่าให้ฉันรู้ระยะห่างระหว่าง A และ B: dist (a, b) และ dist ระหว่าง A และ C: dist (a, c), ถ้า dist (a, b) + edge (b, c) น้อยกว่า dist (a, c) จากนั้นฉันสามารถผ่อนคลาย edge (ac) หลังจากผ่อนคลายขอบทั้งหมดเราได้เส้นทางที่สั้นที่สุด

ฉันขอแนะนำให้ดูวิดีโอเกี่ยวกับอัลกอริธึมกราฟจากศาสตราจารย์ Robert Sedgewick

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.