Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में हीप सॉर्ट क्या है?

हीप सॉर्ट बाइनरी हीप डेटा संरचना पर आधारित छँटाई तकनीक है। हीप सॉर्ट के साथ आगे बढ़ने के लिए, आपको बाइनरी ट्री और बाइनरी हीप से परिचित होना चाहिए।

पूर्ण बाइनरी ट्री क्या है?

एक पूर्ण बाइनरी ट्री एक ट्री डेटा संरचना है जहां अंतिम को छोड़कर सभी स्तर पूरी तरह से भरे हुए हैं। अंतिम स्तर बाईं ओर से भरा जाना चाहिए।

बाइनरी हीप क्या है?

बाइनरी हीप बाइनरी ट्री का एक विशेष मामला है। बाइनरी हीप दो प्रकार के होते हैं -

  • मैक्स हीप - प्रत्येक स्तर पर पैरेंट नोड उसके चाइल्ड नोड्स से बड़ा होता है।

  • मिन हीप - प्रत्येक स्तर पर पैरेंट नोड उसके चाइल्ड नोड्स से छोटा होता है।

पूर्ण बाइनरी ट्री का सरणी प्रतिनिधित्व

बाइनरी हीप को एक सरणी के रूप में दर्शाया जा सकता है क्योंकि यह अंतरिक्ष कुशल है। अगर पैरेंट नोड को इंडेक्स I पर स्टोर किया जाता है, तो बाएं बच्चे की गणना 2 * i + 1 और दाएं बच्चे की 2 *i + 2 से की जा सकती है। मान लीजिए, इंडेक्स 0 से शुरू होता है।

हीप सॉर्ट एल्गोरिथम

  • एक पूर्ण बाइनरी ट्री से अधिकतम ढेर बनाएं।

  • रूट निकालें और इसे हीप में अंतिम तत्व से बदलें, हीप के आकार को 1 से कम करें और शेष नोड्स से फिर से अधिकतम हीप बनाएं।

  • चरण 2 दोहराएं जब तक कि हमारे पास केवल 1 नोड शेष न हो।

एक पूर्ण बाइनरी ट्री से अधिकतम ढेर बनाएं

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

निम्नलिखित कोड एक पूर्ण बाइनरी ट्री से अधिकतम ढेर बनाता है जो मूल रूप से वह सरणी है जिसे हम सॉर्ट करना चाहते हैं।

def heapify(arr, n, i):
   # Find largest among root and children
   largest = i
   l = 2 * i + 1
   r = 2 * i + 2
   if l < n and arr[i] < arr[l]:
      largest = l
   if r < n and arr[largest] < arr[r]:
      largest = r
   # If root is not largest, swap with largest and continue heapifying
   if largest != i:
      arr[i], arr[largest] = arr[largest], arr[i]
      heapify(arr, n, largest)

हीप सॉर्ट

इस समय, हमारे पास अधिकतम ढेर है। अब हमें निम्नलिखित चीजें करने की जरूरत है।

  • ढेर में अंतिम तत्व के साथ जड़ को स्वैप करें।

  • ढेर के आकार को 1 से कम करें। (इसका मतलब है कि सबसे बड़ा तत्व अंतिम स्थान पर पहुंच गया है, हमें उस तत्व को ध्यान में रखने की आवश्यकता नहीं है)।

  • अंतिम तत्व को छोड़कर अधिकतम ढेर का पुनर्निर्माण करें।

  • उपरोक्त चरणों को तब तक दोहराएं जब तक हमारे पास केवल 1 तत्व शेष न हो।

for i in range(n-1, 0, -1):
   # Swap
   arr[i], arr[0] = arr[0], arr[i]

   # Heapify root element
   heapify(arr, i, 0)

पायथन में हीप सॉर्ट का पूरा कार्यक्रम इस प्रकार है -

def heapify(arr, n, i):
   # Find largest among root and children
   largest = i
   l = 2 * i + 1
   r = 2 * i + 2
   if l < n and arr[i] < arr[l]:
      largest = l
   if r < n and arr[largest] < arr[r]:
      largest = r
   # If root is not largest, swap with largest and continue heapifying
   if largest != i:
      arr[i], arr[largest] = arr[largest], arr[i]
      heapify(arr, n, largest)

def heapSort(arr):
   n = len(arr)
   # Build max heap
   for i in range(n//2, -1, -1):
      heapify(arr, n, i)
   for i in range(n-1, 0, -1):
      # Swap
      arr[i], arr[0] = arr[0], arr[i]
      # Heapify root element
      heapify(arr, i, 0)

arr = [1, 12, 9, 5, 6, 10]
heapSort(arr)
n = len(arr)
print("Sorted array is")
for i in range(n):
   print(arr[i], end=' ')

समय की जटिलता - O(n logn)


  1. पायथन में सीजीआई क्या है?

    सामान्य गेटवे इंटरफ़ेस, या CGI, बाहरी गेटवे प्रोग्राम के लिए HTTP सर्वर जैसे सूचना सर्वर के साथ इंटरफ़ेस करने के लिए एक मानक है। वर्तमान संस्करण CGI/1.1 है और CGI/1.2 प्रगति पर है। वेब ब्राउज़िंग CGI की अवधारणा को समझने के लिए, आइए देखें कि जब हम किसी विशेष वेब पेज या URL को ब्राउज़ करने के लिए हा

  1. हीप सॉर्ट के लिए पायथन प्रोग्राम

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

  1. पायथन प्रोग्राम में सिलेक्शन सॉर्ट

    इस लेख में, हम Python 3.x में सिलेक्शन सॉर्ट और उसके कार्यान्वयन के बारे में जानेंगे। या पहले। चयन क्रम . में एल्गोरिथम, एक सरणी को पुनरावर्ती रूप से अनसोल्ड भाग से न्यूनतम तत्व ढूंढकर और शुरुआत में सम्मिलित करके सॉर्ट किया जाता है। किसी दिए गए सरणी पर चयन क्रम के निष्पादन के दौरान दो उप-सरणी बनते