एल्गोरिथ्म रिफ्रेशर। हेप्सॉर्ट एक अंतर्दृष्टि एल्गोरिथ्म क्यों है?


15

मैं यह नहीं देख सकता कि क्यों हीप्सोर्ट को एक इनहाउस सॉर्टिंग एल्गोरिदम माना जाता है।

मेरा मतलब है कि अतिरिक्त डेटा संरचना सरणी के तत्वों के साथ आबादी वाली है यानी एक ढेर, का उपयोग न्यूनतम मूल्य और सॉर्टिंग प्रक्रिया के निष्कर्षण में सहायता के लिए किया जाता है।

तो क्या मैं यहाँ inplace की परिभाषा को गलत समझ रहा हूँ?

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

तो इसे क्यों माना जाता है?

जवाबों:


12

मेरा मतलब है कि अतिरिक्त डेटा संरचना सरणी के तत्वों के साथ आबादी वाली है यानी एक ढेर, का उपयोग न्यूनतम मूल्य और सॉर्टिंग प्रक्रिया के निष्कर्षण में सहायता के लिए किया जाता है।

नहीं। हे (1) अतिरिक्त मेमोरी का उपयोग किए बिना सरणी ढेर बाधा के अनुरूप रूपांतरित हो जाती है। (वास्तव में आप सभी की जरूरत अतिरिक्त स्मृति पर्याप्त है सरणी के एक तत्व को रखने के लिए, स्वैप उद्देश्यों के लिए, साथ ही एक बूलियन या दो और एक लूप चर या दो)।

ठीक है, एक तकनीकीता पर यह हो सकता है कि हीप्सोर्ट को आमतौर पर एक अलग ढेर का उपयोग करके समझाया जाता है, लेकिन इसे पूरी तरह से लागू करना संभव है।


3
एक ही जगह मैं "हीप्सोर्ट" को एक अलग ढेर के साथ देखने की उम्मीद करूंगा (कोड में) हास्केल जैसी कार्यात्मक भाषा में है, उसी कारण से कि सामान्य कार्यात्मक "क्विकॉर्ट" भी इन-प्लेस नहीं है - कार्यात्मक प्रोग्रामर जैसे उनकी सूची बहुत अधिक है, और इन-प्लेस सॉर्ट स्थिति है - यह सरणी की स्थिति को बदल देता है / जो कुछ भी डेटा है। डराने वाले उद्धरण क्योंकि मैं वास्तव में स्वीकार नहीं करता हूं कि एक आउट-ऑफ-प्लेस क्विकॉर्ट एक क्विकॉर्ट है, या यह कि एक आउट-ऑफ-प्लेस हेप्सोर्ट एक सबसे अधिक है, जो कम से कम स्पष्ट रूप से यह कहे बिना नहीं है कि यह इसमें नहीं है स्थान।
स्टीव 314

1
@ स्टीव 314, मुझे लगता है कि मैंने कुछ शिक्षण सामग्री देखी है जो "ढेर में डालने और फिर एक समय में तत्वों को बाहर निकालने और उन्हें एक सरणी में रखने" के लिए कुछ कहती है। लेकिन सिर्फ सीएलआर की जाँच करने के बाद मैं रिपोर्ट कर सकता हूं कि वे एक इन-प्लेस संस्करण दिखाते हैं।
पीटर टेलर

2
@PeterTaylor: हां, मैं जिस किताब की समीक्षा कर रहा था (स्कीना) एक अतिरिक्त ढेर का निर्माण करके ढेर प्रस्तुत किया।
user10326

4

आप मूलभूत समझ को याद कर रहे होंगे कि किसी पेड़ के लेआउट को निर्दिष्ट करने के लिए एक सरणी का उपयोग किया जा सकता है।

मान लीजिए कि आपके पास एक बाइनरी ट्री है, और एक आंतरिक नोड सरणी के इंडेक्स I पर है। फिर उस नोड के माता-पिता और बच्चों के सरणी सूचकांक द्वारा पाया जा सकता है:

Parent(i) = floor(i/2)
Left child(i) = 2i
Right child(i) = 2i + 1

देख:

http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/heapSort.htm

चूंकि ढेर को एक सरणी में पूरी तरह से रखा और व्यवस्थित किया जा सकता है, इसलिए हेप्सोर्ट इनपुट ऐरे के अंदर तत्वों को घुमाकर इन-प्लेस कर सकते हैं। वास्तव में, मूल इनपुट सरणी का उपयोग करके हीप का निर्माण और हेरफेर किया जाता है।


: मैं इसके बारे में जानता हूं। समस्याओं से ऐसा लगता है कि मैं जिस पुस्तक को पढ़ रहा हूं वह एक अलग हीप का उपयोग करके प्रस्तुत किया गया है। मुझे समझ नहीं आया या यह नहीं लगता कि यह प्रस्तुति एल्गोरिदम को समझने में आसान बनाने के लिए थी (शायद? निश्चित रूप से यह क्यों नहीं था? इस तरह प्रस्तुत किया गया है)
8:10 बजे user10326

मैं अत्यधिक आपको कॉर्मेन, एट अल द्वारा पुस्तक "इंट्रोडक्शन टू अल्गोरिदम" खरीदने की सलाह दूंगा। यह स्पष्ट रूप से सभी एल्गोरिदम से संबंधित सवालों के जवाब देता है। यदि आप एक कंप्यूटर वैज्ञानिक या सॉफ्टवेयर इंजीनियर के रूप में कैरियर के बारे में गंभीर हैं, तो आपको इस पुस्तक का होना आवश्यक है।
stackoverflowuser2010

1

यदि, जैसा कि आप कहते हैं, एक को ढेर बनाने के लिए वास्तव में एक अतिरिक्त संरचना की आवश्यकता होती है तो हीप्सोर्टोर्ट वास्तव में एक इनलेट सॉर्टिंग एल्गोरिदम नहीं होगा।

बहरहाल, मामला यह नहीं। आप उसी प्रकार के ढेर पर ढेर का निर्माण कर सकते हैं जिसे आप छाँटना चाहते हैं, और उसके बाद आप हीप्सोरिथम एल्गोरिथम को लागू करते हैं, इसलिए यह विस्थापित होता है।


असल में, एक "हीपाइफायड" एल्गोरिथ्म है, जिसका उपयोग किसी सरणी में डेटा को री-ऑर्डर करने के लिए किया जाता है ताकि यह IIRC O (n) समय में ढेर के नियमों का अनुपालन करे। प्रोग्रामर्स पर pseudocode देखें ।stackexchange.com/questions/116904/… । उसके बाद, यह ज्यादातर बार-बार हीप रूट-अर्क करने और सरणी का कितना हिस्सा अभी भी "हीप" है और कितना एंड-रिजल्ट हल किया जाता है, इस पर नज़र रखने की बात है।
स्टीव 314

0

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

विकिपीडिया - इन-प्लेस एल्गोरिथम


तो क्यों विलय को एक जगह में एल्गोरिथ्म नहीं माना जाता है?
user10326

3
यह एक उपयोगी उत्तर नहीं है। इसका किसी से कोई संबंध नहीं है और यह सवाल का जवाब नहीं देता है।
stackoverflowuser2010

बेशक इसका हाइपोसॉर्ट से कुछ लेना-देना है। हीप्सोर्ट एक इन-प्लेस सॉर्ट एल्गोरिथ्म है, जैसा कि परिभाषा से स्पष्ट होना चाहिए। वास्तव में, इसे हीप्सोर्ट पेज से जोड़ा गया था।
हेन हेनरिक्स

0

इसे जगह में माना जाता है क्योंकि यह स्थान की आवश्यकताएं नगण्य हैं (यदि आप स्वैप आइटमों के लिए बिटवाइज़ ऑपरेशन का उपयोग कर रहे हैं तो निरंतर या बिल्कुल भी नहीं)। उदाहरण के लिए, मर्जसॉर्ट जगह में नहीं है क्योंकि खोज उदाहरण के प्रत्येक पुनरावृत्ति में इनपुट सेट को संशोधित नहीं किया गया है।

इन-प्लेस एल्गोरिदम और आउट-ऑफ-प्लेस एल्गोरिदम के बीच के अंतर को चित्रित करने का सबसे अच्छा तरीका संभवतः निम्नलिखित C / C ++ स्ट्रिंग रिवर्सल कोड को देखना है जो इसे (K & R से) करता है:

void reverse(char s[])
{
      int c, i, j;

      for (i = 0, j = strlen(s)-1; i < j; i++, j--) {
         c = s[i];
         s[i] = s[j];
         s[j] = c;
      }
}

यदि आप, उदाहरण के लिए, अंत से इनपुट स्ट्रिंग को पढ़ रहे हैं और पात्रों को दूसरे बफर में रखते हैं, तो यह एक स्ट्रिंग स्ट्रिंग रिवर्सल एल्गोरिदम होगा।


1
मर्जेसर्ट को गुस्सा आ रहा है - यह गलत तरीके से खुद को समझाने में आसान है कि आपके पास एक जगह में रणनीति है। आमतौर पर, यह केवल छोटे सरणियों के लिए काम करता है। हालांकि, मुझे लगता है कि मैंने एक बार एक पेपर डाउनलोड किया था जहां किसी ने मर्ज-सॉर्ट एल्गोरिथ्म के इन-प्लेस वेरिएंट को काम किया था । मैं देखूंगा कि क्या मैं इसे फिर से पा सकता हूं।
स्टीव 314
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.