กำกับการค้นหายูเนี่ยน


11

พิจารณากราฟกำกับGที่หนึ่งสามารถเพิ่มขอบแบบไดนามิกและทำแบบสอบถามเฉพาะบางอย่าง

ตัวอย่าง: ฟอเรสต์ disjoint-set

พิจารณาชุดคำถามต่อไปนี้:

arrow(u, v)
equiv(u, v)
find(u)

คนแรกที่จะเพิ่มลูกศรจากกราฟที่สองตัดสินใจถ้ามึง*วีคนสุดท้ายพบตัวแทนที่ยอมรับของชั้นสมมูลของ* , เช่นR ( U )ดังกล่าวว่ายู*วีหมายถึงR ( V ) = R ( U )uvuvr(u)uvr(v)=r(u)

มีความเป็นอัลกอริทึมที่รู้จักกันดีโดยใช้โครงสร้างข้อมูลป่าเคล็ดชุดดำเนินการคำสั่งเหล่านี้ในกึ่งคงตัดจำหน่ายซับซ้อนคือ(n)) หมายเหตุว่าในกรณีนี้จะดำเนินการใช้O(α(n))equivfind

ตัวแปรที่ซับซ้อนมากขึ้น

ตอนนี้ฉันสนใจปัญหาที่ซับซ้อนยิ่งขึ้นซึ่งทิศทางสำคัญ:

arrow(u, v)
confl(u, v)
find(u)

คนแรกที่จะเพิ่มลูกศรวินาทีตัดสินใจถ้ามีโหนดสามารถเข้าถึงได้จากทั้งและคือ←วี อันสุดท้ายควรส่งคืนออบเจคต์เช่นที่หมายถึงโดยที่ควรคำนวณได้ง่าย (เพื่อที่จะพูดคำนวณ) เป้าหมายคือการหาโครงสร้างข้อมูลที่ดีเพื่อให้การดำเนินการเหล่านี้รวดเร็วuvwuvuvr(u)uvr(u)r(v)confl

รอบ

กราฟสามารถมีรอบ

ฉันไม่ทราบว่ามีวิธีในการคำนวณส่วนประกอบที่เชื่อมต่ออย่างมีประสิทธิภาพและเพิ่มขึ้นหรือไม่เพื่อพิจารณา DAG สำหรับปัญหาหลักเท่านั้น

แน่นอนฉันจะขอบคุณวิธีแก้ปัญหาสำหรับ DAG ด้วย มันจะสอดคล้องกับการคำนวณที่เพิ่มขึ้นของบรรพบุรุษร่วมกันน้อยที่สุด

วิธีการไร้เดียงสา

โครงสร้างข้อมูลฟอเรสต์ที่แยกจากกันนั้นไม่เป็นประโยชน์ที่นี่เนื่องจากมันไม่สนใจทิศทางของขอบ โปรดทราบว่าไม่สามารถเป็นโหนดเดียวในกรณีที่กราฟไม่ไหลมารวมกันr(u)

หนึ่งสามารถกำหนดและการกำหนดเป็นเมื่อs_2 แต่วิธีคำนวณนี้เพิ่มขึ้น?r(u)={vuv}S1S2S1S2

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

คำตอบ:


3

( แก้ไข : เขียนคำตอบใหม่ทั้งหมดตอนนี้ความเข้าใจของฉันคือชัดเจน (ฉันหวังว่า) ชัดเจนขึ้น)

ดูเหมือนว่าปัญหานี้สามารถลดลงเป็นการสร้างแบบค่อยเป็นค่อยไปและปรับปรุงการประมาณของการปิดสกรรมกริยาของกราฟในขณะที่สร้างและค้นหากราฟ

r(u)คือนามธรรมชุดของโหนดทั้งหมดที่สามารถเข้าถึงได้จากทั้งและสำหรับทุกในกราฟ (แน่นอนว่าไม่ใช่ทุกคู่จำเป็นต้องมีโหนดที่สามารถเข้าถึงได้จากทั้งคู่) ไม่เหมือนกรณีที่พบในยูเนี่ยนชุดนี้ไม่สามารถแสดงเป็นโหนดตัวแทนที่เป็นที่ยอมรับในกราฟเพราะ อาจจะมีโหนดที่สามารถเข้าถึงได้จากทั้งและและจากทั้งและที่มียังคงไม่สามารถเข้าถึงได้จากทั้งและWuvvuu,vuvuwvw

สมมติว่าคุณรักษาไว้สำหรับทุก ๆชุดของโหนดที่เข้าถึงได้จาก (ฉันจะเรียกสิ่งนี้ว่า ) ชุดเหล่านี้จำเป็นต้องเป็นโครงสร้างข้อมูลพิเศษสำหรับแต่ละโหนดหรืออย่างน้อยชุดของ "ทางลัด" พิเศษขอบในกราฟ หากคุณไม่สนใจเกี่ยวกับการรักษาโครงสร้างที่ระบุของกราฟคุณไม่จำเป็นต้องแยกแยะระหว่างขอบเหล่านี้กับขอบที่ระบุuuR(u)

ฉันไม่มีความคิดใด ๆ เลยสำหรับโครงสร้างข้อมูลที่รวบรวมสิ่งนี้ซึ่งมีประสิทธิภาพมากกว่ากรณีทั่วไป (เช่นบิตเวกเตอร์หรือตารางแฮช) แต่คุณสามารถอัปเดตชุดเหล่านี้แบบเพิ่มเติมได้:

เวลาที่คุณเพิ่มขอบจากบางโหนดอื่น ๆคุณตั้งค่า(V)uvR(u)=R(u)R(v)

ใช้งานconflโดยลองก่อน หากไม่ใช่ค่าว่างให้ส่งคืนค่าจริง แต่ถ้ามันเป็นที่ว่างเปล่าทำคู่ขนานสองค้นหากว้างแรกจากและจนกว่าคุณจะหมดทั้งสองชุดสามารถเข้าถึงได้หรือหาโหนดในการร่วมกัน ในขณะที่คุณทำสิ่งนี้ให้อัปเดตและ (และของโหนดกลางทั้งหมดที่คุณค้นหา) เพื่อรวมโหนดที่เข้าถึงได้ที่คุณพบ และถ้าคุณพบโหนดในการร่วมกันตั้ง R (U) = R (V) = R (U) \ ถ้วย R (V)R(u)R(v)R(u)R(v)R(u)R(v)R

find(u)เพียงแค่ส่งกลับ(U) ปัญหาคือว่าไม่ได้ดำเนินการอย่างหมดจดในแง่ของ ฉันไม่เห็นว่ามันจะเป็นไปได้อย่างไรถ้าอัลกอริทึมนั้นไม่เพิ่มขึ้น (เช่นคำนวณล่วงหน้าชุดทั้งหมดของโหนดทั้งหมดที่มีการปิดกราฟของสกรรมกริยา) อย่างไรก็ตามวิธีการส่วนเพิ่มควรให้ค่าตัดจำหน่ายที่ดีพอสมควร ค่าใช้จ่ายแม้ว่าฉันจะไม่รู้ว่ามันเข้าใกล้ชักช้า (อาจไม่เป็นเช่นนั้นคำตอบที่ไม่ถูกต้องจำเป็นต้องให้คุณเริ่มต้น BFS สองตัวแม้ว่าชุดของคุณจะอิ่มตัว แต่ก็ดูเหมือนว่าจะหลีกเลี่ยงไม่ได้ยกเว้นว่าอัลกอริทึมนั้นไม่ได้เพิ่มขึ้น)R(u)conflfindRO(α(n))conflR

เสียงนี้เป็นจำนวนมากเช่นมันอาจจะเป็นกรณีพิเศษของLa Poutréและรถตู้ Leeuwen ของวิธีการรักษาปิดสกรรมกริยาของกราฟ

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


ขอขอบคุณสำหรับคำตอบของคุณฉันหวังว่าฉันทำคำถามของฉันชัดเจนมากขึ้นในขณะนี้: ฉันไม่สนใจเกี่ยวกับส่วนประกอบที่เกี่ยวโยงกัน ( แต่ CCs อย่างยิ่งอาจจะเป็นประโยชน์ในการแก้ปัญหาสุดท้าย); ฉันยังไม่มี และนี้ไม่สามารถเป็นโหนดเดียวใน DAG r(u)r(u)
jmad

ตกลงนั่นค่อนข้างชัดเจน ดูเหมือนว่าคือนามธรรมชุดของโหนดทั้งหมดที่สามารถเข้าถึงได้จากทั้งและสำหรับทุกในกราฟ ชุดนี้อาจเป็นชุดของ "ทางลัด" ที่อยู่นอกขอบของฉันคิดว่าและจากนั้นสิ่งนี้เริ่มดูเหมือนว่าจะคำนวณการปิดการเข้าถึงของสกรรมกริยาในกราฟ ฉันยังไม่เห็นในทันทีว่าทำไมไม่สามารถทำแบบนี้เพิ่มขึ้นได้ (บีบอัดเส้นทางตามที่คุณพบ) แม้ว่ามันอาจจะต้องใช้พื้นที่เก็บข้อมูล / งานมากขึ้น (ติดป้าย / อัปเดต "ทางลัด" ทั้งหมด "ขอบ) มันสมเหตุสมผลหรือไม่ r(u)uv vuu
Chris Pressey

สมมติว่าการปิดสกรรมกริยาเป็นวิธีที่ยุติธรรมในการกำหนดลักษณะดูเหมือนว่าจะเกี่ยวข้องกันอย่างใกล้ชิด: en.wikipedia.org/wiki/…r(u)
Chris Pressey

ฉันไม่คิดว่าconfl(u,v)ควรผสานและ(V) มันสามารถปรับเปลี่ยนได้ แต่การเรียกไปยังทำได้เช่นเดียวกับในฟอเรสต์ disjoint-set R(u)R(v)find
jmad

คุณพูดถูกมันไม่ควรรวมเข้าด้วยกัน ฉันจะแก้ไขคำตอบ แต่การเรียกร้องให้findคำนวณสิ่งที่มีประโยชน์ไม่ได้จริงๆเพราะไม่มีวัตถุใด ๆ ที่จะ "ค้นหา" ยกเว้นซึ่งใกล้เคียง (วิธีที่จะรู้ว่าสิ่งที่จะมองหาที่จะทำให้การปรับปรุงมันจะได้รับเท่านั้น?แต่ข้อมูลในที่อาจนำไปใช้กับทุกโหนดอื่น ๆ ในกราฟ.)r(u)R(u)finduR(u)
คริส Pressey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.