2016-07-18 11 views
9

मैं इस समस्या को पूरा करता हूं जो बहुत दिलचस्प लगता है। कुछ फिल्मों है कि हम उन सभी को देखना चाहते हैं लेकिन वे केवल निम्नलिखित समय पर दिखाने:सभी फिल्में देखें एल्गोरिदम

movieA : 15 
movieB : 14, 15, 17 
movieC : 15, 17 
movieD : 15, 20 

हम एक 15 में 14 में सी 17 और डी 20 में देख सकते हैं, बी,, तो यह है उन सभी को देखने के लिए संभव है। ध्यान दें कि आप 15 पर सी नहीं देख सकते हैं, व्यवहार्य नहीं।

जैसा आपने अनुमान लगाया है, यह है कि हम उन्हें सभी देख सकते हैं या नहीं।

स्पष्ट रूप से हम इसे सभी संभावनाओं का प्रयास करके बैकट्रैकिंग के साथ हल कर सकते हैं। क्या ऐसा करने का कोई बेहतर तरीका है? मेरे पास पहले से कम से कम उपलब्ध समय के साथ फिल्मों के साथ शुरू करने का विचार है, इस तरह समाधान होने पर हम समाधान को तेजी से पा सकते हैं, सबसे खराब केस टाइम जटिलता अभी भी वही है।

क्या इस समस्या के लिए वहां कोई बेहतर एल्गोरिदम है?

पीएस जैसा कि @gen ने पूछा, मैं यह इंगित करना भूल गया कि प्रत्येक फिल्म 1 घंटा है, इसलिए यदि आप 14:00 बजे एक देखते हैं, तो आप 15:00 बजे किसी को याद नहीं करेंगे। पूछने के लिए धन्यवाद।

+1

फिल्म कितनी देर तक है? – gen

+0

@gen प्रत्येक मूवी एक घंटा है, इसलिए यदि आप 14:00 बजे मूवी देखते हैं तो आपको चिंता करने की आवश्यकता नहीं है, तो आप 15:00 बजे एक को याद कर सकते हैं। महान सवाल! – Arch1tect

+0

एक द्विपक्षीय ग्राफ पर अधिकतम मिलान समस्या की तरह दिखता है। –

उत्तर

7

फिल्मों की संख्या और प्रत्येक फिल्म के लिए संभावित अलग-अलग समय की संख्या पर सीमाओं के आधार पर, आप एक तरफ फिल्मों के साथ एक द्विपक्षीय ग्राफ बना सकते हैं और दूसरी तरफ के समय और दूसरे प्रवाह के समय निर्धारित करने के लिए अधिकतम प्रवाह एल्गोरिदम चला सकते हैं अधिकतम मिलान यदि फिल्म i को j पर देखा जा सकता है, तो ग्राफ़ में संबंधित नोड्स के बीच एक किनारे जोड़ें।

+0

मुझे यह अपमान पसंद है, लेकिन फिर भी - अधिकतम प्रवाह एल्गोरिदम में बड़ी जटिलता है। – xenteros

+0

@xenteros "विशाल जटिलता" से आपका क्या मतलब है? यदि आप होपक्रॉफ्ट-कार्प का उपयोग करते हैं तो आपको सबसे खराब केस 'ओ (एम * एसकर्ट (एन)) मिल सकता है, जहां' एम 'किनारों की संख्या है और 'एन' नोड्स की संख्या है (इस मामले में, फिल्मों की संख्या + विभिन्न समय की संख्या); यह हजारों फिल्मों + बार के लिए एक सेकंड के तहत चला जाएगा। इसके अलावा, कई प्रवाह एल्गोरिदम नेटवर्क की संरचना से काफी प्रभावित होते हैं और कई मामलों में बहुत तेज़ी से चल सकते हैं। अंत में, ओपी ने बैकट्रैकिंग से बेहतर कुछ मांगे। – ale64bit

+0

मैं अधिकतम प्रवाह एल्गोरिदम से बहुत परिचित नहीं हूं, इसलिए मुझे जवाब देने से पहले मुझे इसे सीखने के लिए थोड़ा और समय बिताना होगा ..लेकिन यह जानना बहुत अच्छा है कि बेहतर जटिलता के साथ इस एल्गोरिदम मौजूद है। धन्यवाद! – Arch1tect

0
WHILE list of movie times isn't empty 
    1. Sort movie showtime list in order of the number of showtimes. 
    2. Watch next movie according to this sort at the first available time. 
    3. Remove respective time from each movie showtime list and movie 
     from the movie list. 

अजगर प्रयास:

A=[15,'A'] 
B=[14,15,17,'B'] 
C=[15,17,'C'] 
D=[15,20,'D'] 

movies=[A,B,C,D] 


watchOrder = [] 

def f(x): 
    while x: # while x isnt empty 
     x=sorted(x, key=len) 
     watchOrder.append(x[0]) 
     r = x[0][0] 
     x.remove(x[0]) 
     for l in x: 
      if r in l: 
       l.remove(r) 
f(movies) 
print(watchOrder) 
+1

दुर्भाग्य से यह एक समाधान खोजने में असफल हो सकता है भले ही कोई मौजूद है। एक counterexample के लिए, मैं यहाँ समकक्ष समस्या के लिए एक बहुत ही समान समाधान के लिए counterexample देखें: http://stackoverflow.com/a/37864372/47984 –

1

एक द्विपक्षीय ग्राफ पर एक अधिकतम मिलान समस्या की तरह लग रहा। ग्राफ के शिखर दो स्वतंत्र सेट 'दिन के घंटे' और 'फिल्म शीर्षक' हैं। ग्राफ के किनारे किसी विशेष समय के किसी विशेष फिल्म के प्रदर्शन होते हैं।

स्टीवन स्कीएना के एल्गोरिदम डिजाइन मैनुअल के अनुसार, सबसे अच्छा ज्ञात एल्गोरिदम हॉपक्रॉफ्ट-कार्प एल्गोरिदम है जो ओ (ई * एसकर्ट (वी)) में चलता है। ई किनारों की संख्या है, यानी। शो की संख्या। वी शिखर की संख्या है, यानी। फिल्मों की संख्या और अलग-अलग घंटों की संख्या जिसके दौरान फिल्मों को दिखाया जाता है। अपने उदाहरण में, ई = 8 के प्रदर्शनों, वी = 4 फिल्मों 4 अलग बार = 8.

https://en.wikipedia.org/wiki/Hopcroft%E2%80%93Karp_algorithm

नोट मिलान निर्माण तभी संभव है, क्योंकि आपके फिल्मों सभी घंटे से शुरू होकर वास्तव में एक घंटे तक। वे या तो बिल्कुल मेल खाते हैं, या बिल्कुल ओवरलैप नहीं करते हैं।

संबंधित मुद्दे