ความซับซ้อนของเวลาในการหาเส้นผ่านศูนย์กลางของกราฟ


27

ความซับซ้อนของเวลาในการหาเส้นผ่านศูนย์กลางของกราฟ คืออะไรG=(V,E)

  • O(|V|2)
  • O(|V|2+|V||E|)
  • O(|V|2|E|)
  • O(|V||E|2)

เส้นผ่านศูนย์กลางของกราฟGคือระยะทางที่สั้นที่สุดระหว่างชุดของจุดยอดทั้งหมดในกราฟ

ฉันไม่รู้ว่าจะทำอย่างไรเกี่ยวกับเรื่องนี้ฉันต้องการการวิเคราะห์ที่สมบูรณ์เกี่ยวกับวิธีการแก้ปัญหาเช่นนี้


4
กรุณาอธิบายอย่างละเอียดหน่อย ทำไมปัญหานี้จึงเป็นที่สนใจของคุณ คุณต้องการคำใบ้การวิเคราะห์ที่สมบูรณ์หรือการอ้างอิงหรือไม่? คุณสนใจเวลาที่แย่ที่สุดหรือโดยเฉลี่ยใช่ไหม เป็นกำกับ? G
Raphael

@ ราฟาเอล: แน่นอนฉันไม่ต้องการคำใบ้ฉันต้องการการวิเคราะห์ที่สมบูรณ์ ฉันแก้ไขคำถามของฉันแล้ว
Gigili

1
@Gigili คุณหมายถึงในทุกกรณีใช่มั้ย มิฉะนั้นทั้งหมดจะถูกรวมเข้าด้วยความเป็นไปได้สุดท้าย (ซึ่งอยู่บนกราฟทั่วไปเท่ากับ ) ซึ่งทำให้เป็นคำตอบที่ถูกต้องโดยสมมติว่าคำตอบอย่างน้อยหนึ่งคำตอบควรถูกต้อง ข้อกังวลเพิ่มเติมคือในกราฟที่มีรอบไม่มีเส้นทางที่ยาวที่สุด "ระยะทางไกล" หมายถึงอะไร? O ( | V | 5 )ΘO(|V|5)
Raphael

@Gigili ตัวเลือกทั้งสี่มาจากไหน?
uli

คำตอบ:


5

ปรับปรุง:

วิธีนี้ไม่ถูกต้อง

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

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


หากกราฟกำกับทิศทางสิ่งนี้ค่อนข้างซับซ้อนนี่คือกระดาษบางส่วนที่อ้างถึงผลลัพธ์ที่รวดเร็วกว่าในกรณีที่หนาแน่นกว่าการใช้อัลกอริทึมสำหรับเส้นทางที่สั้นที่สุดของคู่ทั้งหมด

อย่างไรก็ตามประเด็นหลักของฉันคือเกี่ยวกับกรณีที่กราฟไม่ได้กำกับและด้วยจุดที่ไม่เป็นลบฉันได้รับเคล็ดลับที่ดีหลายครั้ง:

  1. เลือกจุดยอดโวลต์
  2. หานั้นสูงสุดd ( v , u )ยูd(โวลต์,ยู)
  3. ค้นหาที่สูงสุดWd(ยู,W)
  4. ส่งคืนd(ยู,W)

ความซับซ้อนของมันนั้นเหมือนกับการค้นหาแบบกว้างสองครั้งแรกที่ต่อเนื่องกัน¹นั่นคือหากเชื่อมต่อกราฟ²O(|E|)

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

¹ถ้ากราฟจะ weighted, วิกิพีเดียดูเหมือนว่าจะพูดแต่ฉันเป็นเพียงแน่ใจเกี่ยวกับ|)O(|E|+|V|เข้าสู่ระบบ|V|)O(|E|เข้าสู่ระบบ|V|)

²หากกราฟไม่ได้เชื่อมต่อคุณจะได้รับแต่คุณอาจต้องเพิ่มเพื่อเลือกองค์ประกอบหนึ่งจากแต่ละองค์ประกอบที่เชื่อมต่อ ฉันไม่แน่ใจว่าจำเป็นหรือไม่และคุณอาจตัดสินใจว่าเส้นผ่านศูนย์กลางไม่มีที่สิ้นสุดในกรณีนี้O(|V|+|E|)O(α(|V|))


หากต้องการ mkae Dijsktra ทำงานในเวลาที่กำหนดคุณต้องใช้ฟีโบนัชชีฮีปไม่ใช่การใช้งานตามปกติ
Suresh

8
นี่เป็นคำตอบที่ผิดอย่างยิ่งอัลกอริทึมนี้เป็นนิทานพื้นบ้าน แต่ในต้นไม้ไม่ใช่กราฟทั่วไป ป.ล. : ฉันเห็นตัวอย่างเคาน์เตอร์ของคุณ แต่คำตอบไม่ดีที่ถูกทำเครื่องหมายเป็นคำตอบ

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

32

ผมถือว่าคุณหมายถึงเส้นผ่าศูนย์กลางของซึ่งเป็นเส้นทางที่สั้นที่สุดที่ยาวที่สุดที่พบในGGG

การหาเส้นผ่านศูนย์กลางสามารถทำได้โดยการหาเส้นทางที่สั้นที่สุดของคู่ทั้งหมดก่อนและกำหนดความยาวสูงสุดที่พบ อัลกอริทึมฟลอยด์-Warshallไม่นี้ในเวลา อัลกอริทึมจอห์นสันสามารถดำเนินการเพื่อให้บรรลุO ( | V | 2เข้าสู่ระบบ| V | + | V || E | )เวลาΘ(|V|3)O(|V|2เข้าสู่ระบบ|V|+|V||E|)

รันไทม์กรณีที่เลวร้ายที่สุดขนาดเล็กดูเหมือนยากที่จะประสบความสำเร็จเนื่องจากมีระยะทางจะต้องพิจารณาและคำนวณระยะทางเหล่านั้นในรูปแบบ sublinear (ตัดจำหน่าย) แต่ละครั้งจะยาก ดูที่นี่สำหรับขอบเขตที่เกี่ยวข้อง บันทึกบทความนี้ซึ่งใช้วิธีการที่แตกต่างกันและรับอัลกอริทึมที่เร็วขึ้น (เล็กน้อย)O(|V|2)


2
หากคุณได้รับเงินในเอกสารเหล่านี้ให้ตรวจสอบ Google Scholar
Raphael

นอกจากนี้ข้อยกเว้นนี้มีค่าสำหรับการสังเกตต้นไม้ที่ไม่ได้ใช้เส้นทางซึ่งคุณสามารถรับได้ ด้วยการแวะผ่าน dfs เพียงครั้งเดียว
azam

15

นอกจากนี้คุณยังสามารถพิจารณาวิธีเชิงทฤษฎีกราฟเชิงพีชคณิต เส้นผ่าศูนย์กลางเป็นจำนวนเต็มน้อยเสื้อเซนต์เมทริกซ์M = ฉัน+มีคุณสมบัติว่ารายการทั้งหมดของเอ็มทีมีภัณฑ์ คุณสามารถค้นหาตันโดยO ( บันทึกn )การทำซ้ำของการคูณเมทริกซ์ อัลกอริธึมเส้นผ่านศูนย์กลางต้องใช้เวลาO ( M ( n ) บันทึกn )โดยที่M ( n )diam(G)tM=I+AMttO(logn)O(M(n)logn)M(n)เป็นขอบเขตสำหรับการคูณเมทริกซ์ ตัวอย่างเช่นกับลักษณะทั่วไปของขั้นตอนวิธีทองแดง-Winograd โดย Vassilevska วิลเลียมส์, อัลกอริทึมเส้นผ่าศูนย์กลางจะทำงานใน ) สำหรับการแนะนำรวดเร็วดูบทที่ 3 ในหนังสือแฟนชองของที่นี่O(n2.3727logn)

หากคุณจำกัดความสนใจของคุณในระดับกราฟที่เหมาะสมคุณสามารถแก้ปัญหา APSP ในเวลาเหมาะสม คลาสเหล่านี้ประกอบด้วยกราฟอย่างน้อยช่วงเวลา, กราฟอาร์ควงกลม, กราฟเรียงสับเปลี่ยน, กราฟเรียงสับเปลี่ยนแบบสองส่วน, กราฟลำดับเส้นแรง, กราฟเส้นสองเส้น chordal, กราฟระยะทางพันธุกรรมและกราฟคอร์ด dually ตัวอย่างเช่นดูDragan, FF (2005) การประมาณเส้นทางที่สั้นที่สุดของคู่ทั้งหมดในตระกูลกราฟที่ จำกัด : วิธีการแบบรวม วารสารของอัลกอริทึม, 57 (1), 1-21และการอ้างอิงในนั้นO(n2)


2
เป็นที่น่าสังเกตว่าอัลกอริทึมนี้ใช้ได้เฉพาะในกรณีที่ไม่ได้ถ่วง
GMB

-2

ข้อสันนิษฐาน:
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 ดังนั้นเราจะมีเส้นผ่านศูนย์กลางสูงสุดในปัจจุบัน

ใช้เวลาวิเคราะห์:

  1. O (| E |) โดยใช้ DFS
  2. O (| E |) โดยใช้ DFS
  3. BFS ทำงานในเวลา O (| E |)
  4. เราต้องเรียกใช้ฟังก์ชัน BFS สำหรับแต่ละจุดสุดยอดดังนั้นทั้งหมดจะใช้เวลา O (| V || E |)

เวลาทั้งหมด = O (| v || E |) + O (| E |) + O (| E |)
ตั้งแต่ | V || E | > | E |
ดังนั้นเราจึงใช้เวลาเป็น O (| v || E |)

BFS
DFS

หมายเหตุ: นี่ไม่ใช่วิธีการแก้ปัญหาที่สวยงามสำหรับปัญหานี้


กราฟที่เชื่อมต่อแบบ Acyclic เป็นต้นไม้ซึ่งปัญหานั้นง่ายกว่า (เนื่องจากเส้นผ่านศูนย์กลางถูกกำหนดโดยเส้นทางที่ยาวที่สุด) มันได้รับการจัดการกับที่นี่และที่นี่ซึ่งให้อัลกอริทึมที่เร็วกว่า (การสำรวจเส้นทางแบบวนซ้ำหนึ่งครั้งหรือการเปลี่ยนแปลงสองครั้ง BFS ก็เพียงพอแล้ว)
Raphael

1
@ ราฟาเอลไม่กราฟที่ไม่ได้กำหนดเส้นทางแบบตรงเป็นต้นไม้ DAG คือ DAG
David Richerby

@ DavidRicherby ถูกต้อง (แม้ว่าในทางเทคนิคแล้วคำตอบไม่ได้บอกว่ามันไม่รวมรอบที่กำกับหรือไม่ได้กำหนดทิศทางโดยตรง)) อย่างไรก็ตามนี่คืออะไรนอกจากการแก้ APSPP (แนวทางไร้เดียงสา) ซึ่งได้รับการครอบคลุมสำหรับกรณีทั่วไปแล้วโดยคำตอบก่อนหน้า
Raphael

@ ราฟาเอลคุณแน่ใจหรือว่ากราฟอะไซคลิกเป็นต้นไม้? กราฟคือ Acyclic ไม่ได้หมายความว่ากราฟจะเป็นต้นไม้เสมอ ต้นไม้เป็นเพียงกรณีพิเศษของสิ่งนี้นอกจากนี้ยังเป็นอัลกอริธึมตรงไปข้างหน้าและความซับซ้อนของเวลาคือ O (| V | | E |)
sonus21

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