Sort(Q,n):
for i = 0 to n-1
min = findMin(Q, n-i, n)
reorder(Q, min, n)
end for
findMin(Q, k, n):
min = infinity
for i = 1 to n
curr = dequeue(Q)
if curr < min && i<=k
min = curr
end if
enqueue(Q,curr)
end for
return min
reorder(Q, min, n):
for i = 1 to n
curr = dequeue(Q)
if (curr != min) // I'm assuming that there is a way to differentiate between any two items, this isn't hard to enforce
enqueue(Q, curr)
end if
end for
enqueue(Q,min)
आरोही तरह योगदान के लिए, हे में (एन^2) समय, स्थान हे में चलता है (1) (यानी कतार हे है (एन) जगह है, और अतिरिक्त जगह की आवश्यकता एल्गोरिथ्म द्वारा हे है (1))
स्पष्टीकरण:
अनिवार्य रूप से, हम कतार n बार, हर समय यात्रा लागत 2n के माध्यम से पुनरावृति।
प्रत्येक पुनरावृत्ति पर, हम पूरी कतार के माध्यम से जाते हैं और न्यूनतम संख्या में वस्तुओं को चुनते हैं। तो सबसे पहले वस्तुओं की प्रासंगिक संख्या n है, क्योंकि हम उनमें से कम से कम चाहते हैं। अगली पुनरावृत्ति हम न्यूनतम एन -1 आइटम, और फिर एन -2 आइटम आदि का न्यूनतम चाहते हैं। चूंकि एल्गोरिदम अंत में इन न्यूनतम सीमाओं को ढेर करेगा।
एक बार हमें न्यूनतम मिला, तो हमें इसे छीनने और अंत में इसे ढेर करने के लिए फिर से पूरे ढेर पर फिर से शुरू करने की आवश्यकता है।
यहां मुख्य विचार यह है कि उसी तत्व के एक एनक्यू के बाद एक डेक्यू हमें कतार पर फिर से चालू करने और आदेश को संरक्षित करते समय न्यूनतम/अधिकतम जांचने की अनुमति देगा।
मैं बहुत हैरान करता है, तो आप ऐसा कर सकते हैं होगा। हालांकि, मुझे लगता है कि आपको किस प्रकार की अस्थायी स्मृति का उपयोग करने की अनुमति है, इस बारे में आपको थोड़ा और विशिष्ट होना चाहिए। मुझे लगता है कि आपको केवल 'ओ (1)' स्मृति की अनुमति है? – ltjax
न तो समय और न ही अंतरिक्ष जटिलताओं की कोई सीमा नहीं है। हालांकि यह इस तरह का निहित है कि अंतरिक्ष जटिलता 1 होगी, जब तक कि एक पुनरावर्ती समाधान नहीं होता है और प्रति रिकर्सिव कॉल को बनाए गए स्टैकफ्रेम को अंतरिक्ष जटिलता में जोड़ा जाता है। – 3ashmawy
क्या 'peek' केवल कतार का सिर वापस करता है, या आप कतार के किसी भी स्थिति के मूल्य को खोजने के लिए इसका उपयोग कर सकते हैं? – IVlad