ขายบล็อกของช่วงเวลา


27

รับช่วงเวลาที่คนต้องการซื้อคนที่มีค่าแต่ละครั้งสล็อตเจแต่ละคนสามารถซื้อช่วงเวลาหนึ่งช่วงติดต่อกันเท่านั้นซึ่งอาจว่างเปล่าnkih(i,j)0j

มีวิธีคิดแบบพหุนามเวลาในการคำนวณมูลค่าสูงสุดที่ผู้ขายสามารถทำได้หรือไม่?

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

คำตอบ:


9

กำหนด 3CNF กับคำสั่งกับตัวแปรx_1,สมมติว่าทั้งและปรากฏในสูตรเป็นเวลามากที่สุดตามลำดับϕ1,,ϕkx1,,xnxixi¯ki

เราออกแบบ DAGที่มีสีซึ่งจุดยอดประกอบด้วยสามส่วน:G

  • "การกำหนด" จุดและ , ,k_i สีกับ "สี"และกับ(ญ)vi(j)v¯i(j)1in1jkivi(j)xi(j)v¯i(j)xi¯(j)
  • "ข้อ" จุด , , J'=สีมีสี (หรือ ) ถ้า (หรือ , resp.) คือ -th ตัวอักษรของประโยคและเป็นประโยค -th ที่มีตัวอักษรนี้wi(j)1ikj=1,2,3wi(j)xi(j)xi¯(j)xi¯xijϕij
  • "ตัด" จุด tสีพวกเขาด้วยสีที่แตกต่างจากด้านบนs=s0,s1,,sn,sn+1,sn+k=t

ขอบรวมถึง:

  • si1vi(1) , , ;vi(j)vi(j+1)vi(ki)si
  • si1v¯i(1) , , ;v¯i(j)v¯i(j+1)v¯i(ki)si
  • และ ,'}sn+i1wi(j)wi(j)sn+i

ตัวอย่างเช่นจาก 3CNF กราฟต่อไปนี้ถูกสร้างขึ้น (ทิศทางขอบจากซ้ายไปขวา) (x1x2x3¯)(x1x2¯x3)ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้มันก็ไม่ยากที่จะเห็นว่าเดิมเป็น 3CNF พอใจและถ้าหากมี -เส้นทางที่มีสีที่แตกต่างกันในจุดสุดยอดGstG

(โดยวิธีการมันเป็นผลพลอยได้ที่มีอยู่ของเส้นทาง -มีจุดสุดยอดสีที่แตกต่างกันในสี DAG คือฉันไม่พบวรรณกรรมจำนวนมากเกี่ยวกับปัญหานี้ในมุมมองการคำนวณถ้า คุณรู้โปรดแสดงความคิดเห็น!)stNP-hard

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

เมทริกซ์ของเรามีคอลัมน์ที่มีดัชนีเริ่มต้นจาก0ใน constrcution ต่อไปนี้เป็นสองค่าตอบสนองความY อัตราส่วนสามารถเป็นพลังที่มีขนาดใหญ่ของและnให้k_ih2n+1+i2ki+k0XY1XYX/1,Y/XknKi=2i+2j=1iki

  • สำหรับแต่ละ , , ให้ (ถ้า มีการประสานงานอยู่ด้านล่างเดียวกัน)si0inh(si,Ki)=h(si,Kiki1)=h(si,Ki+ki+1+1)=Y
  • สำหรับแต่ละให้ ; สำหรับแต่ละให้ Xxi(j)h(xi(j),Ki1+j)=Xxi¯(j)h(xi¯(j),Ki1+ki+1+j)=X
  • สำหรับแต่ละ ,และตัวอักษรในประโยคให้ 1ϕi1ikxϕih(x,Kn+i)=1
  • รายการอื่น ๆ ทั้งหมดเป็น 0

ตัวอย่างเช่นสำหรับกราฟตัวอย่างข้างต้นเมทริกซ์ที่เกี่ยวข้องคือ ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้เราเรียกร้อง: เดิมเป็น 3CNF พอใจและถ้าหากค่าสูงสุดคือ K(2n+1)Y+ikiX+k

พิจารณาการจัดตารางเวลาเพื่อให้ได้ค่าสูงสุด เนื่องจากมีคอลัมน์ในที่มีดังนั้นจึงควรครอบคลุมทั้งหมด สำหรับคอลัมน์ซึ่งมีสองทางเลือกของสมมติว่ากำหนดจัดตารางเวลามันs_iตั้งแต่คอลัมน์จะต้องกำหนดให้โดย consecutiveness ที่เราต้องสูญเสียคอลัมน์เพื่อK_iสิ่งเดียวกันเกิดขึ้นถ้าการตั้งเวลากำหนดคอลัมน์เพื่อ1}(2n+1)hYKi+ki+1YsiKisiKi+1Ki+kiKi+ki+1si+1

ดังนั้นเพื่อให้มีค่าเราต้องเลือกเหลือทั้งหมดที่มีอยู่ในเมทริกซ์ซึ่งสอดคล้องกับการกำหนดตัวแปร ดังนั้นมูลค่าที่เหลือของสามารถทำได้ถ้าหากการมอบหมายตรงตามทุกข้อikiXXk

เป็นข้อสรุปที่จะตัดสินใจค่าสูงสุดของการจัดตารางเวลาตามกฎหมายอยู่ใน{NP-ยาก} นั่นอาจเป็นสาเหตุที่ความพยายามครั้งก่อนทั้งหมดของเราในการค้นหาอัลกอริทึมล้มเหลวNP-hard


แต่ในเมทริกซ์ตัวอย่างถ้าฉันเลือกและฉันยังสามารถไปถึงเป้าหมายได้ ฉันกำลังทำอะไรผิด นอกจากนี้ในควรเป็นหนึ่งคอลัมน์ทางด้านขวาและในควรเป็นหนึ่งคอลัมน์ทางด้านซ้ายx1¯ x2¯x3Xx1¯(1)Xx1¯(2)
rotia

@rotia ใช่และนั่นหมายความว่าด้านซ้ายคุณต้องเลือกจะมี4Xดังนั้นสอดคล้องกับการกำหนดความพึงพอใจที่ 0 x1,x2,x3¯4Xx1=x2=1,x3=0
Willard Zhan

คุณช่วยอธิบายได้ไหมว่า "สมมติว่าใหญ่กว่าหนึ่งในจำนวนที่ปรากฏเป็นตัวอักษรและ " หมายถึง? จำนวนลักษณะของตัวอักษรคืออะไร? มันเกี่ยวกับที่ที่มันปรากฏในส่วนคำสั่ง / สูตรหรือว่ามันปรากฏในสูตรกี่ครั้ง? คือตัวอักษรหรือตัวเลขหรือไม่? kixixi¯ki
DW

@DWเป็นตัวเลข การแสดงออกของฉันไม่ชัดเจนอย่างแน่นอน ฉันแก้ไขมันแล้ว ki
Willard Zhan

@ WillardZhan ใช่ แต่ถ้าฉันเลือกตัวแปรเหล่านั้นฉันจะได้ค่าที่มากกว่าค่าในสูตร ตัวอย่างเช่นฉันตั้งค่าและตามสูตรที่ฉันควรได้รับเพียง 450 คะแนน (สมมติว่าคือจำนวนของคำสั่ง) แต่โดยการเลือกฉันจะได้ 452 คะแนนโดยเลือกสี่ตัวที่อยู่ทางขวาY=60X=7kx1,x2,x3¯
rotia

3

วิธีนี้มีปัญหาและจะถูกลบในไม่ช้า ดูความคิดเห็นของ templatetypedef

คุณสามารถแก้ปัญหานี้ในเวลาพหุนามโดยใช้การไหลขั้นต่ำค่าใช้จ่าย ในต่อไปนี้ขอบทั้งหมดมีความจุหน่วย

  • สร้างจุดสุดยอดแหล่งและจุดสุดยอดเป้าหมายทีเราจะส่งหน่วยของการไหลจากไปทีstkst
  • สร้างจุดยอดเพื่อแทนจุดเวลาระหว่างสล็อตและขอบกำกับสำหรับแต่ละด้วยราคา 0n+1v0,,vnvjvj+10j<n
  • สำหรับแต่ละคนสร้างสิ่งต่อไปนี้: i
    • ย่อยแหล่งยอดและย่อยอ่างจุดสุดยอดt_isiti
    • สำหรับทุกขอบจากถึงมีค่าใช้จ่าย (ซึ่งเราใช้เป็น 0 ถ้า )0j<nsivjΣk=1jh(i,k)j=0
    • ทุก ๆ , ขอบจากเพื่อมีค่าใช้จ่ายk)}1jnvjtiΣk=1jh(i,k)
    • ขอบมีค่าใช้จ่าย 0ssi
    • ขอบมีค่าใช้จ่าย 0tit

การไหลของต้นทุนต่ำสุดในเครือข่ายนี้จะมีต้นทุนรวมเท่ากับผลลบของกำไรที่ดีที่สุด (ค่าใช้จ่ายนี้จะเป็นค่าลบ แต่นั่นไม่ใช่ปัญหา) มีวิธีแก้ปัญหาแบบอินทิกรัลที่ดีที่สุดที่ทุกคนที่มีขอบเดียวปล่อยให้ด้วยการไหลของ 1 และขอบเดียวถึงที่ไหล 1 และ ขอบอื่น ๆ ทั้งหมดที่เกิดขึ้นบนหรือมีการไหล 0 ปล่อยให้ flow-1 edge เหล่านี้สำหรับคนที่เป็นและ : แล้วเนื่องจากเส้นทางเดียวในหมู่ -vertices คือพวกที่เพิ่มตัวห้อย ถ้าisitisitiisivjvktikjvk=jดังนั้นบุคคลที่ถูกจัดสรรไม่มีช่วงเวลา มิฉะนั้นคนที่จะถูกจัดสรรบล็อกของช่องเวลาที่kiij+1,,k

โดยสัญชาตญาณแต่ละคน "รับ" 1 หน่วยการไหลจากและเลือกเวลาเริ่มต้น (ขอบ) และเวลาสิ้นสุด (ขอบ) ขอบเริ่มต้นและสิ้นสุดเป็นเพียงขอบเท่านั้นที่มีค่าใช้จ่ายที่ไม่เป็นศูนย์ในเครือข่ายและเราสามารถแสดงค่าของบล็อกเป็นความแตกต่างของจำนวนเงินนำหน้าสองคำ ความจุของหน่วยบนขอบระหว่าง -vertices ทำหน้าที่ป้องกันไม่ให้ 2 คนจากการใช้ช่วงเวลาเดียวกันsj+1,,kv

ที่น่าสนใจสูตรนี้จะใช้ได้แม้ว่าค่าอาจเป็นลบh(i,j)


3
มันอาจจะล้มเหลวถ้าบางคนที่ใช้เส้นทางจากแหล่งที่มาของพวกเขาไปยังอ่างของคนอื่นและในทางกลับกัน? i
templatetypedef

@templatetypedef: ฉันเชื่อว่าคุณพูดถูก ฉันจะลบคำตอบนี้ในไม่ช้า สิ่งที่เกี่ยวกับการก่อสร้างนี้แทน: เรามีจุดยอดและขอบเหมือนเดิม แต่ตอนนี้เราพยายาม "เธรด" หนึ่งหน่วยการไหลผ่าน "ไลน์" ของผู้คน (เรียงลำดับโดยการเพิ่มค่า ) โดยการลบขอบทั้งหมดยกเว้นและขอบทั้งหมดยกเว้นและการเพิ่มขอบกับค่าใช้จ่ายในเชิงลบมากสำหรับแต่ละ<k s จะบังคับหน่วยเดียวของการไหลของการเข้าชมทั้งหมดของเหล่านี้ "ท่อ" ขอบในการแก้ปัญหาที่เหมาะสมใด ๆ s s ฉัน s s 1 ทีฉันทีทีเคทีทีฉันs ฉัน+ 1 - M 1 ฉัน< k - M k - 1ississ1tittkttisi+1M1i<kMk1
j_random_hacker

@j_random_hacker แล้วคุณกำลังบังคับให้มีการสั่งซื้อคนk
Chao Xu

@ChaoXu: ฉันไม่คิดอย่างนั้น: ในการมอบหมายบล็อกให้ผู้คนการมอบหมายสามารถถูกแสดงในลำดับที่เพิ่มขึ้นโดยบุคคล (โปรดสังเกตว่าไม่มีสิ่งใดที่ห้ามบุคคลที่ได้รับมอบหมายบล็อกที่ลงท้ายด้วยโดยที่คือบล็อกแรกที่กำหนดให้กับบุคคล .) แต่ฉันมีความรู้สึกว่าญาติสนิทของปัญหาที่ส่งผลกระทบต่อฉันคนแรก ความพยายามมีผลกับอันนี้ด้วย ...j < j j ii>ij<jji
j_random_hacker

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