ให้ dag แบบถ่วงน้ำหนักมีอัลกอริทึม O (V + E) เพื่อแทนที่แต่ละน้ำหนักด้วยผลรวมของน้ำหนักของบรรพบุรุษหรือไม่


34

แน่นอนปัญหาคือการนับซ้ำ มันง่ายพอที่จะทำสำหรับคลาสของ DAGs = a tree หรือแม้แต่ต้นไม้แบบขนาน อัลกอริทึมเดียวที่ฉันได้พบซึ่งทำงานบน DAG ทั่วไปในเวลาที่เหมาะสมคือประมาณหนึ่ง (การสรุปเรื่องย่อ) แต่การเพิ่มความแม่นยำของมันนั้นขึ้นอยู่กับจำนวนบิต (และฉันต้องการบิตจำนวนมาก)

พื้นหลัง: งานนี้เสร็จสิ้น (หลายครั้งด้วย 'น้ำหนัก' ที่แตกต่างกัน) ซึ่งเป็นส่วนหนึ่งของการคำนวณความน่าจะเป็นใน BBChop (http://github.com/ealdwulf/bbchop) โปรแกรมสำหรับค้นหาข้อผิดพลาดที่ไม่ต่อเนื่อง (เช่นเวอร์ชัน Bayesian ของ ' git bisect ') DAG ที่เป็นปัญหาจึงเป็นประวัติการแก้ไข นั่นหมายความว่าจำนวนของขอบไม่น่าจะเข้าหากำลังสองของจำนวนโหนดได้มันน่าจะน้อยกว่า k คูณจำนวนโหนดสำหรับบางขนาดเล็ก k น่าเสียดายที่ฉันไม่พบคุณสมบัติที่มีประโยชน์อื่น ๆ ของการแก้ไข DAG ตัวอย่างเช่นฉันหวังว่าส่วนประกอบ triconnected ที่ใหญ่ที่สุดจะเติบโตได้เฉพาะในฐานะสแควร์รูทของจำนวนโหนด แต่น่าเศร้า (อย่างน้อยที่สุดในประวัติศาสตร์ของเคอร์เนลลินุกซ์) มันจะเติบโตเป็นเส้นตรง


เพื่อชี้แจง: มันเป็นเพียงโหนดที่มีน้ำหนักไม่ใช่ขอบใช่หรือไม่
Heinrich Apfelmus

ใช่เพียงแค่โหนด
Ealdwulf

4
นี่น่าจะเป็นสิ่งที่ใกล้เคียงกับcstheory.stackexchange.com/questions/553/… ?
Jukka Suomela

สิ่งนี้ดูเหมือนจะเป็นเรื่องทั่วไปมากกว่าเนื่องจากการกำหนดน้ำหนักต่อหน่วยให้กับทุกจุดลดปัญหานี้ให้กับปัญหาการเข้าถึง
Suresh Venkat

การประมาณดูเหมือนจะไม่ยากที่จะทำอย่างไรกับปัจจัยโพลิล็อกพิเศษบางอย่าง ...
Sariel Har-Peled

คำตอบ:


17

เราคิดว่าน้ำหนักยอดสามารถเป็นจำนวนเต็มบวกโดยพลการหรืออย่างแม่นยำมากขึ้นพวกเขาสามารถเป็นจำนวนเต็มบวกที่มากที่สุด 2 n จากนั้นงานปัจจุบันจะไม่สามารถดำเนินการได้แม้ในเวลาที่ จำกัด น้อยกว่าเล็กน้อย O ( n 2 ) เว้นแต่ว่าการคำนวณสกรรมกริยาของกราฟกำกับที่กำหนดเองสามารถคำนวณได้ในเวลา O ( n 2 ) โดยที่nหมายถึงจำนวนของจุดยอด (โปรดทราบว่าอัลกอริทึมO ( n 2 ) - เวลาสำหรับการปิด transitive จะเป็นการฝ่าฝืน) นี่คือการโต้แย้งของการอ้างสิทธิ์ต่อไปนี้:

ข้อเรียกร้อง หากงานปัจจุบันสามารถดำเนินการในเวลา O ( n 2 ), การปิดสกรรมกริยาของกราฟกำกับโดยพลการที่กำหนดเป็นเมทริกซ์ adjacency ของมันสามารถคำนวณได้ในเวลา O ( n 2 ) (สมมติว่ารูปแบบการคำนวณที่เหมาะสมบางอย่าง)

พิสูจน์ ในฐานะที่เป็น preprocessing เราคำนวณสลายองค์ประกอบที่เชื่อมต่ออย่างยิ่งของการให้กำกับกราฟGในเวลา O ( n 2 ) เพื่อให้ได้ DAG G ' โปรดทราบว่าถ้าเราสามารถคำนวณการปิดสกรรมกริยาของG 'เราสามารถสร้างปิดสกรรมกริยาของG

ตอนนี้กำหนดน้ำหนักที่ 2 ผมจะจุดสุดยอดในแต่ละฉันของ DAG G 'และใช้อัลกอริทึมสำหรับปัญหาในปัจจุบัน จากนั้นการแทนเลขฐานสองของผลรวมที่กำหนดให้กับแต่ละจุดสุดยอดฉันจะอธิบายถึงชุดบรรพบุรุษของฉันในคำอื่น ๆ เราได้คำนวณการปิด transitive ของG ′ QED

การสนทนาของการเรียกร้องยังคงมีอยู่: หากคุณสามารถคำนวณการปิดสกรรมกริยาของ DAG ที่กำหนดได้ง่ายต่อการคำนวณจำนวนเงินที่ต้องการโดยการทำงานเพิ่มเติมในเวลา O ( n 2 ) ดังนั้นในทางทฤษฎีคุณสามารถบรรลุงานปัจจุบันในเวลา O ( n 2.376 ) โดยใช้อัลกอริทึมสำหรับการปิดสกรรมกริยาขึ้นอยู่กับขั้นตอนวิธีการคูณเมทริกซ์ทองแดง-Winograd

แก้ไข : การแก้ไข 2 และรุ่นก่อนหน้าไม่ได้ระบุสมมติฐานเกี่ยวกับช่วงของน้ำหนักจุดสุดยอดอย่างชัดเจน ต่อ Vognsen ชี้ให้เห็นในความคิดเห็นว่าข้อสันนิษฐานนี้อาจไม่สมเหตุสมผล (ขอบคุณ!) และฉันเห็นด้วย แม้ว่าจะไม่จำเป็นต้องใช้น้ำหนักตามอำเภอใจในแอปพลิเคชั่น แต่ฉันเดาว่าคำตอบนี้อาจแยกแยะวิธีการบางอย่างด้วยการให้เหตุผลต่อไปนี้:“ หากวิธีนี้ใช้ได้ผลมันจะให้อัลกอริธึมสำหรับน้ำหนักตามอำเภอใจ สามารถคำนวณการปิดได้ในเวลา O ( n 2 )”

แก้ไข : การแก้ไข 4 และก่อนหน้านี้ระบุทิศทางของขอบอย่างไม่ถูกต้อง


4
เมื่อคืนนี้ฉันคิดเกี่ยวกับเรื่องนี้มากเนื่องจากวิธีแก้ปัญหาที่ใช้งานได้จริงใช้เวกเตอร์บิตเพื่อนับจำนวนการแยก ฉันเดาคำถามเดียวคือว่ามันสมเหตุสมผลหรือไม่ที่จะสมมติว่าน้ำหนักสามารถมีความยาวบิตได้สัดส่วนกับ n ในทางปฏิบัติฉันสามารถจินตนาการน้ำหนักถูกล้อมรอบด้วย k เพื่อให้ผลรวมสูงสุดที่เป็นไปได้คือ kn ซึ่งมีบิตไม่เพียงพอที่จะดึงเคล็ดลับนี้
ต่อ Vognsen

@Per: ฉันยอมรับว่าข้อสันนิษฐานที่ว่าน้ำหนักจุดสุดยอดสามารถเป็นจำนวนเต็ม n-bit อาจเป็นปัญหา ฉันแก้ไขคำตอบเพื่อให้สมมติฐานนี้ชัดเจน ขอบคุณ!
Tsuyoshi Ito

1
@Per: ฉันรู้ว่าถ้าน้ำหนักจุดสุดยอดเป็นจำนวนเต็มล้อมรอบด้วย O (1) ปัญหาจะลดลงในกรณีที่จุดยอดทั้งหมดมีน้ำหนัก 1โดยการทำจุดยอดซ้ำในวิธีที่เหมาะสม
Tsuyoshi Ito

น่าเสียดายที่ฉันไม่เห็นคำตอบในเธรดนั้นเกี่ยวกับปัญหาการนับ จำนวนนั้นมีข้อมูลน้อยกว่าการปิดรายการสกรรมกริยา O (n log n) และ O (n ^ 2) ดังนั้นฉันจึงไม่เห็นว่าการลดลงอย่างตรงไปตรงมานั้นจะทำงานได้อย่างไร
ต่อ Vognsen

โดยวิธีการรุ่นที่น่าสนใจของปัญหานี้คือเมื่อเรามีความผูกพันกับปัจจัยสาขาและข้อมูลเกี่ยวกับการเติบโตในขนาดของรุ่น (เรียงลำดับ la la ทอพอโลยี) ของ DAG หากการเติบโตนั้นเป็นรูปแบบเลขชี้กำลังรูปแบบนั้นเหมือนต้นไม้ เกิดอะไรขึ้นถ้ามันเป็นเชิงเส้น, log-linear, กำลังสอง, ฯลฯ ?
ต่อ Vognsen

2

นี่เป็นการขยายความคิดเห็นของฉันต่อคำตอบของ Tsuyoshi ฉันคิดว่าคำตอบเชิงลบสำหรับคำถามนั้นสามารถสร้างขึ้นได้โดยไม่มีเงื่อนไข

ดูเหมือนว่าปัญหานี้ต้องการการดำเนินการเพิ่มเติมในกรณีที่เลวร้ายที่สุดแม้สำหรับกราฟที่มีขอบดังนั้นจึงดูเหมือนเป็นไปไม่ได้ที่จะบรรลุขอบเขตที่ต้องการω(n)O(n)

พิจารณากราฟซึ่งประกอบด้วยจุดยอด , จัดเรียงในตาราง จุดยอดในแต่ละแถวขึ้นอยู่กับจุดยอดสองจุดอย่างแม่นยำในแถวด้านบน ตระกูลประกอบด้วยกราฟเช่นนี้สำหรับการรวมค่าและที่เหมาะสมและการจัดเรียงของขอบที่เหมาะสมGr,cr×crrc

โดยเฉพาะอย่างยิ่งให้และn นอกจากนี้ให้น้ำหนักของจุดยอดแถวบนเป็นพลังที่แตกต่างกันของ 2r=(log n)/2c=2n/log n

แต่ละจุดยอดในแถวด้านล่างจะขึ้นอยู่กับจุดยอดในแถวบนสุด เท่าที่ฉันสามารถบอกได้มี DAG ที่เฉพาะเจาะจงที่มีค่าแตกต่างกันสำหรับน้ำหนักแถวล่างแต่ละแถวเช่นไม่สามารถนำกลับมาใช้ซ้ำได้จะต้องมีค่าเฉลี่ยสำหรับผลรวมแต่ละรายการเหล่านี้nω(log n)

โดยรวมอัตราผลตอบแทนนี้ลดผูกพันสำหรับจำนวนของการเพิ่มในขณะที่จำนวนขอบเป็น(n)ω(n)2c(r1)=O(n)

ประเด็นดูเหมือนว่าคำสั่งพื้นฐานบางส่วนนั้นมีความหนาแน่นสูง แต่ DAG แสดงถึงการลดลงของสกรรมกริยาซึ่งอาจเบาบาง


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

@ ซึโยชิ: ฉันคิดว่าการดำรงอยู่ควรจะผ่านข้อโต้แย้งความน่าจะเป็นและขอบเขตล่างอ่อนแอดังนั้นจึงดูเหมือนว่ามีพื้นที่เพียงพอสำหรับการทำงาน แต่คุณพูดถูกมันเป็น handwavy วลีที่ว่า "การเพิ่มเติมที่ไม่สามารถใช้ซ้ำได้โดยเฉลี่ย" นั้นต้องการรากฐานที่ดีกว่า
András Salamon

-2

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

หากจำนวนของรุ่นก่อนหน้าของโหนดถูกล้อมรอบด้วยดังนั้นอัลกอริธึมที่จัดเรียงทอพอโลยีก่อนจากนั้นประมวลผลโหนดตามลำดับนี้จะทำงาน แนะนำให้ทำการวัดจำนวนผู้ที่มาก่อนโดยทันทีโดยดู DAG ว่าเป็นคำสั่งบางส่วน รุ่นที่มีจำนวน จำกัด ของรุ่นก่อนหน้าในทันทีอาจเหมาะสมสำหรับประวัติการแก้ไขซึ่งมีเพียงไม่กี่ไฟล์เท่านั้นที่มีการเปลี่ยนแปลงโดยการแก้ไขส่วนใหญ่k

ประเด็นก็คือว่าในกรณีพิเศษนี้สำหรับแต่ละโหนดมีที่มากที่สุดรุ่นก่อนในระยะยาวเพื่อที่จะต้องมองไปที่ดังนั้นนี้สามารถทำได้ด้วยเพิ่มเติมkO(k|V|)

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

วิธีการนี้ควรทำงานได้ดีหากมีบางโหนดที่มีรุ่นก่อนหน้าจำนวนมากตราบใดที่โหนดเหล่านี้ไม่บ่อยนัก


4
ฉันไม่เข้าใจ. คุณจะหลีกเลี่ยงการนับซ้ำได้อย่างไรเมื่อ DAG ไม่ใช่ต้นไม้ ในความเป็นจริงถ้าฉันไม่เข้าใจผิดกรณีทั่วไปสามารถลดลงได้ในกรณีที่จุดสุดยอดแต่ละอันมีผู้ทำหน้าที่มากที่สุดสองคนและอัลกอริทึมเชิงเส้นใด ๆ สำหรับกรณีหลังให้อัลกอริทึมเวลาบรรทัดสำหรับกรณีทั่วไป
Tsuyoshi Ito

ขอบเขตที่ร้องขอคือและคำพูดเกี่ยวกับการนับซ้ำดูเหมือนว่านอกเหนือจากจุด จำนวนที่ จำกัด ของรุ่นก่อนหน้านั้นดูเหมือนจะเพียงพอ แต่ละค่าใช้ในจำนวนผลรวมบางส่วนไม่เกินkO(|V|+|E|)k
András Salamon

ฉันกลัวว่าคุณเข้าใจความคิดเห็นของฉันผิด ฉันกำลังสอบถามความถูกต้องของอัลกอริทึมของคุณไม่ใช่เวลาทำงาน สมมติว่า DAG ที่มีจุดยอดสี่จุด A, B, C, D ที่มีขอบ A → B → D และ A → C → D กับแต่ละจุดยอดที่ให้น้ำหนักบางส่วน หลังจากคำนวณผลรวมบางส่วนสำหรับ B และ C คุณไม่สามารถเพิ่มผลรวมบางส่วนสำหรับ B และ C เพื่อคำนวณผลรวมสำหรับ D เนื่องจากการทำเช่นนั้นจะเพิ่มน้ำหนักของจุดยอด A สองครั้ง
Tsuyoshi Ito

@Tsuyoshi: หมายถึงความหมายว่า "คำนวณ "? จากนั้นฉันก็เข้าใจคำถามผิดไปรวมกับเส้นทางก่อนทั้งหมด u<vw(u)
András Salamon

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