ความซับซ้อนของเวลาในการหาเส้นผ่านศูนย์กลางของกราฟ คืออะไร
เส้นผ่านศูนย์กลางของกราฟคือระยะทางที่สั้นที่สุดระหว่างชุดของจุดยอดทั้งหมดในกราฟ
ฉันไม่รู้ว่าจะทำอย่างไรเกี่ยวกับเรื่องนี้ฉันต้องการการวิเคราะห์ที่สมบูรณ์เกี่ยวกับวิธีการแก้ปัญหาเช่นนี้
ความซับซ้อนของเวลาในการหาเส้นผ่านศูนย์กลางของกราฟ คืออะไร
เส้นผ่านศูนย์กลางของกราฟคือระยะทางที่สั้นที่สุดระหว่างชุดของจุดยอดทั้งหมดในกราฟ
ฉันไม่รู้ว่าจะทำอย่างไรเกี่ยวกับเรื่องนี้ฉันต้องการการวิเคราะห์ที่สมบูรณ์เกี่ยวกับวิธีการแก้ปัญหาเช่นนี้
คำตอบ:
วิธีนี้ไม่ถูกต้อง
วิธีแก้ปัญหาคือน่าเสียดายจริง ๆ (และตรงไปตรง) สำหรับต้นไม้ การหาเส้นผ่านศูนย์กลางของต้นไม้ไม่ต้องการสิ่งนี้ ต่อไปนี้เป็นตัวอย่างตัวอย่างสำหรับกราฟ (เส้นผ่านศูนย์กลางคือ 4 อัลกอริทึมส่งคืน 3 หากคุณเลือก ):

หากกราฟกำกับทิศทางสิ่งนี้ค่อนข้างซับซ้อนนี่คือกระดาษบางส่วนที่อ้างถึงผลลัพธ์ที่รวดเร็วกว่าในกรณีที่หนาแน่นกว่าการใช้อัลกอริทึมสำหรับเส้นทางที่สั้นที่สุดของคู่ทั้งหมด
อย่างไรก็ตามประเด็นหลักของฉันคือเกี่ยวกับกรณีที่กราฟไม่ได้กำกับและด้วยจุดที่ไม่เป็นลบฉันได้รับเคล็ดลับที่ดีหลายครั้ง:
ความซับซ้อนของมันนั้นเหมือนกับการค้นหาแบบกว้างสองครั้งแรกที่ต่อเนื่องกัน¹นั่นคือหากเชื่อมต่อกราฟ²
ดูเหมือนชาวบ้าน แต่ตอนนี้ฉันยังคงดิ้นรนเพื่อรับการอ้างอิงหรือเพื่อพิสูจน์การแก้ไข ฉันจะอัปเดตเมื่อฉันจะบรรลุเป้าหมายข้อใดข้อหนึ่งเหล่านี้ ดูเหมือนง่ายมากที่ฉันโพสต์คำตอบของฉันตอนนี้บางทีบางคนอาจจะได้เร็วขึ้น
¹ถ้ากราฟจะ weighted, วิกิพีเดียดูเหมือนว่าจะพูดแต่ฉันเป็นเพียงแน่ใจเกี่ยวกับ|)
²หากกราฟไม่ได้เชื่อมต่อคุณจะได้รับแต่คุณอาจต้องเพิ่มเพื่อเลือกองค์ประกอบหนึ่งจากแต่ละองค์ประกอบที่เชื่อมต่อ ฉันไม่แน่ใจว่าจำเป็นหรือไม่และคุณอาจตัดสินใจว่าเส้นผ่านศูนย์กลางไม่มีที่สิ้นสุดในกรณีนี้
ผมถือว่าคุณหมายถึงเส้นผ่าศูนย์กลางของซึ่งเป็นเส้นทางที่สั้นที่สุดที่ยาวที่สุดที่พบในG
การหาเส้นผ่านศูนย์กลางสามารถทำได้โดยการหาเส้นทางที่สั้นที่สุดของคู่ทั้งหมดก่อนและกำหนดความยาวสูงสุดที่พบ อัลกอริทึมฟลอยด์-Warshallไม่นี้ในเวลา อัลกอริทึมจอห์นสันสามารถดำเนินการเพื่อให้บรรลุO ( | V | 2เข้าสู่ระบบ| V | + | V | ⋅ | E | )เวลา
รันไทม์กรณีที่เลวร้ายที่สุดขนาดเล็กดูเหมือนยากที่จะประสบความสำเร็จเนื่องจากมีระยะทางจะต้องพิจารณาและคำนวณระยะทางเหล่านั้นในรูปแบบ sublinear (ตัดจำหน่าย) แต่ละครั้งจะยาก ดูที่นี่สำหรับขอบเขตที่เกี่ยวข้อง บันทึกบทความนี้ซึ่งใช้วิธีการที่แตกต่างกันและรับอัลกอริทึมที่เร็วขึ้น (เล็กน้อย)
นอกจากนี้คุณยังสามารถพิจารณาวิธีเชิงทฤษฎีกราฟเชิงพีชคณิต เส้นผ่าศูนย์กลางเป็นจำนวนเต็มน้อยเสื้อเซนต์เมทริกซ์M = ฉัน+มีคุณสมบัติว่ารายการทั้งหมดของเอ็มทีมีภัณฑ์ คุณสามารถค้นหาตันโดยO ( บันทึกn )การทำซ้ำของการคูณเมทริกซ์ อัลกอริธึมเส้นผ่านศูนย์กลางต้องใช้เวลาO ( M ( n ) บันทึกn )โดยที่M ( n )เป็นขอบเขตสำหรับการคูณเมทริกซ์ ตัวอย่างเช่นกับลักษณะทั่วไปของขั้นตอนวิธีทองแดง-Winograd โดย Vassilevska วิลเลียมส์, อัลกอริทึมเส้นผ่าศูนย์กลางจะทำงานใน ) สำหรับการแนะนำรวดเร็วดูบทที่ 3 ในหนังสือแฟนชองของที่นี่
หากคุณจำกัดความสนใจของคุณในระดับกราฟที่เหมาะสมคุณสามารถแก้ปัญหา APSP ในเวลาเหมาะสม คลาสเหล่านี้ประกอบด้วยกราฟอย่างน้อยช่วงเวลา, กราฟอาร์ควงกลม, กราฟเรียงสับเปลี่ยน, กราฟเรียงสับเปลี่ยนแบบสองส่วน, กราฟลำดับเส้นแรง, กราฟเส้นสองเส้น chordal, กราฟระยะทางพันธุกรรมและกราฟคอร์ด dually ตัวอย่างเช่นดูDragan, FF (2005) การประมาณเส้นทางที่สั้นที่สุดของคู่ทั้งหมดในตระกูลกราฟที่ จำกัด : วิธีการแบบรวม วารสารของอัลกอริทึม, 57 (1), 1-21และการอ้างอิงในนั้น
ข้อสันนิษฐาน:
1. กราฟไม่มีการถ่วงน้ำหนัก
2. กราฟกำกับ
ความซับซ้อนของเวลา O (| V || E |)
ขั้นตอนวิธีการ:
ComputeDiameter(G(V,E)):
if ( isCycle( G(v,E) ) ) then
return INFINITY
if ( not isConnected( G(V,E) )) then
return INFINITY
diameter = 0
for each vertex u in G(V,E):
temp = BFS(G,u)
diameter = max( temp , diameter )
return diameter
คำอธิบาย:
เราตรวจสอบวงจร หากกราฟมีวัฏจักรดังนั้นเราจะเคลื่อนที่เป็นวงกลมดังนั้นเราจะมีระยะทางไม่สิ้นสุด เราตรวจสอบการเชื่อมต่อ หากไม่ได้เชื่อมต่อกราฟนั่นหมายถึงจุดยอด u จาก G1 ไปจนถึงจุดยอด v ใน G2 โดยที่ G1 และ G2 เป็นกราฟย่อยสองอันที่ไม่ได้เชื่อมต่อ ดังนั้นเราจะได้ระยะทางที่ไม่มีที่สิ้นสุดอีกครั้ง เราจะใช้ BFS เพื่อคำนวณระยะทางสูงสุดระหว่างโหนดที่กำหนด (u) กับโหนดอื่น ๆ ทั้งหมด (v) ซึ่งสามารถเข้าถึงได้จาก u จากนั้นเราจะใช้เส้นผ่านศูนย์กลางที่คำนวณได้สูงสุดและผลตอบแทนจาก BFS ดังนั้นเราจะมีเส้นผ่านศูนย์กลางสูงสุดในปัจจุบัน
ใช้เวลาวิเคราะห์:
เวลาทั้งหมด = O (| v || E |) + O (| E |) + O (| E |)
ตั้งแต่ | V || E | > | E |
ดังนั้นเราจึงใช้เวลาเป็น O (| v || E |)
หมายเหตุ: นี่ไม่ใช่วิธีการแก้ปัญหาที่สวยงามสำหรับปัญหานี้