एक क्रमपरिवर्तन को लागू करने की जटिलता


27

मेरे आश्चर्य के लिए, मैं इस बारे में कागजात नहीं पा रहा था - शायद गलत कीवर्ड खोजे।

तो, हमें कुछ भी मिला है, और इसके सूचकांकों पर एक फ़ंक्शन ; f एक क्रमचय है।ff

हम ( 1 ) और ( एन ) के करीब के रूप में स्मृति और रनटाइम के साथ अनुसार सरणी को कैसे पुन: व्यवस्थित करते हैं?fO(1)O(n)

क्या यह कार्य आसान होने पर कोई अतिरिक्त शर्तें हैं? उदाहरण के लिए, जब हम स्पष्ट रूप से जानते हैं कि एक फ़ंक्शन , f का विलोम है ?gf

मुझे एक एल्गोरिथ्म का पता है जो प्रत्येक सूचकांक के लिए चक्र का अनुसरण करता है और यह जांचता है कि क्या यह उसके चक्र में सबसे कम है, लेकिन फिर से, इसमें सबसे खराब स्थिति रन समय है, हालांकि औसतन यह बेहतर व्यवहार करता है। ..O(n2)


एक आसान अवलोकन: यदि न केवल मदों की सरणी, बल्कि फ़ंक्शन f युक्त सरणी भी लिखने योग्य है, तो O (n) समय में O (1) पूर्णांक रजिस्टरों (लंबाई O में से प्रत्येक का उपयोग करके) कार्य करना आसान है लॉग एन) बिट्स) और प्रत्येक चक्र के बाद केवल एक आइटम के लिए अतिरिक्त स्थान। लेकिन यह काम नहीं करता है यदि फ़ंक्शन एफ को केवल-पढ़ने के लिए भंडारण पर दिया जाता है (या एफ केवल एक ओरेकल के रूप में दिया जाता है), जो मुझे लगता है कि इस प्रश्न में एक धारणा है।
त्सुयोशी इटो

23
फिच एट अल। 1995 : समय, O ( लॉग एन ) स्थान। इसमें कुछ विशेष मामलों की भी चर्चा है। O(nlogn)O(logn)
जुका सूमेला

हां, मैं मान रहा हूं कि हम एक ओरेकल के रूप में एफ हैं।
जकफ

3
@JukkaSuomela, आपको इसे एक उत्तर में बनाना चाहिए। इसके अलावा, यह देखते हुए कि एक मनमाना क्रमपरिवर्तन है, एक साधारण एन्ट्रापी तर्क ( एन लॉग एन ) स्पेस और / या समय देता है, इसलिए मुझे आश्चर्य होगा कि आप समय और स्थान में ( एन लॉग एन ) से बेहतर कर सकते हैं । fO(nlogn)O(nlogn)
user834

जवाबों:


4

O(nlogn)O(log2n)

विकल्प 1: एक रसीद डेटा संरचना में अपने क्रमपरिवर्तन को धोखा देकर, मुनरो http://www.itu.dk/people/ssrao/icalp03-a.pdf देखें

विकल्प 2: एक मुख्य चक्र अपघटन का प्रयोग करें ताकि परमिट को आसानी से स्टोर किया जा सके और http://oeis.org/A186202 को धोखा देने के लिए उस अतिरिक्त स्थान का उपयोग किया जा सके।

O(n2)O(#cycleslogn)

O(n2distinct_cycle_lengths)O((#cycles_with_same_size)logn)

i=1..np(i)iO(n2)O(logn)


nlogn

# 5 लॉग (n) कारक द्वारा # 0 से कम स्थान का उपयोग करता है।
चाड ब्रूबैकर

1

यदि आप क्रमचय के चक्र प्रतिनिधित्व का उपयोग करते हैं, तो आपको वर्तमान में अनुमत आइटम को संग्रहीत करने के लिए 1 अतिरिक्त सरणी तत्व की आवश्यकता है और आप चक्रों के माध्यम से बदतर ओ (एन) संचालन में चला सकते हैं।


2
jkff ने पहले ही कहा कि वह चक्र-निम्नलिखित एल्गोरिथ्म को जानता है, इसलिए वह स्पष्ट रूप से चाहता है कि परमिशन को एक ब्लैक बॉक्स के रूप में माना जाए। जैसा कि वह सवाल में बताते हैं, चक्र के प्रतिनिधित्व के लिए (लगभग) ब्लैक बॉक्स से परिवर्तित करने में O (n ^ 2) समय लग सकता है।
जोशुआ ग्रोचो जूल 25'13

ब्लैक बॉक्स p (i) ठीक है। आप बस चक्र के चारों ओर जाते हैं जब तक आप वापस नहीं मिल जाते। समस्या कोलोमोगोरोव जटिलता में से एक है उन वस्तुओं की सूची संग्रहीत करने के लिए जिन्हें अपडेट किया गया है ताकि आप उन्हें कई बार चक्र न दें। मुनरो की उस पर सीमा है। itu.dk/people/ssrao/icalp03-a.pdf
चाड

-2

एन आइटम के किसी भी क्रमचय को एन -1 या कम एक्सचेंजों का उपयोग करके किसी भी अन्य क्रमचय में परिवर्तित किया जा सकता है। इस विधि के लिए सबसे खराब स्थिति में ओ (एन ^ 2) कॉल की आवश्यकता हो सकती है। कम से कम स्थिति से शुरू करें। मान लीजिए कि हम वर्तमान में स्वैप कर रहे हैं।

यदि F (x)> = x है तो स्वैप पदों x और F (x)। इसके अलावा, हमें यह पता लगाना चाहिए कि वह आइटम जो स्थिति F (x) में था, वर्तमान में सूची में है। हम निम्नलिखित पुनरावृत्ति के साथ ऐसा कर सकते हैं। आज्ञा देना y = F (x)। जब तक y> = x: y = F (y): अंत मत करो अब एक्स और वाई पदों का आदान-प्रदान करें।


3
O(n2)

माफ़ कीजिये। मैं इस समूह में नया हूं। मुझे इसकी सरलता के कारण यह विधि पसंद है। मैं कभी-कभी दक्षता से अधिक सरलता पाता हूं। मुझे एक और तरीका पता है जिसके लिए O (n) चरणों की आवश्यकता है, लेकिन O (nlogn) स्थान।
रसेल ईस्टर

1
रसेल, यहां तक ​​कि ओ (एन लॉग एन) अंतरिक्ष को आवंटित करना और शून्य करना पहले से ही ओ (एन लॉग एन) है, क्या आपका मतलब दूसरी दिशा में था?
jkff

आपके पास वास्तव में आवंटित और शून्य स्थान नहीं है। मूल विचार तब होता है जब F (x)> x को यह याद रखने की आवश्यकता होती है कि हमने आइटम को स्थिति x पर कहाँ रखा है। वास्तव में बड़े एन के लिए, मैं एक डेटाबेस का उपयोग करता हूं और बस एक रिकॉर्ड रखता हूं कि आइटम एक्स कहां स्थानांतरित हो जाता है। जब x अपने अंतिम स्थान पर जाता है, तो रिकॉर्ड हटाया जा सकता है।
रसेल ईस्टर

1
लेकिन फिर आप यह क्यों कह रहे हैं कि इसके लिए O (n log n) स्पेस की आवश्यकता है?
jkff

-2

यह विधि एफ के व्युत्क्रम का उपयोग करती है और इसके लिए n बिट्स स्टोरेज की आवश्यकता होती है। यदि x मूल सरणी में किसी आइटम की स्थिति है, तो G (x) सॉर्ट किए गए सरणी में आइटम की स्थिति है। चलो बी एक एन बिट सरणी है। B के सभी n बिट्स को 0 पर सेट करें।

X = 1 से n-1 के लिए: IF B (x) == 0 THEN: y = G (x): DO UNTIL x == y: स्वैप की स्थिति x और y: B (y) = 1: y = G ( y): LOOP: ENDIF: NEXT X

यह विधि वर्तमान में आइटम को स्थिति x से आइटम की अंतिम स्थिति तक स्वैप करती रहती है। आंतरिक लूप तब समाप्त होता है जब सही आइटम स्थिति x में स्वैप हो जाता है। चूंकि प्रत्येक स्वैप कम से कम एक आइटम को आइटम की अंतिम स्थिति में ले जाता है, इसलिए इनर डू लूप रन के दौरान n-1 से अधिक बार बहाना नहीं कर सकता है। मुझे लगता है कि यह विधि O (n) समय और स्थान है।


2
क्या आपने कागज को देखा है? आपके द्वारा यहां सूचीबद्ध दो एल्गोरिदम दो "स्पष्ट" हैं। पेपर में अलग-अलग टाइम-स्पेस ट्रेडऑफ़ के साथ कम स्पष्ट हैं, विशेष रूप से बहुत कम जगह में।
युवल फिल्मस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.