एक सरणी दूसरे का सॉर्ट किया गया संस्करण है या नहीं यह जांचने के लिए नियतात्मक रैखिक समय एल्गोरिथ्म


19

निम्नलिखित समस्या पर विचार करें:

इनपुट: दो सरणियों A और B लंबाई के n , जहां B क्रमबद्ध क्रम में है।

प्रश्न: क्या A और B में समान आइटम हैं (उनकी बहुलता के साथ)?

इस समस्या के लिए सबसे तेज़ नियतात्मक एल्गोरिथम क्या है ?
क्या उन्हें हल करने की तुलना में तेजी से हल किया जा सकता है? क्या इस समस्या को निर्धारक रैखिक समय में हल किया जा सकता है?


1
एफडब्ल्यूआईडब्ल्यू संभाव्य दृष्टिकोण एक आदेश-स्वतंत्र हैश फ़ंक्शन के साथ हैशिंग है। कार्टर और वेगमैन ने इस पर ( मूलअनुदेशीय / science/article/pii/0022000081900337 ) मूल लेखों में से एक लिखा था , लेकिन मैंने उस पत्र के उद्धरणों में कुछ भी नहीं देखा है जो एक निर्धारक एल्गोरिदम (अब तक) का सुझाव देता है।
KWillets

1
आपके द्वारा उद्धृत कथन ट्यूरिंग मशीन मॉडल के बारे में है, जो केवल सैद्धांतिक हित के लिए है। एल्गोरिदम का आमतौर पर रैम मॉडल के संबंध में विश्लेषण किया जाता है।
युवल फिल्मस

आह, तो यह वह मॉडल है जिसकी मुझे तलाश है। मैंने प्रश्न समायोजित किया।
अल्बर्ट हेंड्रिक्स

आप सरणी में केवल आइटम क्यों नहीं जोड़ते हैं और फिर सारांश की तुलना करते हैं? अपने शीर्षक के बारे में, यह रेखीय है और इस सवाल का जवाब देता है 'एक सरणी दूसरे के क्रमबद्ध संस्करण है? '। मुझे पता है कि यह ट्यूरिंग मशीन मॉडल नहीं है, बल्कि एक व्यावहारिक समाधान है।
एनायनेल

1
@AlbertHendriks आप (शायद सबसे अधिक ) एक ट्यूरिंग मशीन पर में एक सरणी को सॉर्ट नहीं कर सकते । SAT (उदाहरण के लिए cs.cmu.edu/~ryanw/automated-lbs.pdf ) पर कुछ निचली सीमाएं वास्तव में RAM मशीन के लिए हैं, मेरे भ्रामक पहले की टिप्पणी के लिए क्षमा करें। O(nlogn)
युवल फिल्मस

जवाबों:


14

आपने अपने गणना मॉडल को निर्दिष्ट नहीं किया है, इसलिए मैं तुलना मॉडल मानूंगा।

विशेष मामला है, जिसमें सरणी पर विचार करें सूची से लिया जाता है { 1 , 2 } × { 3 , 4 } × × { 2 n - 1 , 2 n } शब्दों में, i वें तत्व 2 i - 1 या 2 i हैB

{1,2}×{3,4}××{2n1,2n}.
i2i12i

मेरा दावा है कि अगर एल्गोरिथ्म यह निष्कर्ष निकालता है कि और बी में समान तत्व हैं, तो एल्गोरिथ्म ने बी के प्रत्येक तत्व की तुलना में अपने समकक्ष से की है । दरअसल, मान लीजिए कि एल्गोरिथ्म यह निष्कर्ष निकालता है कि और बी में समान तत्व हैं, लेकिन में अपने समकक्ष के बी के पहले तत्व की तुलना कभी नहीं करते हैं । यदि हम पहले तत्व को स्विच करते हैं तो एल्गोरिथम ठीक उसी तरह आगे बढ़ेगा, भले ही उत्तर अलग हो। इससे पता चलता है कि एल्गोरिथ्म में अपने समकक्ष के पहले तत्व (और किसी अन्य तत्व) की तुलना करना चाहिए ।ABBAABBAA

इसका मतलब यह है कि यदि और बी में समान तत्व हैं, तो यह सत्यापित करने के बाद एल्गोरिथ्म के क्रमबद्ध क्रम को जानता है । इसलिए यह कम से कम n होना चाहिए ! विभिन्न पत्ते, और इसलिए यह समय लगता है Ω ( एन लॉग इन करें n )ABAn!Ω(nlogn)


मैं यह है कि अर्थ होगा सोचा होगा सामान्य रूप में, लेकिन जाहिरा तौर पर तुलना मॉडल के साथ अलग है। P=Ω(nlogn)
अल्बर्ट हेंड्रिक्स 19

@AlbertHendriks, यह वही मॉडल है जिसका उपयोग छांटने के लिए n lg n निचला बाउंड दिखाने के लिए किया जाता है। इसका मतलब है कि यह केवल वही ऑपरेशन है जो आप कर सकते हैं तुलना है तो आप बेहतर नहीं कर सकते। मुझे लगता है कि यह आपके सवाल का जवाब देता है।
केवह

[Cntd] हम छँटाई के लिए भी मजबूत सीमा नहीं है! और यदि आप n lg n से अधिक तेजी से सॉर्ट कर सकते हैं तो आप n lg n की तुलना में तेजी से समस्या को हल करने के लिए उपयोग कर सकते हैं।
केवह

1
@AlbertHendriks, क्या आप पूर्णांक को क्रमबद्ध करने के लिए रैखिक समय एल्गोरिदम के बारे में जानते हैं? इसे CLRS में देखें। आपका मामला उन मामलों में से एक हो सकता है जहां हम रैखिक समय में हल कर सकते हैं।
केवह

6
पूर्णांकों में सॉर्ट किया जा सकता है (देखें nada.kth.se/~snilsson/fast-sorting ), या उम्मीद समय में हे ( एन O(nloglogn)(देखेंieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1181890), या रैखिक समय में भी अगर शब्द का आकार काफी बड़ा है (देखें एलएनसीएस 8503, पी। 26ff)। O(nloglogn)
युवल फिल्मस

10

यह उत्तर गणना के एक अलग मॉडल को मानता है: यूनिट-कॉस्ट रैम मॉडल। इस मॉडल में, मशीन के शब्दों का आकार , और उन पर संचालन ( 1 ) समय लेते हैं । हम यह भी सरलता के लिए मानते हैं कि प्रत्येक सरणी तत्व एक मशीन शब्द में फिट बैठता है (और इसलिए परिमाण में अधिकांश n O ( 1 ) पर है)।O(logn)O(1)nO(1)

हम एक तरफा त्रुटि के साथ एक रेखीय समय यादृच्छिक एल्गोरिदम का निर्माण करेंगे (एल्गोरिथ्म दो सरणियों को एक ही तत्व शामिल करने की घोषणा कर सकता है, भले ही यह मामला न हो) यह निर्धारित करने की अधिक कठिन समस्या के लिए कि क्या दो सरणियां हैं। और b 1 , , b n में समान तत्व हैं। (हमें उनमें से किसी को क्रमबद्ध करने की आवश्यकता नहीं है।) हमारा एल्गोरिथ्म अधिकतम 1 / n पर प्रायिकता के साथ त्रुटि करेगा।a1,,anb1,,bn1/n

विचार यह है कि निम्नलिखित पहचान रखती है iff सरणियों एक ही तत्व होते है: इन बहुपद की गणना करने में वास्तव में बहुत अधिक समय लगेगा। इसके बजाय, हम एक यादृच्छिक प्रधानमंत्री चुनें पी और एक यादृच्छिक एक्स 0 और परीक्षण है कि क्या एन Π मैं = 1 ( एक्स 0 - एक मैं ) एन Π

i=1n(xai)=i=1n(xbi).
px0 यदि सरणियाँ समान हैं, तो परीक्षण हमेशा पास होगा, तो आइए उन मामलों पर ध्यान केंद्रित करें जिनमें सरणियाँ भिन्न हैं। विशेष रूप से, के कुछ गुणांक Π n मैं = 1 ( एक्स - एक मैं ) - Π n मैं = 1 ( एक्स - मैं ) n ) = n हे ( एन ) , और इसलिए यह अधिक से अधिक है हे ( एन ) प्रमुख कारकों आकार के Ω ( एन )
i=1n(x0ai)i=1n(x0bi)(modp).
i=1n(xai)i=1n(xbi) गैर-शून्य है। के बाद से परिमाण है n हे ( 1 ) , इस गुणांक परिमाण है 2 एन एन हे (ai,binO(1)2nnO(n)=nO(n)O(n)Ω(n)। इसका मतलब है कि हम कम से कम का एक सेट का चयन करते हैं अभाज्य पी आकार के कम से कम एन 2 (माना), तो एक यादृच्छिक प्रधानमंत्री के लिए पी इस सेट की यह संभावना के साथ कम से कम का आयोजन करेगाn2pn2p है कि n Π मैं = 1 ( x - एक i )11/n एक यादृच्छिक एक्स 0 सापेक्ष पी संभावना के साथ इस गवाह होगा 1 - एन / पी 1 - 1 / n (डिग्री के एक बहुपद के बाद ज्यादा से ज्यादा n ज्यादा से ज्यादा है n जड़ों)।
i=1n(xai)i=1n(xbi)0(modp).
x0p1n/p11/nnn

अंत में, अगर हम एक यादृच्छिक चयन आकार मोटे तौर पर की एन 2 कम से कम का एक सेट के बीच एन 2 अलग अभाज्य संख्या है, और एक यादृच्छिक एक्स 0 सापेक्ष पीpn2n2x0p , फिर जब सरणियों एक ही तत्व शामिल नहीं है, हमारे परीक्षण के साथ असफल हो जायेगी संभाव्यता । परीक्षण को चलाने में समय लगता है O ( n ) क्योंकि पी लगातार मशीन शब्दों में फिट बैठता है।1O(1/n)O(n)p

बहुपद समय primality परीक्षण का उपयोग करना और आकार के अभाज्य संख्या का घनत्व के बाद से मोटे तौर पर है Ω ( 1 / लॉग इन करें n ) , हम एक यादृच्छिक प्रधानमंत्री चुन सकते हैं पी समय में ( लॉग एन ) हे ( 1 ) । रैंडम x 0 मोडुलो पी को चुनना विभिन्न तरीकों से लागू किया जा सकता है, और इसे आसान बनाया गया है क्योंकि हमारे मामले में हमें पूरी तरह से एकसमान रैंडम x 0 की आवश्यकता नहीं है ।n2Ω(1/logn)p(logn)O(1)x0px0

अंत में, हमारा एल्गोरिथ्म में चलता है , हमेशा YES को आउटपुट करता है यदि सरणियों में समान तत्व होते हैं, और यदि कोई समान तत्व नहीं हैं, तो प्रायिकता 1 - O ( 1 / n ) के साथ NO । हम किसी भी निरंतर C के लिए त्रुटि संभावना 1 - O ( 1 / n C ) में सुधार कर सकते हैं ।O(n)1O(1/n)1O(1/nC)C


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

मुझे लगता है कि ओपी संभाव्य एल्गोरिदम को पसंद नहीं करता है क्योंकि वह हैश टेबल का उपयोग करके अपेक्षित रैखिक समय एल्गोरिथ्म को पसंद नहीं करता है।
केवह

Kaveh तुम सही हो। लेकिन निश्चित रूप से यह समाधान भी दिलचस्प है और इसे रखा जाना चाहिए, यह संभाव्य एल्गोरिदम के लिए मामले को हल करता है। इसके अलावा, मुझे लगता है कि यह उस मॉडल का उपयोग करता है जिसकी मुझे तलाश है।
अल्बर्ट हेंड्रिक्स

1
मैं सोच रहा हूँ कि क्या संकेतन O (1 / n) सही है। बेशक मैं जानता हूं कि आपका क्या मतलब है, लेकिन मुझे लगता है कि बड़े-हे की परिभाषा से यह ओ (1) के बराबर है।
अल्बर्ट हेंड्रिक्स

2
C/nnO(1)

-3

मैं एक और एल्गोरिथ्म का प्रस्ताव (या कम से कम इस तरह के एक एल्गोरिथ्म की योजना)

योजना मान लेती है (मान लिया गया कि " पूर्णांक ") एक (संकीर्ण) सीमा के भीतर बीच हैं[min,max]

  1. O(n)minmax

  2. minदोनों सरणियों से सभी मानों को घटाएँ (यहाँ यह तथ्य है कि एक सरणी पहले से ही क्रमबद्ध क्रम में है, इसे ध्यान में नहीं रखा गया है, संभवतः इससे सुधार किया जा सकता है)

  3. 1c>1

  4. max-minO((maxmin)n)

ध्यान दें उपरोक्त एल्गोरिथ्म योजना कई व्यावहारिक स्थितियों में काफी तेज (निर्धारक) हो सकती है।

उपरोक्त एल्गोरिथ्म योजना " चलती जनता " को नियोजित करने वाले एक रेखीय-समय छँटाई एल्गोरिथ्म पर एक भिन्नता है । " मूविंग मास " के पीछे भौतिक अंतर्ज्ञान एल्गोरिथ्म छँटाई है:

मान लें कि प्रत्येक आइटम का मूल्य वास्तव में उसके द्रव्यमान परिमाण का प्रतिनिधित्व करता है और एक पंक्ति में सभी वस्तुओं को व्यवस्थित करने और समान त्वरण बल को लागू करने की कल्पना करता है।

फिर प्रत्येक वस्तु अपने द्रव्यमान से संबंधित दूरी तक बढ़ जाएगी, अधिक बड़े पैमाने पर कम दूरी और इसके विपरीत। फिर छंटनी की गई वस्तुओं को पुनः प्राप्त करने के लिए बस यात्रा की गई दूरी के हिसाब से वस्तुओं को रिवर्स ऑर्डर में इकट्ठा करें।

यह एल्गोरिथ्म रैखिक-समय और नियतात्मक है , लेकिन इसमें एक चेतावनी है कि प्रारंभिक त्वरण बल की मात्रा और यात्रा करने के लिए दूरी (या प्रतीक्षा करने का समय) मूल्यों के वितरण से संबंधित है (अर्थात " द्रव्यमान ",)एक्स-मैंnऊपर कारक)। एक आइटम में यात्रा करने के लिए और एल्गोरिथ्म गति में एक स्थिर कारक प्राप्त करने के लिए (और एक ही सेल में अलग-अलग वस्तुओं को छाँटने के लिए एक तेज़ छँटाई दिनचर्या का उपयोग करने के लिए) अंतरिक्ष को भी विवेकाधीन करने का प्रयास कर सकता है ।

इस संबंध में, उपरोक्त एल्गोरिथ्म संख्यात्मक-आधारित सॉर्टिंग एल्गोरिदम के समान है (जैसे मूलांक-प्रकार , गणना-प्रकार )

कोई सोच सकता है कि यह एल्गोरिथ्म ज्यादा मायने नहीं रखता है, लेकिन यह कम से कम एक बात दिखाता है। वह, " मौलिक ", भौतिक स्तर पर, मनमानी संख्याओं को छांटना वस्तुओं की संख्या में एक रैखिक-समय का संचालन है।


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