เลือกการแสดงข้อมูล
ก่อนอื่นดูขนาดของผลลัพธ์ คุณต้องการรวบรวมเส้นทางที่สั้นที่สุดจากไปยังโหนดอื่นทุกโหนด เว้นแต่ความยาวเฉลี่ยของเส้นทางถูกล้อมรอบด้วยค่าคงที่ (ซึ่งไม่ใช่: รายการใด ๆ ที่เป็น unipath และถ้าคุณหาค่ารากสำหรับความยาวทั้งหมดของเส้นทางคือโดยที่คือ ความยาวของรายการ) คุณจะต้องระมัดระวังในการแสดงข้อมูลของคุณ: โครงสร้างที่มีเส้นทางจะต้องใช้การแชร์ระหว่างเส้นทางssn(n−1)/2n
ไม่รวมรอบมีเส้นทางเดียวจากไปยังโหนดอื่น ๆยูถ้าเส้นทางที่จะไปผ่านกลางโหนดแล้วส่วนแรกของเส้นทางเป็นเส้นทางที่ต้องการจากไปที sutst
ผมเสนอให้จัดเก็บผลในอาร์เรย์จัดทำดัชนีโดยโหนดจำนวนจากไปกับ 0 แต่ละองค์ประกอบในอาร์เรย์เก็บดัชนีของโหนดก่อนหน้านี้บนเส้นทางไปยังโหนดนั้น (ใช้เช่นเป็นเครื่องหมายพิเศษสำหรับโหนดที่ไม่สามารถเข้าถึงได้จาก ) เส้นทางจากเพื่อจะt)0|E|−1s=0−1sst(s=R[…R[t]…],…,R[R[t]],R[t],t)
สำรวจกราฟ
เตรียมทุก-1R−1
ดำเนินการครั้งแรกลึกหรือกว้างแรกสำรวจเส้นทางของกราฟเริ่มต้นจากsทุกครั้งที่ถึงโหนดให้ตั้งค่าเป็นบรรพบุรุษของมันsuR[u]
เนื่องจากมีรอบจึงอาจถึงโหนดมากกว่าหนึ่งครั้ง การมีระบุว่าได้เยี่ยมชมแล้วR[u]≠−1u
พิสูจน์ความถูกต้อง
เนื่องจากคุณสมบัติ unipathic จึงไม่สำคัญว่าเราจะไปถึงแต่ละโหนดได้อย่างไรตราบใดที่เรายังไม่ครบรอบ มีเพียงเส้นทางเดียวเท่านั้น
พิสูจน์ความซับซ้อน
อัลกอริทึมอาจถึงแต่ละโหนดมากกว่าหนึ่งครั้งจึงไม่ชัดเจนว่าความซับซ้อนของมันคือ|) งานที่ทำอยู่ในความเป็นจริงโดยที่เป็นขอบที่สามารถเข้าถึงได้จากแหล่งที่มา แม่นยำมากขึ้นเราไปถึงโหนดมากกว่าหนึ่งครั้งในกรณีเดียวเท่านั้น: ถ้าโหนดเป็นครั้งแรกที่เราไปถึงในรอบหนึ่ง ๆ และในกรณีนี้เราไปถึงสองครั้ง (จากเส้นทางที่เรียบง่ายและอีกครั้งหลังจากเสร็จสิ้นรอบ )O(|V|)Θ(|E0|)V0
ดีละถ้าอย่างนั้น. เรามาพิสูจน์กันแล้วว่าในกราฟ unipathic จำนวนรอบประถมศึกษาจะเพิ่มขึ้นเป็นเส้นตรงตามจำนวนโหนด (วัฏจักรพื้นฐานคือวงจรที่ไม่มีวงจรที่สั้นกว่า) ในการสนทนาต่อไปนี้ฉันจะสมมติว่ากราฟไม่มีขอบตัวเอง (ไม่มีขอบจากโหนดถึงตัวมันเองขอบนั้นไม่เกี่ยวข้องกับการสร้างเส้นทางเลย )
กราฟ Unipathic สามารถมีรอบ แต่ในทางที่ จำกัด มาก มันจะดีถ้าเราสามารถเชื่อมโยงแต่ละรอบกับโหนดที่แตกต่างกัน (หรืออย่างน้อยที่สุดก็คือจำนวนรอบต่อโหนดที่ จำกัด ) รอบสามารถแบ่งปันโหนดหรือไม่ น่าเสียดายใช่
คุณสามารถมีรอบทั้งหมดที่ใช้ร่วมกันหนึ่งโหนดและไม่มีโหนดอื่น กราฟผลลัพธ์คือ unipathic ที่มีรอบของความยาว 2 นี้เป็นรูปแบบดาวแห่งนี้มีโหนดศูนย์กลางและจำนวนของโหนดใด ๆดังกล่าวว่าb_imaabi∀i,a⇆bi
ดังนั้นเราจะต้องทำงานให้หนักขึ้น ทีนี้เราลองพิสูจน์ว่ามันเหนี่ยวนำ ให้เป็นจำนวนโหนดในกราฟ ,จำนวนขอบและจำนวนรอบประถมที่ไม่ใช่ขอบตัวเอง ผมยืนยันว่าถ้าเป็น unipathic และไม่ว่างแล้ว\#V(G)G#E(G)#C(G)G#C(G)≤#V(G)−1
สำหรับกราฟที่มีหนึ่งหรือสองโหนดจะเห็นได้ชัด สมมติว่าการยืนยันถือกราฟทั้งหมดที่และปล่อยให้เป็นกราฟ unipathic ที่มีโหนดถ้าไม่มีรอบ, , เคสปิด มิฉะนั้นให้เป็นวัฏจักรเบื้องต้น#V(G)<nGnG0=#C(G)<#V(G)(a1,…,am)
ยุบรอบ: ให้เป็นกราฟที่มีโหนดเป็นลบบวกโหนดและมีขอบเป็นขอบทั้งหมดของไม่เกี่ยวข้องกับบวกเมื่อใดก็ตามที่และเมื่อใดก็ตามที่Ä_i ทุกเส้นทางในทำให้เกิดเส้นทางใน (ถ้าเส้นทางเกี่ยวข้องกับดังนั้นแทนที่ด้วยG′G{a1,…,am}aGaia→G′b∃i,ai→Gbb→G′a∃i,b→GaiG′Gb→a→cb→ai→ai+1→…→aj→cใน ) ดังนั้นจึงเป็น unipathic นอกจากนี้ตั้งแต่รอบในไม่ขอบหุ้นมีวงจรทั้งหมดในยกเว้นสำหรับคนที่เราตัดออก:\ โดยการเหนี่ยวนำ 1 ตั้งแต่เรามีn-1GG′GG′G#C(G′)=#C(G)−1#C(G′)≤#V(G′)−1#V(G′)=#V(G)−m+1#C(G)=#C(G′)+1≤#V(G)−m=n−m≤n−1
นี่เป็นการสรุปหลักฐาน การเคลื่อนที่ผ่านตามขอบมากที่สุด2|V|−2