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

C++ प्रोग्राम इंटरवल ट्री को लागू करने के लिए

इंटरवल ट्री अंतराल रखने के लिए एक आदेशित ट्री डेटा संरचना है। यह विशेष रूप से किसी भी अंतराल या बिंदु के साथ ओवरलैप होने वाले सभी अंतरालों को कुशलतापूर्वक खोजने की अनुमति देता है। यहाँ एक इंटरवल ट्री को लागू करने के लिए C++ प्रोग्राम है।

एल्गोरिदम

Begin
   function insert() is used to insert new nodes into the tree:
      If Tree is empty, new node becomes root.
         Get low value of interval at root.
      If root's low value is smaller, then new interval goes to left subtree.
      Else, new node goes to right subtree.
      If needed, update the max value of this ancestor.
End

Begin
   function intervalFind() searches a given interval i in a given interval Tree:
      If tree is empty return null.
      If given interval overlaps with root
      Return root->i
      If left child of root is present and max of left child is
         greater than or equal to given interval, then i may
         overlap with an interval is left subtree
      Else
         interval can only overlap with right subtree.
End

उदाहरण कोड

#include <iostream>
using namespace std;

struct Interval//interval variables declaration {
   int l, h;
};
struct ITNod//node declaration {
   Interval *i;
   int max;
   ITNod *l, *r;
};
ITNod * newNode(Interval i)//to create new node {
   ITNod *t = new ITNod;
   t->i = new Interval(i);
   t->max = i.h;
   t->l = t->r = NULL;
};
ITNod *insert(ITNod *r, Interval i) {
   if (r== NULL)
      return newNode(i);
      int l = r->i->l;
   if (i.l< l)
      r->l = insert(r->l, i);
   else
      r->r = insert(r->r, i);
   if (r->max < i.h)
      r->max = i.h;
      return r;
}
bool Overlap(Interval i1, Interval i2)// check if two intervals overlap or not. {
   if (i1.l <= i2.h && i2.l<= i1.h)
      return true;
      return false;
}
Interval *intervalFind(ITNod *root, Interval i) {
   if (root == NULL)
      return NULL;
   if (Overlap(*(root->i), i))
      return root->i;
   if (root->l!= NULL && root->l->max >= i.l)
      return intervalFind(root->l, i);
      return intervalFind(root->r, i);
}

void inorder(ITNod *root)//perform inorder traversal {
   if (root == NULL)
      return;
      inorder(root->l);
      cout << "[" << root->i->l<< ", " << root->i->h << "]" << " max = "<< root->max << endl;
      inorder(root->r);
}
int main(int argc, char **argv) {
   Interval ints[] = { { 5, 20 }, { 6, 7 }, { 3, 4 }, { 67, 26 }, { 3, 4 } };
   int n = sizeof(ints) / sizeof(ints[0]);
   ITNod *root = NULL;
   for (int i = 0; i < n; i++)
      root = insert(root, ints[i]);
      cout << "In-order traversal of the constructed Interval Tree is\n";
      inorder(root);
      Interval x = { 7, 6 };
      cout << "\nSearching for interval [" << x.l << "," << x.h << "]";
      Interval *res = intervalFind(root, x);
      if (res == NULL)
         cout << "\nNo Overlapping Interval";
      else
         cout << "\nOverlaps with [" << res->l << ", " << res->h << "]";
}
के साथ ओवरलैप करता है

आउटपुट

In-order traversal of the constructed Interval Tree is
[3, 4] max = 4
[3, 4] max = 4
[5, 20] max = 26
[6, 7] max = 26
[67, 26] max = 26

Searching for interval [7,6]
Overlaps with [5, 20]

  1. सी ++ प्रोग्राम सीजर साइफर को लागू करने के लिए

    यह एक मोनो-अल्फाबेटिक सिफर है जिसमें प्लेनटेक्स्ट के प्रत्येक अक्षर को सिफरटेक्स्ट बनाने के लिए दूसरे अक्षर द्वारा प्रतिस्थापित किया जाता है। यह प्रतिस्थापन सिफर योजना का सबसे सरल रूप है। इस क्रिप्टोसिस्टम को आमतौर पर शिफ्ट सिफर के रूप में जाना जाता है। अवधारणा प्रत्येक वर्णमाला को दूसरे वर्णमाला स

  1. AVL ट्री को लागू करने के लिए C++ प्रोग्राम

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

  1. C++ प्रोग्राम टर्नरी ट्री को लागू करने के लिए

    टर्नरी ट्री, एक ट्री डेटा संरचना है जिसमें प्रत्येक नोड में अधिकतम तीन चाइल्ड नोड्स होते हैं, जिन्हें आमतौर पर बाएं, मध्य और दाएं के रूप में दर्शाया जाता है। इस पेड़ में, बच्चों के साथ नोड पैरेंट नोड होते हैं, और चाइल्ड नोड्स में उनके माता-पिता के संदर्भ हो सकते हैं। यह टर्नरी ट्री और ट्री के ट्रैवर