จำนวนจุดยอดที่เข้าถึงได้ใน DAG สำหรับทุกจุดยอด


11

ให้เป็นชี้นำวัฏจักรกราฟดังกล่าวที่ออกองศาของจุดสุดยอดใด ๆ ที่เป็นO ( เข้าสู่ระบบ| V | ) สำหรับจุดสุดยอดของทุกGเราสามารถนับจำนวนของจุดสามารถเข้าถึงได้โดยการทำงานDFSจากทุกจุดสุดยอดและนี้จะใช้เวลาO ( | V | | E | )เวลา มีวิธีที่ดีกว่าในการแก้ปัญหานี้หรือไม่?G(V,E)O(log|V|)GO(|V||E|)



1
@Radu นี้ซ้ำกันตรงไหน? มันฟังดูเหมือนมัน
Suresh Venkat

@Suresh เมื่อเทียบกับคำถามของฉันคนนี้มีขอบเขตบนในระดับจุดสุดยอดและไม่ขอขอบเขตที่ต่ำกว่า ความคิดเห็นของฉันมีความแตกต่างกันเล็กน้อยดังนั้นฉันคิดว่ามันซ้ำกัน แต่ฉันไม่รู้สึกถึงมันมากนัก
Radu GRIGore

1
ตกลงดังนั้นเราจะปล่อยให้มันเป็นอย่างที่เป็น
Suresh Venkat

4
คำตอบของ virgi สำหรับคำถามของฉันแสดงถึงอัลกอริทึมสำหรับอันนี้ O(|V|2)
Radu GRIGore

คำตอบ:


5

อัลกอริทึมที่แน่นอนที่ดีที่สุดจะทำงานในเวลา O (ขั้นต่ำ {mn, n ^ 2.38}) โดยใช้การคูณเมทริกซ์ไบนารีที่รวดเร็ว อย่างไรก็ตามมีอัลกอริทึมแบบสุ่มซึ่งรันในเวลา O (m + n) และประมาณจำนวนโหนดที่สามารถเข้าถึงได้จากแต่ละโหนดที่มีข้อผิดพลาดสัมพัทธ์เล็กน้อยโปรดดูที่กระดาษ " กรอบการประมาณขนาดด้วยแอพพลิเคชั่น "โดย Edith Cohen


-1

ฉันไม่ใช่ผู้เชี่ยวชาญที่นี่ฉันจะลอง

1) เนื่องจากเป็น DAG จึงควรมีจุดยอดจมเช่นจุดยอดที่มีค่า 0 ไม่เกินจุดสุดยอดค้นหาจุดยอดจมพูดว่า x และเพิ่ม {x} เป็นจุดยอดที่เข้าถึงได้ไปยัง Neighbor (x) ลบ x และทำซ้ำกระบวนการจนกว่ากราฟจะว่างเปล่า


เนื่องจากขอบเขตของการเรียนนอกหลักสูตรดูเหมือนว่าจะมีประโยชน์มากกว่าถ้าเริ่มต้นด้วยแหล่งที่มา
András Salamon

@ andras-salamon: ไม่เพราะคุณไม่รู้ว่ามีกี่โหนดที่สามารถเข้าถึงได้จากแหล่งที่มา คุณไม่ทำอย่างนั้น (ศูนย์) สำหรับอ่างล้างจาน
Martin B.

O(|V||E|)xO(|V|)O(|V|)O(|V|)O(|V||E|)

-2

(คล้ายกับโซลูชันของ Prabu ... แต่รายละเอียดเพิ่มเติม)

N(v)vreach(v)

  1. O(|V|+|E|)
  2. vreach(v)=nN(v)reach(n)

|E|O(|V|+|E|)

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