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

सी ++ का उपयोग करके दो बाइनरी मैक्स हीप्स मर्ज करें।

समस्या कथन

सरणी के रूप में दो बाइनरी अधिकतम ढेर को देखते हुए, एकल अधिकतम ढेर में विलय करें।

Heap1[] = {20, 17, 15, 10}
Heap2[] = {19, 13, 7}
Result[] = {20, 19, 15, 13, 17, 7, 10}

एल्गोरिदम

1.Create an array to store result
2. Copy both given arrays one by one to result array
3. Build heap to construct full merged max heap

उदाहरण

#include <iostream>
#include <algorithm>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;
void heapify(int *arr, int n, int idx){
   if (idx >= n) {
      return;
   }
   int l = 2 * idx + 1;
   int r = 2 * idx + 2;
   int max;
   if (l < n && arr[l] > arr[idx]) {
      max = l;
   } else {
      max = idx;
   }
   if (r < n && arr[r] > arr[max]) {
      max = r;
   }
   if (max != idx) {
      swap(arr[max], arr[idx]);
      heapify(arr, n, max);
   }
}
void createMaxHeap(int *arr, int n){
   for (int i = n / 2 - 1; i >= 0; --i) {
      heapify(arr, n, i);
   }
}
void mergeMaxHeaps(int *arr1, int n1, int *arr2, int n2, int *result){
   merge(arr1, arr1 + n1, arr2, arr2 + n2, result);
   createMaxHeap(result, n1 + n2);
}
void displayHeap(int *arr, int n){
   for (int i = 0; i < n; ++i) {
     cout << arr[i] << " ";
   }
   cout << endl;
}
int main(){
   int heap1[] = {20, 17, 15, 10};
   int heap2[] = {19, 13, 7};
   int result[SIZE(heap1) + SIZE(heap2)];
   cout << "First max heap: " << endl;
   displayHeap(heap1, SIZE(heap1));
   cout << "Second max heap: " << endl;
   displayHeap(heap2, SIZE(heap2));
   mergeMaxHeaps(heap1, SIZE(heap1), heap2, SIZE(heap2), result);
   cout << "Merged max heap: " << endl;
   displayHeap(result, SIZE(result));
   return 0;
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्न आउटपुट उत्पन्न करता है -

First max heap:
20 17 15 10
Second max heap:
19 13 7
Merged max heap:
20 19 15 13 17 7 10

  1. सी++ में आरएमक्यू का उपयोग करके बाइनरी ट्री में एलसीए खोजें

    अवधारणा लेख एक पेड़ में दो नोड्स के एलसीए को आरएमक्यू समस्या में कम करके खोजने की समस्या को हल करने के लिए एक विधि बताता है। उदाहरण निम्नतम सामान्य पूर्वज (LCA) जड़ वाले पेड़ में दो नोड्स a और b में से T को रूट से सबसे दूर स्थित नोड के रूप में परिभाषित किया गया है, जिसमें a और b दोनों वंशज हैं।

  1. सी ++ में एक लाइन पर मैक्स पॉइंट्स

    मान लीजिए कि हमारे पास 2D प्लेन है। हमें एक ही सीधी रेखा पर रहने वाले बिंदुओं की अधिकतम संख्या ज्ञात करनी है। तो अगर अंक इस तरह हैं - फिर 4 अंक होते हैं इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - n :=अंकों की संख्या, यदि n <3 है, तो n लौटाएं उत्तर :=2 मैं के लिए 1 से n - 1 की सीमा

  1. C++ में दो बाइनरी ट्री मर्ज करें

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