ทอพอโลยีเชิงบวก


45

สมมติว่าฉันมีกราฟ acyclic กำกับด้วยน้ำหนักจริงจำนวนจุดยอด ฉันต้องการค้นหาการจัดเรียงทอพอโลยีของ DAG ซึ่งสำหรับคำนำหน้าของการจัดเรียงโทโพโลยีผลรวมของน้ำหนักนั้นไม่เป็นลบ หรือถ้าคุณชอบคำศัพท์เชิงทฤษฎีฉันมีคำสั่งบางส่วนที่มีน้ำหนักและฉันต้องการส่วนขยายเชิงเส้นเพื่อให้คำนำหน้าแต่ละคำมีน้ำหนักไม่เป็นลบ ปัญหานี้เกิดจากอะไร มันเป็น NP-complete หรือ solvable ในเวลาพหุนาม?


4
ลองอัลกอริทึมโลภบนกราฟนี้: 1 -> 2 -> 3, 1 -> 4 -> 5, น้ำหนักจุดยอดคือ 1: +2, 2: -2, 3: +3, 4: -1 , 5: -2 อัลกอริทึมโลภเริ่มต้นด้วย v1 จากนั้นเลือก v4 แล้วติดขัด ลำดับที่ถูกต้องคือ v1, v2, v3, v4, v5
Robin Kothari

2
"ปัญหาระยะทาง Frechet บางอย่างของ JeffE และคนอื่น ๆ มองดู" - สิ่งที่เป็นนามธรรม! เพื่อประโยชน์ของผู้อื่นนี่เป็นรุ่นเดียว: สมมติว่าคุณได้รับกราฟระนาบน้ำหนักถ่วง G และสองจุดยอดและใบหน้าด้านนอก คุณต้องการที่จะแปลงหนึ่งขอบเขตของเส้นทางจาก s ถึง t ไปยังอีกเส้นทางหนึ่งโดยลำดับการเคลื่อนที่เบื้องต้น การเคลื่อนไหวแต่ละครั้งจะแทนที่เส้นทางปัจจุบันด้วยความแตกต่างที่สมมาตรกับขอบเขตใบหน้าบางส่วน เราจะสามารถหาลำดับของ mve ที่ลดความยาวสูงสุดของเส้นทางการพัฒนาได้อย่างรวดเร็วเพียงใด?
Jeff

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

1
@ David: ขอบคุณสำหรับคำอธิบาย ครั้งนี้ฉันสามารถเข้าใจได้ว่ามันเกี่ยวข้องกับคำถามปัจจุบันอย่างไรและมันน่าสนใจมาก!
Tsuyoshi Ito

3
การสังเกตที่ไม่มีประโยชน์ แต่สนุก: ปัญหานี้เทียบเท่ากับปัญหาการจัดลำดับเครื่องเดียวที่มีกำหนดเวลาและข้อ จำกัดที่มาก่อนซึ่งเวลาประมวลผลของแต่ละงานสามารถเป็นลบได้ ด้วยเวลาในการประมวลผลแบบไม่ลบปัญหานี้อยู่ใน P (Lawler and Mooer 1969 jstor.org/stable/2628367 ) และหากมีวิธีการแก้ปัญหาอยู่จะมีวิธีแก้ปัญหาซึ่งไม่ขึ้นอยู่กับเวลาประมวลผล สิ่งนี้จะพังลงอย่างชัดเจนหากงานบางอย่างมีเวลาประมวลผลเชิงลบ
Tsuyoshi Ito

คำตอบ:


18

ปัญหานี้ดูเหมือนจะคล้ายกันมากกับการจัดลำดับการลดค่าใช้จ่ายสูงสุด CUMULATIVE ปัญหา [SS7] ในGarey และจอห์นสัน เพื่อปัญญา:

INSTANCE: ตั้งค่าของงาน, คำสั่งบางส่วน on , "cost"สำหรับแต่ละ (ถ้า , มันสามารถถูกมองว่าเป็น "profit") และคงที่ZT c ( t ) Z t T c ( t ) < 0 K ZTTc(t)ZtTc(t)<0KZ

คำถาม: มีกำหนดการหนึ่งตัวประมวลผลสำหรับที่เป็นไปตามข้อ จำกัด ที่มาก่อนและมีคุณสมบัติที่สำหรับทุกงานผลรวมของต้นทุนสำหรับงานทั้งหมดกับมากที่สุด ?T T T T ' σ ( T ' ) σ ( T ) KσTtTtσ(t)σ(t)K

ฉันไม่แน่ใจว่าปัญหายังคงอยู่ที่ NP-complete หรือไม่หากถูกแก้ไขเป็น 0 G&J พูดถึงว่าปัญหายังคงสมบูรณ์อยู่ถ้าสำหรับทั้งหมดc ( t ) { - 1 , 0 , 1 } t TKc(t){1,0,1}tT


7
มันดูดี จากนั้นฉันคิดว่าคน ๆ หนึ่งสามารถรับโดยไม่สูญเสียความสามารถทั่วไปหรือเพิ่มงานที่ไม่มีข้อ จำกัด ด้วย -value (หรืองานของ -value ) c - K K c - 1K=0cKKc1
daveagp

@mhum: ฉันกำลังทำงานเกี่ยวกับรายงานทางเทคนิคเกี่ยวกับผลลัพธ์ที่เกี่ยวข้องและต้องการจะอ้างถึงคุณ คุณจะให้ชื่อจริงของคุณกับฉันไหม หากคุณต้องการคุณสามารถส่งอีเมลถึงฉันหรือเพียงแค่อยู่ anon ...
domotorp

9

ทีนี้คำตอบของฉันคือคำถามที่ปรากฎว่าถ้าคุณสามารถแก้ปัญหานี้ได้ใน P คุณก็สามารถแก้ปัญหาเปิดอื่นได้อีก: การ เรียงโทโพโลยีเชิงบวกใช้เวลา 3

แก้ไข: ปัญหานี้กลายเป็นปัญหาสมบูรณ์ดังนั้นปัญหาของคุณจึงเสร็จสมบูรณ์แล้วหาก DAG ของคุณมีเพียงสองระดับคือหากไม่มีเส้นทางกำกับที่มีสองขอบ


3

หากฉันเข้าใจปัญหาอย่างถูกต้องฉันคิดว่าปัญหาการจัดตารางเวลาเครื่องเดียวที่มีความสำคัญมาก่อนเพื่อลดจำนวนผลรวมของเวลาที่เสร็จสมบูรณ์ (1 | prec | \ sum wc) สามารถลดลงไปยังปัญหาที่คุณสนใจ ในปัญหา 1 | prec | \ sum wc เรามีงาน n งานแต่ละงานมีน้ำหนักที่ไม่เป็นลบและเวลาในการดำเนินการโพสต์ในงานและเราต้องการส่วนขยายเชิงเส้นของงานดังกล่าวว่าผลรวมถ่วงน้ำหนักของงานที่เสร็จสมบูรณ์คือ ลดลง ปัญหาคือปัญหาที่ทำให้เสร็จสมบูรณ์ถึงแม้ว่าเราคิดว่าเวลาในการประมวลผลของแต่ละงานมีค่าเท่ากับ 1 มันทำให้รู้สึกใด ๆ ?


เป็นไปได้ที่น่าสนใจ แต่คุณจะทำการลดลงในลักษณะที่เกณฑ์การปรับให้เหมาะสม (ลดผลรวมของเวลาที่เสร็จสมบูรณ์แล้ว) กลายเป็นข้อ จำกัด ได้อย่างไร (คำนำหน้าไม่ใช่แบบลบ)?
David Eppstein

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

ฉันคิดว่าการลดลงนั้นไม่ง่ายอย่างที่ฉันคิดไว้ตั้งแต่แรก ฉันไม่แน่ใจอีกต่อไปจากคำตอบของฉัน
monaldo

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

2

จะทำอย่างไรถ้าเราใช้องค์ประกอบสูงสุดเสมอ (ตามลำดับบางส่วน) ด้วยน้ำหนักที่น้อยที่สุด หลังจากที่เราหมดองค์ประกอบเรากลับในลำดับย้อนกลับเป็นผลลัพธ์


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

แต่วิธีนี้ใช้ได้ผลกับตัวอย่างของเขา: ก่อนอื่นจุดยอด 5 จะถูกเลือกจากนั้นจุดยอด 4 จากนั้น 3, 2 และสุดท้าย 1 ดังนั้นคำสั่งสุดท้ายจะเป็น 1, 2, 3, 4, 5 จริงๆแล้วฉันไม่ได้ คิดว่ายากที่จะพิสูจน์ว่าวิธีนี้ใช้ได้ผล สมมติว่าคุณมีทางออกซึ่งไม่มีองค์ประกอบสูงสุด (อ่าง) ของน้ำหนักขั้นต่ำในตำแหน่งสุดท้าย จากนั้นคุณสามารถหาวิธีแก้ไขปัญหาอื่นที่มีคุณสมบัตินี้เพียงแค่เปลี่ยนตำแหน่งขององค์ประกอบดังกล่าวเป็นครั้งสุดท้ายและรักษาส่วนที่เหลือไว้ตามเดิม ดำเนินการต่อโดยการเหนี่ยวนำสิ่งที่เหลืออยู่และคุณจะได้รับการพิสูจน์อย่างเป็นทางการ
Daniel Martin

ใช่ ... มันไม่ทำงาน ... 1 -> 2 -> 3, 1 -> 4 ที่มีน้ำหนัก 4, -7, 6, 3 ตามลำดับ
Daniel Martin

1

ปัญหานี้ทำให้ฉันมีต้นไม้ตัดสินใจจำนวนมาก ฉันจะพิจารณาวิธีการแก้ปัญหาประเภทนี้ซึ่งพยายามเลือกเส้นทางที่มีแนวโน้มมากที่สุดเสมอ แต่โดยดูที่ subgraph ทั้งหมด:

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

  1. edge_weight = pointing_node_weight
  2. หาขอบเริ่มต้นจาก "โหนดชี้" ที่มีน้ำหนักสูงสุด ให้น้ำหนักนี้เป็น next_edge_weight
  3. edge_weight + = next_edge_weight

จากนั้นสร้างคำสั่งดังนี้:

  1. ให้ S เป็นเขตแดนการค้นหาเช่นชุดของโหนดที่จะเลือกจากถัดไป
  2. เลือกโหนดเพื่อให้ขยายใหญ่สุด (node_weight + max_edge_weight)
  3. ลบโหนดออกจากกราฟและ S เพิ่ม "children" ของโหนดไปยัง S
  4. หากกราฟไม่ว่างให้ไปที่ขั้นตอนที่ 1
  5. หยุด.

ความคิดคือการสำรวจกราฟย่อยเหล่านั้นที่จะได้รับมากที่สุดก่อนเพื่อที่จะสามารถแบกรับค่าใช้จ่ายของกราฟย่อยน้ำหนักเชิงลบในภายหลัง

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