छोटे और मोटे रास्ते खोजना


10

प्रेरणा: मानक संवर्धित पथ अधिकतमप्रवाह एल्गोरिदम में, आंतरिक लूप को एक निर्देशित, भारित ग्राफ़ में सिंक करने के लिए स्रोत से मार्ग खोजने की आवश्यकता होती है। सैद्धांतिक रूप से, यह सर्वविदित है कि एल्गोरिथ्म के क्रम में समाप् त करने के लिए भी जब अपरिमेय धार क्षमता होती है, हमें उन रास्तों पर प्रतिबंध लगाने की आवश्यकता होती है जो हम पाते हैं। उदाहरण के लिए, एडमंड्स-कार्प एल्गोरिथ्म, हमें सबसे छोटा रास्ता खोजने के लिए कहता है ।

जाहिर है, यह देखा गया है कि हम वसा भी ढूंढना चाहते हैं (क्या इसके लिए बेहतर शब्द है?) रास्ते। उदाहरण के लिए, क्षमता स्केलिंग का उपयोग करते समय , हमें सबसे छोटे रास्ते मिलते हैं जो प्रवाह के कम से कम राशि को सहन कर सकते हैं । रास्ता कितना लंबा हो सकता है, इस पर कोई प्रतिबंध नहीं है। जब हमें कोई रास्ता नहीं मिलता है, तो हम कम करते हैं और दोहराते हैं।ϵϵ

मैं अधिकतम-प्रवाह के एक बहुत विशिष्ट अनुप्रयोग के लिए पथ बढ़ाने के विकल्प को अनुकूलित करने में दिलचस्पी रखता हूं, और मैं इस व्यापार को छोटे और मोटे रास्तों के बीच तलाशना चाहता हूं। (नोट: मेरे लिए यह हमेशा समस्या का समाधान करने के लिए आवश्यक नहीं है। मुझे सबसे अधिक दिलचस्पी दीवार के समय की सबसे कम मात्रा में प्रवाह पर बाध्य करने में है।)

प्रश्न: क्या सबसे छोटा रास्ता दृष्टिकोण और क्षमता-स्केलिंग दृष्टिकोण के बीच अंतर करने का एक मानक तरीका है? यही है, क्या छोटे और मोटे दोनों रास्तों को खोजने के लिए एक एल्गोरिथ्म है, जहां आदर्श रूप से कुछ पैरामीटर को नियंत्रित करेगा कि हम जिस रास्ते में कितनी दूरी पर मोटापे के लिए व्यापार करने को तैयार हैं, उसकी लंबाई कितनी है? चरम सीमा पर, मैं एक छोर पर कम से कम पथ और दूसरे पर क्षमता स्केलिंग-शैली पथ को पुनर्प्राप्त करने में सक्षम होना चाहूंगा।


3
ध्यान दें कि यदि आप एक ही समय में लघुता और मोटापा दोनों को अनुकूलित करने का प्रयास करते हैं, तो आप मल्टीक्रिटिया ऑप्टिमिज़ेशन के स्थानों में प्रवेश करते हैं जिसका अर्थ है ज्यादातर मामलों में एनपी-कठोरता।
राफेल

@dan x: मैं अधिकतम प्रवाह के लिए क्षमता स्केलिंग एल्गोरिदम से अवगत हूं, लेकिन आपके द्वारा वर्णित विशिष्ट के लिए नहीं। क्या आपके पास एक संदर्भ (कॉन्फ्रेंस पेपर, जर्नल आर्टिकल, स्क्रिब्ड लेक्चर (एस), आदि) है जो आपके क्षमता विस्तार के संस्करण का वर्णन करता है? मैं उत्सुक हूँ अगर वहाँ एक ज्ञात "सबसे अच्छा तरीका है" को इनिशियलाइज़ और डिक्रिप्ट करने के लिए (इस पर निर्भर करता है कि यह कितनी अच्छी तरह से परिभाषित है, यह बहुत स्वाभाविक रूप से "पैरामीटराइज़्ड" एल्गोरिथ्म को जन्म दे सकता है जैसे आप खोज रहे हैं)। ϵ
डैनियल एपोन

@ डैनियल एपोन - इन स्लाइड्स के पेज 31 पर क्षमता स्केलिंग के लिए स्यूडोकोड है: cs.princeton.edu/~wayne/kleinberg.../07maxflow.pdf
dan_nax

@ राफेल - ध्यान दें कि मैं एक ऐसे उद्देश्य की तलाश कर रहा हूं जो उदाहरण के लिए लंबाई और मोटापे का रैखिक संयोजन हो सकता है। क्या यह अभी भी एक मल्टीक्रिटिया अनुकूलन माना जाता है?
dan_x

इसके अलावा, मैं एक "बहुत अच्छा" रास्ता लेने के लिए तैयार हूँ, भले ही यह इष्टतम न हो। क्षमता स्केलिंग में, उदाहरण के लिए, हम कोई भी रास्ता निकालते हैं जो कम से कम वसा के रूप में रूप में होता है । मुझे कुछ एनालॉग के साथ खुशी होगी जो लघुता और मोटापा दोनों को ध्यान में रखते हैं। ϵ
dan_x

जवाबों:


2

"बहुत अच्छा है, लेकिन जरूरी नहीं कि इष्टतम" के बारे में आपकी टिप्पणी की भावना में, मैं निम्नलिखित विचार प्रस्तुत करता हूं कि इष्टतमता की कोई गारंटी नहीं है!

पूर्णता के लिए, यहाँ वह छद्मकोड है जिसे आपने संदर्भित किया है (टिप्पणी: एल्गोरिथ्म जुड़ा हुआ मान लेता है कि धारिता 1 और C के बीच पूर्णांक है और प्रवाह और अवशिष्ट क्षमता मान अभिन्न हैं):

स्केलिंग-मैक्स-फ्लो (जी, एस, टी, सी) {
   foreach ई each ई एफ (ई) ∈ 0
   Δ। C से 2 या उससे अधिक की सबसे छोटी शक्ति
   G_f _ अवशिष्ट ग्राफ

   जबकि (Δ (1) {
      G_f (_) ← Δ-अवशिष्ट ग्राफ
      जबकि (G_f ({) में वृद्धि पथ P मौजूद है) {
         एफ f वृद्धि (एफ, सी, पी)
         अपडेट G_f (Δ)
      }
      Δ Δ Δ / 2
   }
   वापसी च
}

ध्यान रखें कि जब = 1 ( psuedocode में), तो आप बस सबसे छोटे से सबसे लंबे समय तक क्रम में पथ ढूंढ रहे हैं, और जब बड़ा होता है, तो आप (अधिक या कम) fattest में पथ ढूंढ रहे हैं सबसे पतला क्रम। वास्तव में, उदाहरण के आधार पर, क्षमता-स्केलिंग एल्गोरिथ्म "पर्याप्त प्रवाह" के "बाल्टियों" के भीतर सबसे छोटे से सबसे लंबे क्रम में पथ ढूंढता है।ε = Δ εϵϵ=Δϵ

फिर, एक और इनपुट पैरामीटर जोड़ें जो दर्शाता है कि आप "मोटापा" बनाम "लघुता" के बारे में कितना ध्यान रखते हैं। यह सुनिश्चित करने के लिए कि हम बड़े पैमाने पर रनटाइम को प्रभावित नहीं कर रहे हैं, हमें आगे की आवश्यकता है कि एक परिमेय संख्या है।ρ0ρ1ρ

फिर, प्रत्येक बार को एक मान दिया जाता है, हम 1 और इसके वर्तमान मान के बीच में भारित अंकगणित माध्य (मुझे आशा है कि यह सही शब्द है ..) लेते हैं । अर्थात्,ρϵρ

ϵ(ρ)ϵ+(1ρ)

के लिए , हम एक शुद्ध कम से कम पथ एल्गोरिथ्म के साथ समाप्त; for , हमें एक शुद्ध fattest पाथ अल्गोरिथम मिलता है; और हमें बीच में कुछ मिलता है। विशेष रूप से, कुछ मध्य मूल्य के लिए, , और अधिक तेज़ी से करेगा , इसलिए आपको अधिक छोटे पथ, और कम फ़ाटेस्ट पथ मिलेंगे।ρ = 1 0 < ρ < 1 ε 1ρ=0ρ=10<ρ<1ϵ1


इस विचार के लिए धन्यवाद - यह मेरे मन में जो कुछ था उसके करीब हो रहा है। मेरी एक चिंता यह है कि यह क्षमता स्केलिंग के लिए सिर्फ एक अलग "क्षय अनुसूची" है, है ना?
dan_x

जैसे-जैसे आप अधिक आक्रामक रूप से क्षय करते हैं, आपको छोटे मार्ग मिलते हैं, और जैसे-जैसे आप कम आक्रामक रूप से क्षय करते हैं, वैसे-वैसे आपको भटके हुए मार्ग मिलते जाते हैं। मेरे मन में यह था कि प्रत्येक पथ को कितना वसा था और यह कितना छोटा था, इसके आधार पर एक अंक प्राप्त होगा, फिर एल्गोरिथ्म सभी पथों को कुछ सीमा से अधिक स्कोर के साथ मिलेगा।
dan_x

लेकिन अगर ऐसा करने का कोई मानक तरीका नहीं है, तो मैं बैठ सकता हूं और एक एल्गोरिथ्म प्राप्त करने में कुछ सोच रख सकता हूं जो मुझे चाहिए।
dan_x
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.