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

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

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

एल्गोरिदम

max_heap के लिए:

शुरुआत
    फ़ंक्शन max_heap() घोषित करें
    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_maxheap के लिए:

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

उदाहरण

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

void max_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_maxheap(vector& a, int n) {
    for (int k = n/2; k >= 1; k--) {
        max_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_maxheap(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
मैक्स हीप:
7
6
2
1
4

आधुनिक C++: std::priority_queue (मैक्स हीप - डिफ़ॉल्ट)

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

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

आउटपुट

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

मिन हीप vs मैक्स हीप

पहलू मिन हीप मैक्स हीप
रूट एलिमेंट न्यूनतम अधिकतम
पैरेंट vs चाइल्ड पैरेंट ≤ चाइल्ड पैरेंट ≥ चाइल्ड
extract_min/max सबसे छोटा हटाता है सबसे बड़ा हटाता है
priority_queue greater<T> कम्पेरेटर डिफ़ॉल्ट (less<T>)
उपयोग न्यूनतम प्राथमिकता, डिज्क्स्ट्रा अधिकतम प्राथमिकता, हफमैन कोडिंग

हीप सॉर्ट (मैक्स हीप का उपयोग करके)

void heapSort(vector& arr) {
    int n = arr.size() - 1; // 1-आधारित
    build_maxheap(arr, n);
    
    for (int i = n; i >= 2; i--) {
        swap(arr[1], arr[i]); // मैक्स को अंत में ले जाएं
        max_heap(arr, 1, i - 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 होगा (या वेटेड ग्राफ के