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

C++ प्रोग्राम: मिन हीप इम्प्लीमेंटेशन

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

एल्गोरिदम

min_heap() के लिए:

शुरुआत
    फ़ंक्शन min_heap(int* a, int m, int n) घोषित करें
    j, t को integer डेटाटाइप घोषित करें
    t = a[m] इनिशियलाइज़ करें
    j = 2 * m
    while (j <= n) करें
        if (j < n और a[j+1] < a[j]) तो
            j = j + 1
        if (t < a[j]) तो
            ब्रेक
        else if (t >= a[j]) तो
            a[j / 2] = a[j]
            j = 2 * j
    a[j/2] = t
    लौटाएं
समाप्ति

build_minheap के लिए:

शुरुआत
    फ़ंक्शन build_minheap(int* a, int n) घोषित करें
    k को integer डेटाटाइप घोषित करें
    for(k = n/2; k >= 1; k--)
        फ़ंक्शन min_heap(a, k, n) कॉल करें
समाप्ति

उदाहरण

#include <iostream>
#include <vector>
using namespace std;

void min_heap(vector& a, int m, int n) {
    int j, t;
    t = a[m];
    j = 2 * m;
    while (j <= n) {
        if (j < n && a[j+1] < a[j])
            j = j + 1;
        if (t < a[j])
            break;
        else if (t >= a[j]) {
            a[j/2] = a[j];
            j = 2 * j;
        }
    }
    a[j/2] = t;
}

void build_minheap(vector& a, int n) {
    for (int k = n/2; k >= 1; k--) {
        min_heap(a, k, n);
    }
}

int main() {
    int n;
    cout << "ऐरे के एलिमेंट्स की संख्या दर्ज करें: ";
    cin >> n;
    vector a(n + 1); // 1-आधारित इंडेक्सिंग
    
    for (int i = 1; i <= n; i++) {
        cout << "एलिमेंट " << i << " दर्ज करें: ";
        cin >> a[i];
    }
    
    build_minheap(a, n);
    cout << "मिन हीप:\n";
    for (int i = 1; i <= n; i++) {
        cout << a[i] << endl;
    }
    return 0;
}

आउटपुट

ऐरे के एलिमेंट्स की संख्या दर्ज करें: 5
एलिमेंट 1 दर्ज करें: 7
एलिमेंट 2 दर्ज करें: 6
एलिमेंट 3 दर्ज करें: 2
एलिमेंट 4 दर्ज करें: 1
एलिमेंट 5 दर्ज करें: 4
मिन हीप:
1
4
2
6
7

आधुनिक C++: std::priority_queue (मिन हीप)

#include <iostream>
#include <queue>
#include <vector>
using namespace std;

int main() {
    // मिन हीप (डिफ़ॉल्ट मैक्स हीप है, इसलिए greater उपयोग करें)
    priority_queue, greater> minHeap;
    
    minHeap.push(7);
    minHeap.push(6);
    minHeap.push(2);
    minHeap.push(1);
    minHeap.push(4);
    
    cout << "मिन हीप एलिमेंट्स (सॉर्टेड क्रम में): ";
    while (!minHeap.empty()) {
        cout << minHeap.top() << " ";
        minHeap.pop();
    }
    cout << endl;
    
    return 0;
}

आउटपुट

मिन हीप एलिमेंट्स (सॉर्टेड क्रम में): 1 2 4 6 7

हीप ऑपरेशन्स जटिलता

ऑपरेशन जटिलता
इन्सर्ट O(log n)
मिन निकालें O(log n)
मिन प्राप्त करें O(1)
बिल्ड हीप O(n)
हीप सॉर्ट O(n log n)

मूल कोड में सुधार

  • conio.h और getch() हटाए गए (नॉन-स्टैंडर्ड)
  • vector का उपयोग किया गया फिक्स्ड ऐरे के बजाय
  • 0-आधारित इंडेक्सिंग के लिए समायोजित (मूल 1-आधारित था)
  • बेहतर मेमोरी प्रबंधन
  1. C++ में AVL ट्री को लागू करना C++ में AVL ट्री को लागू करना

    AVL ट्री एक सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री है जहां सभी नोड्स के लिए बाएं और दाएं सबट्री की ऊंचाई का अंतर एक से अधिक नहीं हो सकता।ट्री रोटेशन एक ऑपरेशन है जो AVL ट्री पर एलिमेंट्स के क्रम में हस्तक्षेप किए बिना स्ट्रक्चर को बदलता है। यह ट्री में एक नोड को ऊपर ले जाता है और एक नोड को नीचे। इसका उपयो

  1. C++ STL में Set_Symmetric_Difference का कार्यान्वयन C++ STL में Set_Symmetric_Difference का कार्यान्वयन

    यह C++ प्रोग्राम set_symmetric_difference को लागू करने के लिए है। दो सेट का सिमेट्रिक डिफरेंस उन तत्वों द्वारा बनाया जाता है जो एक सेट में मौजूद होते हैं, लेकिन दूसरे में नहीं। सामान्य सेट ऑपरेशन हैं: Set Union Set Intersection Symmetric Set Difference या Exclusive-OR Set Difference या Subtraction

  1. C++ प्रोग्राम: एडजेसेंसी मैट्रिक्स इम्प्लीमेंट करना C++ प्रोग्राम: एडजेसेंसी मैट्रिक्स इम्प्लीमेंट करना

    एक ग्राफ का एडजेसेंसी मैट्रिक्स V x V आकार का एक वर्ग मैट्रिक्स होता है। V ग्राफ G के वर्टेक्स की संख्या है। इस मैट्रिक्स में प्रत्येक तरफ V वर्टेक्स मार्क किए जाते हैं। यदि ग्राफ में i से j वर्टेक्स तक कुछ एज हैं, तो एडजेसेंसी मैट्रिक्स में i-वीं पंक्ति और j-वें कॉलम में 1 होगा (या वेटेड ग्राफ के