दो पुनरावर्ती कॉल के साथ पुनरावृत्ति संबंध को हल करना


10

मैं शर्त के तहत quicksort के सबसे ज्यादा मामले क्रम का अध्ययन कर रहा हूँ कि यह एक ऐसा कभी नहीं होगा बहुत की परिभाषा बदलती के लिए असंतुलित विभाजन बहुत

ऐसा करने के लिए मैं अपने आप से सवाल पूछता हूं कि रनटाइम क्या होगा मामले में एस्कॉर्ट हमेशा कुछ अंश जैसे विभाजन में होता है जैसे कि तत्व बाएं विभाजन में हैं और दाएं विभाजन में हैं ( तत्व छोड़कर , धुरी, मध्य में)।T(n,p)0<p12p(n1)(1p)(n1)1

यह देखना मुश्किल नहीं होना चाहिए कि सबसे खराब स्थिति के लिए एक ऊपरी बाध्य देता है जहां अधिकतम असंतुलित अनुमत विभाजन है, क्योंकि अंश साथ कोई भी विभाजन अधिक संतुलित होगा और एक छोटा रनटाइम होगा, और किसी भी अंश की अनुमति नहीं है।T(n,p)p>p<p

यह स्पष्ट है कि सबसे अच्छा मामला है और क्विकॉर्ट का सबसे खराब मामला है। दोनों में आसान पुनरावृत्ति संबंध हैं जो किसी भी शैक्षिक संसाधन में पाए जाते हैं। लेकिन मुझे कोई सुराग नहीं है कि सामान्य रूप से का अध्ययन कैसे किया जाए । स्पष्ट संबंध होगा:T(n,12)T(n,0)T(n,p)

T(n,p)=n+T(p(n1),p)+T((1p)(n1),p)

यहां मैं फंस गया। मैंने चारों ओर खोज करने की कोशिश की है, लेकिन सभी साहित्य जो मैं विभाजित करने और एल्गोरिदम को जीतने के बारे में समझ सकता हूं, ने शाब्दिक रूप से "धोखा" लिया और इस तथ्य का उपयोग करके विश्लेषण को धोखा दिया कि विभाजन हमेशा आकार में समान होते हैं, शब्दों को एक बार में विलय करना। लगातार।

मुझे नहीं पता कि दो पुनरावर्ती कॉलों से कैसे निपटना है, और मुझे नहीं पता कि क्या यह गोलाई को हटाने के लिए सुरक्षित है। क्या यह विश्लेषणात्मक रूप से हल करना संभव है, और यदि हाँ, तो कैसे?

पुनश्च: मैं asymptotics (जो किसी भी स्थिर लिए दिखाना आसान है) में कोई दिलचस्पी नहीं है । मैं इस बात में दिलचस्पी रखता हूं कि जितना छोटा हो जाता है, उतनी ही धीमी गति से हो जाता है, उदाहरण के लिए मैं के अनुपात में दिलचस्पी लेता हूं ।Θ(nlogn)ppT(n,0.25)T(n,0.5)

PPS: एक अंडरग्रेजुएट छात्र के रूप में मैं माफी माँगता हूँ अगर मैंने स्पष्ट चीजें बहुत लंबी या अस्पष्टीकृत गलतियाँ की हैं। और जब मैं नहीं जानता कि अगर यह अन्य एसई साइटों के रूप में यहाँ पर नीचे देखा जाता है, तो मैं ध्यान दूँगा कि यह व्यक्तिगत हित है, होमवर्क नहीं।

जवाबों:


9

जैसा कि आप उल्लेख करते हैं, अकरा-बाज़ी प्रमेय दर्शाता है कि पुनरावृत्ति का समाधान सभी लिए । हालांकि, यह पर निर्भरता की प्रकृति को प्रकट नहीं करता है । उत्तरार्द्ध का निर्धारण करने के लिए, हम एक पुनरावर्तन ट्री दृष्टिकोण का उपयोग कर सकते हैं।T(n,p)O(nlogn)p(0,1)p

पुनरावर्तन वृक्ष की जड़ में अंतराल । इसके दो बच्चे अंतराल और , जिनकी कुल लंबाई फिर से । इनमें से प्रत्येक नोड में दो बच्चे हैं (यह मानते हुए कि काफी बड़ा है), और इसी तरह। सरलता के लिए हम राउंडिंग त्रुटियों को अनदेखा करते हैं, अर्थात, हम मानते हैं कि एक पूर्णांक है; यह सिर्फ एक तकनीकी है, और मैं इसके बारे में चिंता नहीं करेगा। जब भी किसी नोड की लंबाई अधिकतम , हम प्रक्रिया को रोक देते हैं । एल्गोरिथ्म की जटिलता पेड़ में अंतराल की कुल लंबाई के लिए आनुपातिक है। जब , पत्ते{1,n}{1,,pn}{pn+1,,n}nnpn1p1/2 (नोड्स जिस पर हम प्रक्रिया को रोकते हैं) की गहराई अलग है, और इससे समग्र जटिलता निर्धारित करना अधिक कठिन हो जाता है।

हम यह देखते हुए एक साधारण ऊपरी सीमा प्राप्त कर सकते हैं कि पेड़ के पास अधिकांश स्तर हैं: प्रत्येक नोड अपने माता पिता की तुलना में कम से कम का कारक है । जैसे कि के विश्लेषण में , किसी भी स्तर पर अंतराल की कुल लंबाई सबसे अधिक , और हम ऊपरी सीमा प्राप्त करते हैं कार्यकारी समय। चूँकि और छोटे , हम इसे रूप में लिख सकते हैं ।log1p(1/n)1pp=1/2nO(nlog1p(1/n))log1p(1/n)=logn/log(1p)1log(1p)1=log(1p)=p±O(p2)pO(nlogn/p)

यहां अधिक सटीक गणना है। स्तर पर विचार करें । मान लीजिए कि हम एक छोटे से अंतराल पर पहुंचने से प्रक्रिया को रोक नहीं पाते हैं। हम लेने के द्वारा एक यादृच्छिक शिखर उत्पन्न कर सकते हैं संभावना के साथ कदम, जिनमें से प्रत्येक हम छोड़ दिया जाने (माना) में संभावना के साथ और सही (माना) । हर बार जब हम बाएं कदम को उठाते हैं, तो अंतराल की लंबाई का लॉग घटता है , और हर बार जब हम एक सही कदम उठाते हैं तो यह घट जाता है । एक शीर्ष शीर्ष की लंबाई के वास्तविक पेड़ में होता है, जो अधिकांश पर कम होता है । स्तर पर अंतराल का कुल वजनttp1plogplog(1p)logntपेड़ की पूरी संभावना है कि इस प्रक्रिया के अनुसार उत्पन्न एक शीर्ष सबसे में कमी के अनुरूप है । यही कारण है, अगर वितरण जो समान हो जाता है संभावना के साथ और करने के लिए संभावना के साथ , और स्वतंत्र हैं, तो स्तर का कुल वजन । सुपर निरंतर के लिए , यादृच्छिक चर मोटे तौर पर सामान्य रूप से साथ मतलब वितरित किया जाता है और विचरण रैखिक मेंlognDlogpplog(1p)1pX1,,XtDtPr[X1++Xtlogn]tX1++Xt[plogp(1p)log(1p)]tt, इसलिए संतोषजनक के लिए , कहते हैं, संभावना बहुत करीब होगी , जबकि संतोषजनक , कहते हैं, यह शून्य के बहुत करीब होगा। परिभाषित करना (जिसे बाइनरी एन्ट्रोपी फंक्शन के रूप में जाना जाता है), हम निष्कर्ष निकालते हैं कि रनिंग टाइम ( में वर्दी , )। रूप में हमारे पास , और इसलिए हमारा पहले का अनुमान तंग नहीं था।t[plogp(1p)log(1p)]t(logn)/21t[plogp(1p)log(1p)]t2lognh(p)=plogp(1p)log(1p)Θ(nlogn/h(p))pnp0h(p)plogp

उसी विश्लेषण को देखने का एक और तरीका है कि स्वतंत्र यादृच्छिक चर एक अनंत क्रम पहले की तरह हो, और एक स्टॉपिंग टाइम को परिभाषित करते हुए पहली बार जैसे कि । फिर चलने का समय समानुपाती होता है । प्राथमिक नवीकरण प्रमेय में कहा गया है कि , जो यह दर्शाता है कि अंतराल का कुल आकार बराबर । अधिक सटीक रूप से, प्रत्येक स्थिर लिए अंतराल का कुल आकार है , जहांX1,X2,TtX1++XtlognnE[T]limnE[T]/logn=1/E[D]=1/h(p)(1+o(1))nlogn/h(p)p(1+αp(n))nlogn/h(p)αp(n)=o(n) । प्रारंभिक नवीकरण प्रमेय में अभिसरण समय पैरामीटर में घातीय है - हमारे मामले में - इसलिए में बहुपद होना चाहिए , अर्थात, । अभिसरण भी किसी भी लिए लिए समान है ।lognnαp(n)=O(nCp)p(δ,1δ)δ>0


संक्षेप में, पुनरावर्तन वृक्ष में अंतराल की कुल लंबाई, जो चल रहे समय के लिए आनुपातिक है, प्रत्येक लिए निम्न रूप है : जहां और को एक ही आधार पर ले जाया जाता है, और एक कार्य के आधार पर है और करने के लिए प्रवृत्त के साथ ।p

T(n,p)=(1+o(1))nlognh(p),
lognh(p)=plogp(1p)log(1p)o(1)p0n

इसके अलावा, यह शायद सच है कि किसी भी and और किसी भी यह सही है कि अंतराल की कुल लंबाई फॉर्म जहां और छिपे हुए बड़े O स्थिरांक केवल पर निर्भर करते हैं । विशेष रूप से, ऐसा होना चाहिए कि सभी स्थिर , और अभिसरण बहुपद है।δ>0p(δ,1δ)

T(n,p)=(1+O(nCδ))nlognh(p),
Cδ>0δp1,p2
limnT(n,p1)T(n,p2)=h(p2)h(p1),

आपके त्वरित उत्तर के लिए धन्यवाद युवल। मैं इस तथ्य से थोड़ा भ्रमित हूं कि आपने अपने सारांश में उपयोग किया है । एक स्थिरांक है, और इसका मतलब यह नहीं है कि यह तहत अप्रासंगिक है ? मैं लिखने का फैसला किया एक छोटे से परीक्षण कार्यक्रम , जिससे पता चला है कि की तुलना विश्लेषणात्मक विधि और एक कम्प्यूटेशनल एक के बीच 0.03 की एक त्रुटि दे दी है। यह बड़ा लगता है, या यह उम्मीद की जा रही है? Θh(p)Θn=100000000000000T(n,0.1)/T(n,0.5)
orlp

में स्थिरांक में समान है । अधिक सटीक रूप से, कुछ स्थिरांक यह मामला है कि प्रत्येक लिए मौजूद है जैसे कि , । आप शायद प्रत्येक निश्चित के लिए फॉर्म एक और अधिक मजबूत विवरण प्राप्त कर सकते हैं , जहां थोड़ा o संबंध में है ( लेकिन पर निर्भर हो सकता है ); पर निर्भर नहीं होना चाहिए । Θpc,CpNpnNpcnlogn/h(p)T(n,p)Cnlogn/h(p)T(n,p)=(1+o(1))Cnlogn/h(p)pnpCp
युवल फिल्मस

सीमा के अनुरूपकरण पर निर्भर करता है , इसलिए आपको एक बहुत अच्छा सन्निकटन प्राप्त करने के लिए बड़े होने के लिए आवश्यकता हो सकती है । दूसरी ओर, 0.03 की एक सापेक्ष त्रुटि इतनी बड़ी नहीं लगती है। आप को ठीक करने की कोशिश कर सकते हैं और रनिंग टाइम को फंक्शन के रूप में प्लॉट कर सकते हैं , इसकी तुलना । lognlognnp1/h(p)
युवल फिल्मस

ओह, मुझे क्षमा करें, मुझे 0.03 की सापेक्ष त्रुटि का मतलब नहीं था, लेकिन एक निरपेक्ष (2.13222 बनाम 2.10339)। साजिश रचने के एक समारोह के रूप में , के सापेक्ष दी 4% के एक रिश्तेदार अंतर है, साथ का 96% किया जा रहा है । T(n,p)p1/h(p)T(1011,0.05)h(0.05)T(1011,0.4)h(0.4)
orlp

1
सुपर-कॉन्स्टेंट प्रासंगिक चर के संबंध में अनंत के लिए एक फ़ंक्शन है (इस मामले में )। यह । nω(1)
युवल फिल्मस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.