समय स्लॉट के ब्लॉक बेचना


27

Nn समय स्लॉट को देखते हुए कि kk लोग खरीदना चाहते हैं। व्यक्ति ii का मान( मैं , जे ) 0 जेh(i,j)0 जो हर बार स्लॉट । प्रत्येक व्यक्ति केवल समय स्लॉट का एक लगातार ब्लॉक खरीद सकता है, जो खाली हो सकता है।j

वहां एक विक्रेता द्वारा प्राप्त अधिकतम मूल्य की गणना करने के लिए बहुपद-काल एल्गोरिथ्म है?

विवेकहीनता के बिना, हम हर उस व्यक्ति को समय स्लॉट दे सकते हैं जो इसे सबसे अधिक महत्व देता है। साथ ही, यदि हम लोगों के समय स्लॉट्स के क्रम को ठीक करते हैं , तो पहले लोगों के अधिकतम मान को हल करने के लिए डायनेमिक प्रोग्रामिंग का उपयोग किया जा सकता है, जो पहले समय खरीद रहे हैं स्लॉट्स।k 0 मैं k 0 जे nk0ik0jn

जवाबों:


9

क्लॉसेस साथ चर पर एक गया । मान लीजिए कि दोनों और सूत्र में सबसे अधिक दिखाई देते हैंφ 1 , ... , φ कश्मीर एक्स 1 , ... , एक्स एन एक्स मैं ¯ एक्स मैं k मैंϕ1,,ϕkx1,,xnxixi¯¯¯¯¯ki क्रमशः समय हैं।

हम एक रंगीन DAG G डिजाइन करते Gहैं, जिसके शीर्ष में तीन भाग होते हैं:

  • "असाइनमेंट" कोने v मैं ( जे )vi(j) और ˉ v मैं ( जे )v¯i(j) , 1 मैं n1in , 1 जे k मैं1jki । रंग v मैं ( जे )vi(j) "रंग" के साथ x मैं ( जे )xi(j) , और ˉ v मैं ( जे )v¯i(j) के साथ ¯ एक्स मैं ( जे )xi¯¯¯¯¯(j)
  • "क्लाज़" कोने डब्ल्यू मैं ' ( जे ' )wi(j) , 1 मैं 'कश्मीर1ik , जे ' = 1 , 2 , 3j=1,2,3 । रंग डब्ल्यू मैं ' ( जे ' )wi(j) रंग के साथ x मैं ( जे )xi(j) (या ¯ एक्स मैं ( जे )xi¯¯¯¯¯(j) ) अगर ¯ एक्स मैंxi¯¯¯¯¯ (या x मैंxi , resp।) है j 'jमई के खंड का शाब्दिक φ मैं 'ϕi , और यह है jj -वें इस शाब्दिक युक्त खंड।
  • "कट" वर्टीकल s = s 0 , s 1 , ... , s n , s n + 1 , ... s n + k = ts=s0,s1,,sn,sn+1,sn+k=t । ऊपर से अलग-अलग रंगों के साथ उन्हें रंग दें।

किनारों में शामिल हैं:

  • s i - 1 v i ( 1 ) , v i ( j ) v i ( j + 1 ) , v i ( k i ) s i ;si1vi(1)vi(j)vi(j+1)vi(ki)si
  • एस मैं - 1 ˉ v मैं ( 1 ) , ˉ v मैं ( जे ) ˉ v मैं ( j + 1 ) , ˉ v मैं ( k मैं ) रों मैंsi1v¯i(1)v¯i(j)v¯i(j+1)v¯i(ki)si ;
  • और एस एन + मैं ' - 1 डब्ल्यू मैं ' ( जे ' ) , डब्ल्यू मैं ' ( जे ' ) रों n + मैं 'sn+i1wi(j)wi(j)sn+i

उदाहरण के लिए, 3CNF से ( एक्स 1एक्स 2¯ एक्स 3 ) ( एक्स 1¯ एक्स 2एक्स 3 ) निम्नलिखित ग्राफ निर्माण किया है (धार दिशाओं बाएं से दाएं कर रहे हैं)। (x1x2x3¯¯¯¯¯)(x1x2¯¯¯¯¯x3)enter image description here

अब यह देखना मुश्किल नहीं है कि मूल 3CNF संतोषजनक है अगर और केवल अगर G में विभिन्न शीर्ष रंगों के साथ एक s - t पथ है ।stG

(वैसे, यह एक उप-उत्पाद है जो रंगीन DAG में अलग-अलग शीर्ष रंगों के साथ s - t पथ की मौजूदगी है। NP- हार्डstNP-hard । मुझे कम्प्यूटेशनल परिप्रेक्ष्य में इस समस्या के बारे में कई साहित्य नहीं मिले। यदि आप जानते हैं, तो कृपया टिप्पणी!)

तो जी और ओपी की समस्या के बीच क्या संबंध है? अंतःक्रियात्मक रूप से हम जो करने जा रहे हैं वह मैट्रिक्स एच को डिजाइन करना है , ताकि प्रत्येक रंग को एक पंक्ति में (जो एक व्यक्ति है) मैप किया जाए, और किनारों को लगातार कॉलम (समय स्लॉट) में मैप किया जाए। इसलिए अधिकतम शेड्यूलिंग, जो मूल रूप से मैट्रिक्स में बाएं से दाएं जा रहा है, एस - टी पथ से मेल खाती है ।Ghst

हमारे मैट्रिक्स है 2 n + 1 + Σ मैं 2 कश्मीर मैं + कश्मीर सूचकांक से शुरू के साथ, कॉलम 0 । निम्नलिखित constrcution में एक्स एक वाई दो मानों को संतुष्ट कर रहे हैं 1 « एक्स « वाई । अनुपात X / 1 , Y / X k और n की बड़ी शक्तियां हो सकती हैं । चलो कश्मीर मैं = 2 मैं + 2 Σ मैं jh2n+1+i2ki+k0XY1XYX/1,Y/Xkn= 1 kiKi=2i+2ij=1ki

  • प्रत्येक s i के लिए , 0 i s n , let h ( s i , K i ) = h ( s i , K i - k i - 1 ) = h ( s i , K i + k i + 1 + 1 ) = वाई (यदि समन्वय मौजूद है, उसी के नीचे)।si0inh(si,Ki)=h(si,Kiki1)=h(si,Ki+ki+1+1)=Y
  • प्रत्येक x i ( j ) के लिए , h ( x i ( j ) , K i - 1 + j ) = X ; प्रत्येक के लिए ¯ एक्स मैं ( जे ) , चलो ( ¯ एक्स मैं ( जे ) , कश्मीर मैं - 1 + k मैं + 1 + j ) = एक्सxi(j)h(xi(j),Ki1+j)=Xxi¯¯¯¯¯(j)h(xi¯¯¯¯¯(j),Ki1+ki+1+j)=X
  • प्रत्येक φ मैं ' , 1 मैं 'कश्मीर और एक शाब्दिक एक्स खंड में φ मैं ' , चलो ( एक्स , कश्मीर n + मैं ' ) = 1ϕi1ikxϕih(x,Kn+i)=1
  • अन्य सभी प्रविष्टियाँ 0 हैं।

उदाहरण के लिए, उपरोक्त उदाहरण ग्राफ के लिए संबंधित मैट्रिक्स है enter image description here

अब हम दावा करते हैं: मूल 3CNF संतुष्टि योग्य है यदि और केवल यदि अधिकतम मूल्य है ( 2 n + 1 ) वाई + Σ मैं k मैं एक्स + कश्मीर(2n+1)Y+ikiX+k

अधिकतम मूल्य प्राप्त करने वाले शेड्यूलिंग पर विचार करें। चूँकि H युक्त Y में ठीक ( 2 n + 1 ) कॉलम हैं , उन्हें सभी को कवर किया जाना चाहिए। स्तंभ के लिए कश्मीर मैं + k मैं + 1 जिनमें से दो विकल्प है Y , करने के लिए समय-निर्धारण प्रदान करती है यह लगता है रों मैं । चूंकि स्तंभ कश्मीर मैं को सौंपा जाना चाहिए रों मैं , consecutiveness द्वारा हम कॉलम खोने के लिए है कश्मीर मैं + 1 को कश्मीर मैं + कश्मीर(2n+1)hYKi+ki+1YsiKisiKi+1 मैंKi+ki । अगर शेड्यूलिंग के i + k i + 1 से s i + 1 को असाइन करती है तो भी वही चीजें होती हैं ।Ki+ki+1si+1

इसलिए, मूल्य के लिए में Σ मैं k मैं एक्स , हम सब आराम उपलब्ध का चयन करना होगा एक्स 'मैट्रिक्स में है, जो मेल खाती है चर पर एक काम करने के लिए। तो कश्मीर का बाकी मूल्य प्राप्त करने योग्य है अगर और केवल अगर असाइनमेंट प्रत्येक खंड को संतुष्ट करता है।ikiXXk

निष्कर्ष के रूप में, कानूनी निर्धारण का अधिकतम मूल्य तय करना एनपी-हार्ड में है । हो सकता है कि एल्गोरिथम खोजने के हमारे पिछले सभी प्रयास विफल रहे हों।NP-hard


But, in the example matrix, if i pick ¯x1x1¯¯¯¯¯ ¯x2x2¯¯¯¯¯ and x3x3 i still can get to the objective. What i´m doing wrong? Also the XX in ¯x1(1)x1¯¯¯¯¯(1) should be one column to the right and the XX in ¯x1(2)x1¯¯¯¯¯(2) should be one column to the left
rotia

@rotia Yes, and that means on the left you must pick x1,x2,¯x3x1,x2,x3¯¯¯¯¯ to have 4X4X. So that corresponds to a satisfying assignment x1=x2=1,x3=0x1=x2=1,x3=0.
Willard Zhan

Can you clarify what "Suppose kiki larger one in the two numbers of appearances of literals xixi and ¯xixi¯¯¯¯¯." means? What is the number of appearance of a literal? Is that something about where it appears in the clauses/formula, or is it how many times it appears in the formula? Is kiki a literal or a number?
D.W.

@D.W. kiki is a number. My expression was indeed quite not clear; I've edited it.
Willard Zhan

@WillardZhan Yes. But if i pick those variables i can get to a value that is bigger than the one in the formula. For instance, i set Y=60Y=60 and X=7X=7, according to the formula i should get only to 450 points (assuming kk is the number of clauses). But, by choosing x1,x2,¯x3x1,x2,x3¯¯¯¯¯ i can get to 452 points by picking the four ones at the right
rotia

3

This solution has problems and will be deleted soon; see templatetypedef's comment.

You can solve this in polynomial time using minimum-cost flow. In the following, all edges have unit capacity.

  • Create a source vertex ss, and a target vertex tt. We will send kk units of flow from ss to t.
  • Create n+1 vertices v0,,vn to represent the time points between slots, and a directed edge vjvj+1 for each 0j<n with cost 0.
  • For each person i, create the following:
    • A sub-source vertex si and a sub-sink vertex ti.
    • For every 0j<n, an edge from si to vj having cost Σjk=1h(i,k) (which we take to be 0 if j=0).
    • For every 1jn, an edge from vj to ti having cost Σjk=1h(i,k).
    • An edge ssi with cost 0.
    • An edge tit with cost 0.

A minimum-cost flow in this network will have total cost equal to the negative of the best possible profit. (This cost will be negative, but that's not a problem.) There is an optimal integral solution in which every person i has a single edge leaving si with a flow of 1 and a single edge arriving at ti with a flow of 1, and all other edges incident on either si or ti have 0 flow. Let these flow-1 edges for person i be sivj and vkti: then kj, since the only paths among v-vertices are those that increase the subscript. If k=j, then person i is allocated no time slots; otherwise, person i is allocated the block of time slots j+1,,k.

Intuitively, each person "gets" 1 unit of flow from s and chooses a start time (edge) and end time (edge); these start and end edges are the only edges with nonzero cost in the network, and we can represent the value of a block j+1,,k as the difference of two prefix sums. The unit capacities on the edges between the v-vertices act to prevent 2 people from using the same time slot.

Interestingly, this formulation will work even if the values h(i,j) may be negative.


3
Might this fail if some person i takes a route from their source to another person's sink and vice-versa?
templatetypedef

@templatetypedef: I believe you're right; I'll delete this answer shortly. What about this construction instead: We have the same vertices and edges as before, but now we try to "thread" a single unit of flow through a "pipeline" of people (ordered by increasing i value) by deleting all edges ssi except for ss1 and all edges tit except for tkt, and adding an edge tisi+1 with huge negative cost M for each 1i<k. The Ms will force the single unit of flow to visit all k1 of these "pipeline" edges in any optimal solution.
j_random_hacker

@j_random_hacker then you are forcing an ordering of the k people.
Chao Xu

@ChaoXu: I don't think so: in any assignment of blocks to people, the assignment can be listed in increasing order by person. (Notice that nothing forbids a person i>i being assigned a block ending at j<j, where j is the first block assigned to person i.) But I have a feeling that a close relative of the problem that affected my first attempt also affects this one...
j_random_hacker

@j_random_hacker The cost of sivj would require that si to be the ith person in the optimal solution.
Chao Xu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.