सर्च ट्री: Difference between revisions
m (Abhishek moved page वृक्ष खोजें to सर्च ट्री without leaving a redirect) |
No edit summary |
||
| Line 1: | Line 1: | ||
{{Short description|Data structure in tree form sorted for fast lookup}} | {{Short description|Data structure in tree form sorted for fast lookup}} | ||
{{Distinguish| | {{Distinguish|सर्च ट्री}} | ||
[[Index.php?title=अभिकलित्र विज्ञान|अभिकलित्र विज्ञान]] में, एक ''' | [[Index.php?title=अभिकलित्र विज्ञान|अभिकलित्र विज्ञान]] में, एक '''सर्च ट्री''' एक [[Index.php?title=वृक्ष आँकड़ा संरचना|ट्री आँकड़ा संरचना]] है जिसका उपयोग एक सेट के भीतर से विशिष्ट कुंजियों का पता लगाने के लिए किया जाता है। किसी ट्री को सर्च ट्री के रूप में कार्य करने के लिए, प्रत्येक ग्रंथिकि की कुंजी बाईं ओर के उप-ट्रीों में किसी भी कुंजी से बड़ी होनी चाहिए, और दाईं ओर उप-ट्रीों में किसी भी कुंजी से कम होनी चाहिए।<ref>Black, Paul and Pieterse, Vreda (2005). [https://xlinux.nist.gov/dads/HTML/searchtree.html "search tree"]. [http://xlinux.nist.gov/dads// Dictionary of Algorithms and Data Structures]</ref> | ||
सर्च ट्रीों का लाभ उनका कुशल खोज समय है, क्योंकि ट्री यथोचित रूप से संतुलित है, जिसका अर्थ है कि ट्री आंकड़ा संरचना # दोनों छोर पर ट्रीों में उपयोग की जाने वाली शब्दावली तुलनीय गहराई की हैं। विभिन्न खोज-ट्री आंकड़ा संरचनाएं मौजूद हैं, जिनमें से कई तत्वों को कुशल रूप से सम्मिलित करने और हटाने की भी अनुमति देती हैं, जिसके संचालन के लिए ट्री संतुलन बनाए रखना होता है। | |||
सर्च ट्रीों का उपयोग अक्सर सहयोगी सरणी को लागू करने के लिए किया जाता है। सर्च ट्री कलनविधि किसी स्थान को ढूंढने के लिए विशेषता कुंजी-मूल्य जोड़ी से कुंजी का उपयोग करता है, और फिर अनुप्रयोग उस विशेष स्थान पर संपूर्ण कुंजी-मूल्य जोड़ी को संग्रहीत करता है। | |||
== | ==ट्री के प्रकार== | ||
[[File:Binary search tree.svg|thumb|alt=Binary search tree|द्विआधारी | [[File:Binary search tree.svg|thumb|alt=Binary search tree|द्विआधारी सर्च ट्री]] | ||
===द्विआधारी ''' | ===द्विआधारी '''सर्च ट्री'''=== | ||
{{Main|द्विआधारी | {{Main|द्विआधारी सर्च ट्री}} | ||
द्विआधारी | द्विआधारी सर्च ट्री एक ग्रंथिकि-आधारित आंकड़ा संरचना है जहां प्रत्येक ग्रंथिकि में एक कुंजी और दो उपट्री, बाएँ और दाएँ होते हैं। सभी ग्रंथिकि के लिए, बाएं उपट्री की कुंजी ग्रंथिकि की कुंजी से कम होनी चाहिए, और दाएं उपट्री की कुंजी ग्रंथिकि की कुंजी से बड़ी होनी चाहिए। इन सभी उपट्रीों को द्विआधारी सर्च ट्रीों के रूप में योग्य होना चाहिए। | ||
द्विआधारी | द्विआधारी सर्च ट्री को खोजने के लिए सबसे खराब स्थिति वाली समय जटिलता ट्रीों में प्रयुक्त ट्री (आंकड़ा संरचना)#शब्दावली है, जो एन तत्वों वाले ट्री के लिए ओ (लॉग एन) जितनी छोटी हो सकती है। | ||
===बी- | ===बी-ट्री=== | ||
{{Main|बी- | {{Main|बी-ट्री}} | ||
बी- | बी-ट्री द्विआधारी सर्च ट्री का सामान्यीकरण है जिसमें प्रत्येक ग्रंथिकि पर उपट्री की एक चर संख्या हो सकती है। जबकि अपत्य-ग्रंथिकि की एक पूर्व-निर्धारित सीमा होती है, वे आवश्यक रूप से आंकड़ा से भरे नहीं होंगे, जिसका अर्थ है कि बी-ट्री संभावित रूप से कुछ स्थान बर्बाद कर सकते हैं। फायदा यह है कि बी-ट्री को अन्य [[ स्व-संतुलन द्विआधारी खोज वृक्ष | स्व-संतुलन द्विआधारी सर्च ट्री]] की तरह बार-बार पुन: संतुलित करने की आवश्यकता नहीं होती है। | ||
उनकी ग्रंथिकि लंबाई की परिवर्तनशील सीमा के कारण, बी- | उनकी ग्रंथिकि लंबाई की परिवर्तनशील सीमा के कारण, बी-ट्री को उन प्रणालियों के लिए अनुकूलित किया जाता है जो आंकड़े के बड़े ब्लॉक को पढ़ते हैं, इनका उपयोग आमतौर पर आंकड़ाबेस में भी किया जाता है। | ||
बी- | बी-ट्री खोजने के लिए समय जटिलता ओ(लॉग एन) है। | ||
===(ए,बी)- | ===(ए,बी)-ट्री=== | ||
{{Main|(ए,बी)- | {{Main|(ए,बी)-ट्री}} | ||
एक (ए,बी)- | एक (ए,बी)-ट्री एक सर्च ट्री है जिसकी सभी पत्तियाँ समान गहराई की होती हैं। प्रत्येक ग्रंथिकि में कम से कम एक बच्चे और अधिकतम बी बच्चे होते हैं, जबकि रूट में कम से कम 2 बच्चे और अधिकतम बी बच्चे होते हैं। | ||
ए और बी को निम्नलिखित सूत्र से तय किया जा सकता है:<ref>Toal, Ray. [http://cs.lmu.edu/~ray/notes/abtrees/ "(a,b) Trees"]</ref> | ए और बी को निम्नलिखित सूत्र से तय किया जा सकता है:<ref>Toal, Ray. [http://cs.lmu.edu/~ray/notes/abtrees/ "(a,b) Trees"]</ref> | ||
<math>2 \le a \le \frac{(b+1)}{2}</math> | <math>2 \le a \le \frac{(b+1)}{2}</math> | ||
(ए,बी)- | (ए,बी)-ट्री को खोजने के लिए समय जटिलता ओ(लॉग एन) है। | ||
===त्रयी | ===त्रयी सर्च ट्री=== | ||
{{Main|त्रयी | {{Main|त्रयी सर्च ट्री}} | ||
त्रयी | त्रयी सर्च ट्री एक प्रकार का ट्री (आंकड़ा संरचना) है जिसमें 3 ग्रंथिकि हो सकते हैं: एक निम्न बच्चा, एक समान बच्चा और एक उच्च बच्चा। प्रत्येक ग्रंथिकि एक एकल वर्ण संग्रहीत करता है और संभावित तीसरे ग्रंथिकि के अपवाद के साथ, ट्री को उसी तरह से क्रमबद्ध किया जाता है जैसे द्विआधारी सर्च ट्री होता है। | ||
त्रयी | त्रयी सर्च ट्री की खोज में यह जांचने के लिए एक [[Index.php?title=स्ट्रिंग (अभिकलित्र विज्ञान)|स्ट्रिंग (अभिकलित्र विज्ञान)]] को पार करना शामिल है कि क्या किसी पथ में यह शामिल है। | ||
एक संतुलित टर्नरी | एक संतुलित टर्नरी सर्च ट्री की खोज के लिए समय जटिलता ओ(लॉग एन) है। | ||
==कलनविधि खोजना== | ==कलनविधि खोजना== | ||
===किसी विशिष्ट कुंजी की खोज=== | ===किसी विशिष्ट कुंजी की खोज=== | ||
यह मानते हुए कि | यह मानते हुए कि ट्री का ऑर्डर दिया गया है, हम एक चाबी ले सकते हैं और उसे ट्री के भीतर ढूंढने का प्रयास कर सकते हैं। निम्नलिखित कलनविधि को द्विआधारी सर्च ट्री के लिए सामान्यीकृत किया गया है, लेकिन यही विचार अन्य प्रारूपों के ट्री पर भी लागू किया जा सकता है। | ||
====पुनरावर्ती==== | ====पुनरावर्ती==== | ||
खोsearch-recursive(key, node) | |||
'''if''' node is ''NULL'' | |||
'''return''' ''EMPTY_TREE'' | |||
'''if''' key < node.key | |||
return search-recursive(key, node.left) | |||
'''else if''' key > node.key | |||
return search-recursive(key, node.right) | |||
'''else''' | |||
'''return''' node | |||
====पुनरावृत्तीय==== | ====पुनरावृत्तीय==== | ||
searchIterative ( | searchIterative(key, node) | ||
currentNode := node | |||
'''while''' currentNode is not ''NULL'' | |||
'''if''' currentNode.key = key | |||
'''return''' currentNode | |||
'''else if''' currentNode.key > key | |||
currentNode := currentNode.left | |||
'''else''' | |||
currentNode := currentNode.right | |||
==== न्यूनतम और अधिकतम की खोज ==== | ==== न्यूनतम और अधिकतम की खोज ==== | ||
एक क्रमबद्ध | एक क्रमबद्ध ट्री में, न्यूनतम बाईं ओर के ग्रंथिकि पर स्थित होता है, जबकि अधिकतम दाईं ओर के ग्रंथिकि पर स्थित होता है।<ref>Gildea, Dan (2004). [http://www.cs.rochester.edu/~gildea/csc282/slides/C12-bst.pdf "Binary Search Tree"]</ref> | ||
====न्यूनतम==== | ====न्यूनतम==== | ||
findMinimum(node) | |||
'''if''' node is ''NULL'' | |||
'''return''' ''EMPTY_TREE'' | |||
min := node | |||
'''while''' min.left is not ''NULL'' | |||
min := min.left | |||
'''return''' min.key | |||
====अधिकतम==== | ====अधिकतम==== | ||
findMaximum(node) | |||
'''if''' node is ''NULL'' | |||
'''return''' ''EMPTY_TREE'' | |||
max := node | |||
'''while''' max.right is not ''NULL'' | |||
max := max.right | |||
'''return''' max.key | |||
==यह भी देखें== | ==यह भी देखें== | ||
* [[प्रयास करें]] | * [[प्रयास करें]] | ||
* [[ बाइनरी वृक्ष | द्विआधारी | * [[ बाइनरी वृक्ष | द्विआधारी ट्री]] | ||
* [[गहराई-पहली खोज]] | * [[गहराई-पहली खोज]] | ||
Revision as of 17:33, 17 July 2023
अभिकलित्र विज्ञान में, एक सर्च ट्री एक ट्री आँकड़ा संरचना है जिसका उपयोग एक सेट के भीतर से विशिष्ट कुंजियों का पता लगाने के लिए किया जाता है। किसी ट्री को सर्च ट्री के रूप में कार्य करने के लिए, प्रत्येक ग्रंथिकि की कुंजी बाईं ओर के उप-ट्रीों में किसी भी कुंजी से बड़ी होनी चाहिए, और दाईं ओर उप-ट्रीों में किसी भी कुंजी से कम होनी चाहिए।[1] सर्च ट्रीों का लाभ उनका कुशल खोज समय है, क्योंकि ट्री यथोचित रूप से संतुलित है, जिसका अर्थ है कि ट्री आंकड़ा संरचना # दोनों छोर पर ट्रीों में उपयोग की जाने वाली शब्दावली तुलनीय गहराई की हैं। विभिन्न खोज-ट्री आंकड़ा संरचनाएं मौजूद हैं, जिनमें से कई तत्वों को कुशल रूप से सम्मिलित करने और हटाने की भी अनुमति देती हैं, जिसके संचालन के लिए ट्री संतुलन बनाए रखना होता है।
सर्च ट्रीों का उपयोग अक्सर सहयोगी सरणी को लागू करने के लिए किया जाता है। सर्च ट्री कलनविधि किसी स्थान को ढूंढने के लिए विशेषता कुंजी-मूल्य जोड़ी से कुंजी का उपयोग करता है, और फिर अनुप्रयोग उस विशेष स्थान पर संपूर्ण कुंजी-मूल्य जोड़ी को संग्रहीत करता है।
ट्री के प्रकार
द्विआधारी सर्च ट्री
द्विआधारी सर्च ट्री एक ग्रंथिकि-आधारित आंकड़ा संरचना है जहां प्रत्येक ग्रंथिकि में एक कुंजी और दो उपट्री, बाएँ और दाएँ होते हैं। सभी ग्रंथिकि के लिए, बाएं उपट्री की कुंजी ग्रंथिकि की कुंजी से कम होनी चाहिए, और दाएं उपट्री की कुंजी ग्रंथिकि की कुंजी से बड़ी होनी चाहिए। इन सभी उपट्रीों को द्विआधारी सर्च ट्रीों के रूप में योग्य होना चाहिए।
द्विआधारी सर्च ट्री को खोजने के लिए सबसे खराब स्थिति वाली समय जटिलता ट्रीों में प्रयुक्त ट्री (आंकड़ा संरचना)#शब्दावली है, जो एन तत्वों वाले ट्री के लिए ओ (लॉग एन) जितनी छोटी हो सकती है।
बी-ट्री
बी-ट्री द्विआधारी सर्च ट्री का सामान्यीकरण है जिसमें प्रत्येक ग्रंथिकि पर उपट्री की एक चर संख्या हो सकती है। जबकि अपत्य-ग्रंथिकि की एक पूर्व-निर्धारित सीमा होती है, वे आवश्यक रूप से आंकड़ा से भरे नहीं होंगे, जिसका अर्थ है कि बी-ट्री संभावित रूप से कुछ स्थान बर्बाद कर सकते हैं। फायदा यह है कि बी-ट्री को अन्य स्व-संतुलन द्विआधारी सर्च ट्री की तरह बार-बार पुन: संतुलित करने की आवश्यकता नहीं होती है।
उनकी ग्रंथिकि लंबाई की परिवर्तनशील सीमा के कारण, बी-ट्री को उन प्रणालियों के लिए अनुकूलित किया जाता है जो आंकड़े के बड़े ब्लॉक को पढ़ते हैं, इनका उपयोग आमतौर पर आंकड़ाबेस में भी किया जाता है।
बी-ट्री खोजने के लिए समय जटिलता ओ(लॉग एन) है।
(ए,बी)-ट्री
एक (ए,बी)-ट्री एक सर्च ट्री है जिसकी सभी पत्तियाँ समान गहराई की होती हैं। प्रत्येक ग्रंथिकि में कम से कम एक बच्चे और अधिकतम बी बच्चे होते हैं, जबकि रूट में कम से कम 2 बच्चे और अधिकतम बी बच्चे होते हैं।
ए और बी को निम्नलिखित सूत्र से तय किया जा सकता है:[2]
(ए,बी)-ट्री को खोजने के लिए समय जटिलता ओ(लॉग एन) है।
त्रयी सर्च ट्री
त्रयी सर्च ट्री एक प्रकार का ट्री (आंकड़ा संरचना) है जिसमें 3 ग्रंथिकि हो सकते हैं: एक निम्न बच्चा, एक समान बच्चा और एक उच्च बच्चा। प्रत्येक ग्रंथिकि एक एकल वर्ण संग्रहीत करता है और संभावित तीसरे ग्रंथिकि के अपवाद के साथ, ट्री को उसी तरह से क्रमबद्ध किया जाता है जैसे द्विआधारी सर्च ट्री होता है।
त्रयी सर्च ट्री की खोज में यह जांचने के लिए एक स्ट्रिंग (अभिकलित्र विज्ञान) को पार करना शामिल है कि क्या किसी पथ में यह शामिल है।
एक संतुलित टर्नरी सर्च ट्री की खोज के लिए समय जटिलता ओ(लॉग एन) है।
कलनविधि खोजना
किसी विशिष्ट कुंजी की खोज
यह मानते हुए कि ट्री का ऑर्डर दिया गया है, हम एक चाबी ले सकते हैं और उसे ट्री के भीतर ढूंढने का प्रयास कर सकते हैं। निम्नलिखित कलनविधि को द्विआधारी सर्च ट्री के लिए सामान्यीकृत किया गया है, लेकिन यही विचार अन्य प्रारूपों के ट्री पर भी लागू किया जा सकता है।
पुनरावर्ती
खोsearch-recursive(key, node)
if node is NULL
return EMPTY_TREE
if key < node.key
return search-recursive(key, node.left)
else if key > node.key
return search-recursive(key, node.right)
else
return node
पुनरावृत्तीय
searchIterative(key, node)
currentNode := node
while currentNode is not NULL
if currentNode.key = key
return currentNode
else if currentNode.key > key
currentNode := currentNode.left
else
currentNode := currentNode.right
न्यूनतम और अधिकतम की खोज
एक क्रमबद्ध ट्री में, न्यूनतम बाईं ओर के ग्रंथिकि पर स्थित होता है, जबकि अधिकतम दाईं ओर के ग्रंथिकि पर स्थित होता है।[3]
न्यूनतम
findMinimum(node)
if node is NULL
return EMPTY_TREE
min := node
while min.left is not NULL
min := min.left
return min.key
अधिकतम
findMaximum(node)
if node is NULL
return EMPTY_TREE
max := node
while max.right is not NULL
max := max.right
return max.key
यह भी देखें
संदर्भ
- ↑ Black, Paul and Pieterse, Vreda (2005). "search tree". Dictionary of Algorithms and Data Structures
- ↑ Toal, Ray. "(a,b) Trees"
- ↑ Gildea, Dan (2004). "Binary Search Tree"