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

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)

Python में हीप सॉर्ट का पूरा प्रोग्राम इस प्रकार है -

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 log n)


  1. पायथन में CGI क्या है? पायथन में CGI क्या है?

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

  1. पायथन प्रोग्राम: हीप सॉर्ट पायथन प्रोग्राम: हीप सॉर्ट

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक सरणी दी गई है, हमें हीपसॉर्ट की अवधारणा का उपयोग करके इसे क्रमबद्ध करना है। यहां हम अधिकतम तत्व को अंत में रखते हैं। यह तब तक दोहराया जाता है जब तक सरणी क्रमबद्ध नहीं हो जाती। उदाहरण # हीपिफाई def heapify(arr, n, i): la

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

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