วิธีการเข้าถึงปัญหากราฟที่เกี่ยวข้องกับไดนามิก


15

ฉันถามคำถามนี้ที่ stackoverflow ทั่วไปและฉันถูกนำไปที่นี่

มันจะดีถ้ามีใครสามารถอธิบายวิธีการแก้ปัญหากราฟบางส่วนหรือแบบไดนามิกโดยทั่วไป

ตัวอย่างเช่น:

  • ค้นหาเส้นทางที่สั้นที่สุดระหว่างจุดยอดสองจุดในกราฟถ่วงน้ำหนักแบบไม่ระบุทิศทางสำหรับอินสแตนซ์เมื่อลบขอบที่แต่ละอินสแตนซ์(ยู,โวลต์)n
  • ค้นหาจำนวนของส่วนประกอบที่เชื่อมต่อในกราฟที่ไม่ได้ทำการบอกทิศทางสำหรับอินสแตนซ์ n เมื่อขอบถูกลบในแต่ละอินสแตนซ์ ฯลฯ

ฉันเพิ่งพบปัญหาประเภทนี้ในการแข่งขันเขียนโปรแกรม ฉันค้นหาในเว็บและฉันพบบทความวิจัยมากมายเกี่ยวกับกราฟไดนามิก [1,2] ฉันอ่านคู่ของพวกเขาและฉันไม่สามารถหาสิ่งใดตรงไปข้างหน้า (การจัดกลุ่มการแยกคำ ฯลฯ ) ขออภัยที่คลุมเครือ

ฉันซาบซึ้งจริง ๆ ถ้าบางคนสามารถให้พอยน์เตอร์ให้เข้าใจแนวคิดเหล่านี้ได้ดีขึ้น


  1. อัลกอริทึมกราฟแบบไดนามิกโดย D. Eppstein, Z. Galil, GF Italiano (1999)
  2. เส้นทางที่สั้นที่สุดบนกราฟไดนามิกโดย G. Nannicini, L. Liberti (2008)

คำตอบ:


12

เป็นการยากที่จะให้เทคนิคที่เป็นรูปธรรมแก่คุณเพราะ "ไดนามิก" อาจหมายถึงสิ่งต่าง ๆ ที่หลากหลายและอัลกอริธึม / ผลลัพธ์ขึ้นอยู่กับแบบจำลองของคุณ ด้านล่างเป็นภาพรวมของข้อกังวล นี่คือกระดาษที่ให้ภาพรวมของข้อกังวลและแบบจำลองต่าง ๆ (เกี่ยวข้องกับสิ่งที่ปีเตอร์อ้างในคำตอบอื่น)


สำหรับปัญหาพลวัตโดยทั่วไปประเด็นสำคัญคือ:

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

โมเดลไดนามิกทั่วไปมีลักษณะดังนี้:

  1. รับกราฟคุณต้องการคำนวณคุณสมบัติบางอย่าง คุณได้รับอนุญาตให้คำนวณวิธีแก้ปัญหาสำหรับกราฟเริ่มต้น

  2. คุณจะบอกแล้วปรับเปลี่ยนที่หนึ่ง: ขอบจะถูกลบออก คำนวณทรัพย์สินในรูปแบบของกราฟใหม่โดยใช้ทรัพยากรที่มี จำกัด(อี,)

  3. ทำซ้ำ 2 สำหรับครั้งn

และนี่คือ 3 การดัดแปลงที่เป็นไปได้:

  • คุณไม่ได้รับอนุญาตให้คำนวณโซลูชันที่สมบูรณ์ตั้งแต่ต้นเนื่องจากข้อ จำกัด ด้านข้อมูล / เวลา / พื้นที่ (ตัวอย่างหนึ่งคืออัลกอริทึมออนไลน์ )

  • ในขั้นตอนที่ 2 อัลกอริทึมไม่ได้ "บอก" การปรับเปลี่ยน แต่ต้องค้นหาการปรับเปลี่ยนในกราฟโดยการสอบถามโครงสร้างข้อมูลหรือบางสิ่งบางอย่าง

  • แบบจำลองการกระจาย (เช่นปีเตอร์อธิบายในคำตอบอื่น) ซึ่งข้อมูลถูกค้นพบในท้องถิ่นและการคำนวณ / การเปลี่ยนแปลงจะทำในประเทศ

โดยทั่วไปตัวแบบไดนามิกน่าสนใจเนื่องจากข้อ จำกัด ของทรัพยากร (เช่นเวลา / พื้นที่) ในขั้นตอนที่ 2 หากฉันได้รับอนุญาตให้คำนวณคำตอบทั้งหมด (เช่นเดียวกับที่ฉันทำในขั้นตอนที่ 1) ปัญหานั้นง่ายเนื่องจากมันเป็นปัญหากราฟแบบคงที่ซ้ำแล้วซ้ำอีก เราสนใจทรัพยากรจำนวนน้อยที่สุดที่จำเป็นในการคำนวณการเปลี่ยนแปลง


ขอบคุณมากสำหรับคำตอบ ฉันพยายามที่จะเข้าใจความซับซ้อนและวิธีการแก้ปัญหากราฟแบบไดนามิกบางส่วนอย่างง่าย
Prakash

ขอบคุณมากสำหรับคำตอบ ฉันจะไปตามเอกสาร ฉันพยายามที่จะเข้าใจความซับซ้อนและวิธีการแก้ปัญหากราฟแบบไดนามิกบางส่วนอย่างง่าย ตัวอย่างเช่นระบุชุดของเมืองที่เชื่อมต่อกันด้วยถนนไม่ระบุทิศทางและถ่วงน้ำหนักตามระยะทาง ค้นหาเส้นทางที่สั้นที่สุดระหว่าง 2 เมืองใน n อินสแตนซ์เมื่อถนนถูกบล็อกในแต่ละครั้งด้วยเหตุผลหลายประการ การเรียกใช้ Dijkstra สำหรับ n นั้นเป็นไปไม่ได้มีวิธีการปรับเปลี่ยนอัลกอริทึมที่มีอยู่เช่น A * เพื่อแก้ปัญหาเหล่านี้โดย จำกัด เวลาได้ดีกว่าหรือแนวทางที่กล่าวถึงในเอกสารเป็นวิธีเดียวที่จะไป
Prakash

A * เป็นลักษณะทั่วไปของการวิเคราะห์พฤติกรรมของ Dijkstra + ประสิทธิภาพจะคล้ายกันในกรณีที่เลวร้ายที่สุด สำหรับฉันคำถามสำคัญสำหรับปัญหาของคุณคือ "คุณสามารถจัดเก็บข้อมูลประเภทใดระหว่างอินสแตนซ์ที่จะทำให้อินสแตนซ์ถัดไปเร็วขึ้น" เช่นถ้าฉันเก็บเส้นทางที่สั้นที่สุดก่อนหน้านี้ฉันจะสามารถค้นหาได้อย่างรวดเร็วว่า "ล้มเหลว" แต่ไม่มีวิธีที่ชัดเจนในการคำนวณเส้นทางที่สั้นที่สุดถัดไป (แม้ว่าคุณจะจัดเก็บเส้นทางที่สั้นที่สุด k จากอินสแตนซ์ก่อนหน้านี้ฉันสงสัยว่านี่จะเป็นค่า k)
ลูคัสคุก

(ความคิดเห็นก่อนหน้าของฉันคือการพูดคุยเกี่ยวกับการแก้ปัญหากรณีที่เลวร้ายที่สุดบางทีคุณอาจสนใจเกี่ยวกับกรณีทั่วไปหรือไม่จากนั้นอาจมีการแก้ปัญหาที่ทำให้ A * ประเภทของการแก้ปัญหาที่ดี)
ลูคัสคุก

10

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

ปัญหาที่พิจารณาในการตั้งค่าเหล่านี้เป็นตัวอย่างข้อมูลที่แพร่กระจายซึ่งทุกโหนดในกราฟเริ่มต้นเก็บโทเค็นและในที่สุดคุณต้องการให้ทุกโหนดเห็นโทเค็นทุกตัว เป้าหมายคือการออกแบบอัลกอริธึมที่ทำได้ในจำนวนรอบที่น้อยที่สุดโดยใช้จำนวนข้อความน้อยที่สุด ดู [2] สำหรับแบบสำรวจล่าสุด

สำหรับการตั้งค่าแบบไม่กระจายคุณอาจต้องการดู [1] ซึ่งเป็นส่วนเสริมของกระดาษที่คุณกล่าวถึง


[1] Aris Anagnostopoulos ราวีมาร์โมฮัมหมัด Mahdian, เอลีอัพฟาล, ฟาบิโอ Vandin: อัลกอริทึมในการพัฒนากราฟ ITCS 2012: 149-160

[2] Fabian Kuhn, Rotem Oshman: เครือข่ายแบบไดนามิก: รูปแบบและขั้นตอนวิธี SIGACT News 42 (1): 82-96 (2011)


ข้อความที่ส่งผ่านอัลกอริทึมเหล่านั้นมีปัญหากับการคอนเวอร์เจนซ์ (ขาด) หรือไม่
Raphael

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

ฉันคิดถึงปัญหาการนับจำนวนอนันต์ที่เกิดจากการเปลี่ยนโทโปโลยี
Raphael

@ ราฟาเอลในการเปลี่ยนแปลงแบบพลวัตนักวิจัยมักจะตรวจสอบว่าคุณสมบัติใดที่สามารถรับประกันได้ว่าเป็นกรณีที่แย่ที่สุดภายในกรอบเวลาที่แน่นอน ดังนั้น "การลู่เข้าหากัน" จึงไม่สามารถรับประกันระยะทาง - เวกเตอร์ / เบลล์แมน - ฟอร์ดเนื่องจากปัญหาพื้นฐานกับเทคนิคในสภาพแวดล้อมแบบไดนามิก มีโปรโตคอลการกำหนดเส้นทางคอนเวอร์เจนซ์อื่น ๆ ที่ไม่มีปัญหาการนับถึงอินฟินิตี้
Lucas Cook

3

การสร้างคำตอบเกี่ยวกับ @Peter (เป็นความคิดเห็นที่ยาวมากดังนั้นฉันจึงรวมไว้เป็นคำตอบที่ว่าใครซักคนจะได้ประโยชน์จากมัน)

ฉันขอแนะนำอ้างอิงต่อไปนี้:

Arnaud Casteigts, Paola Flocchini, Walter Quattrociocchi, Nicola Santoro: กราฟที่แปรผันตามเวลาและเครือข่ายแบบไดนามิก IJPEDS 27 (5): 387-408 (2012)

Δ

สิ่งที่สำคัญจริง ๆ ของการจำแนกประเภทนี้คือมีความสัมพันธ์แบบรวมระหว่างชั้นเรียนที่แตกต่างกัน ดังนั้นถ้าคุณแก้ปัญหาในชั้นเรียนหนึ่งคุณจะแก้ปัญหาในชั้นอื่น ๆ ที่รวมอยู่ใน

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

Arnaud Casteigts, Paola Flocchini, Bernard Mans, Nicola Santoro: การคำนวณเชิงกำหนดในกราฟเวลาแปรผัน: การออกอากาศภายใต้การเคลื่อนไหวที่ไม่มีโครงสร้าง IFIP TCS 2010: 111-124

ยูโวลต์{(ยู,x1),(x1,x2),....,(xk,โวลต์)}ยูโวลต์โวลต์ยู

ฉันเข้าร่วมการบรรยายโดยผู้เขียนคนก่อนหน้า จากความเข้าใจของฉันพวกเขาอ้างว่าเราไม่สามารถจัดการกับอัลกอริธึมกราฟแบบไดนามิก (ปฏิบัติตามคำจำกัดความที่พวกเขาติดตาม) ว่าเรายังอยู่ในชั้นเรียนที่เรียบง่าย ในความเป็นจริงพวกเขาอ้างว่าอัลกอริธึมการคำนวณบนมือถือส่วนใหญ่แค่สมมติว่าอัลกอริธึมของพวกเขานั้นเร็วเกินไปที่จะดำเนินการในขณะที่เครือข่ายกำลังอยู่ในช่วงเปลี่ยนผ่าน! (ซึ่งฉันเชื่อว่าฉันได้ยินมาก) - หรือเพียงแค่สันนิษฐานว่าเป็นช่วงเวลาของการปรากฏตัวของขอบ

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