2010-10-14 20 views
5

मैं द्विआधारी खोज वृक्ष पढ़ रहा था और सोच रहा था कि क्यों हम सब पर BST की ज़रूरत है? जहां तक ​​मुझे पता है कि सभी चीजें सरल सॉर्ट किए गए सरणी का उपयोग करके भी प्राप्त की जा सकती हैं। उदा - आदेश में एक BST n तत्वों के होने का निर्माण करने के लिए, हम n*O(log n) समय अर्थात O(nlog n) और देखने समय की आवश्यकता है O(log n) है। लेकिन यह चीज सरणी का उपयोग करके भी हासिल की जा सकती है। हम एक क्रमबद्ध सरणी हो सकता है (O(nlog n) समय की आवश्यकता है), और कहा कि में देखने का समय भी O(log n) अर्थात द्विआधारी खोज algo है। तो हमें एक और डेटा संरचना की आवश्यकता क्यों है? क्या बीएसटी का कोई अन्य उपयोग/आवेदन है जो उन्हें इतना खास बनाता है?बाइनरी खोज पेड़ क्यों?

--Ravi

+2

सरणी संस्करण से डालने/निकालने की दक्षता क्या है? यदि इसमें सरणी के सभी अन्य तत्वों को स्थानांतरित करना शामिल है, तो यह महंगा हो सकता है। –

+1

ठीक है ...नए/मौजूदा तत्व की सही स्थिति को ढूंढना अभी भी ओ (लॉग एन) होगा, लेकिन हाँ स्थानांतरण एक समस्या होगी ... लेकिन सिर्फ यह .... .... मैंने पढ़े गए पाठों के अनुसार, ऐसा लगता है कि वे (बीएसटी) बहुत खास हैं? मैं उन चीजों के बारे में और जानना चाहता हूं जो उन्हें इतना खास बनाते हैं। –

+0

[द्विआधारी खोज बनाम बाइनरी खोज पेड़] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/5968937/binary-search-vs-binary-search-tree) – nawfal

उत्तर

8

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

इसके बारे में लगता है कि तुम करोगी सरणियों बनाम जुड़ा हुआ सूचियों के बीच प्रविष्टि में अंतर। यह एक oversimplification है, लेकिन यह ऊपर उल्लेख किया गया लाभ के एक पहलू पर प्रकाश डाला गया है।

4

कैसे क्रमबद्ध प्रविष्टि समय के बारे में?

+0

ठीक है ... नए तत्व की सही स्थिति को ढूंढना अभी भी ओ (लॉग एन) होगा, लेकिन हाँ स्थानांतरण एक समस्या होगी ... लेकिन बस यह .... .... मैंने पढ़े गए ग्रंथों के अनुसार, ऐसा लगता है कि वे (बीएसटी) बहुत खास हैं? मैं उन चीजों के बारे में और जानना चाहता हूं जो उन्हें इतना खास बनाते हैं। –

+1

मुझे लगता है कि अन्य उत्तरों आपकी मदद कर सकते हैं। याद रखने की एक और बात यह है कि बीएसटी परम डेटा संरचना नहीं है, बल्कि अधिक जटिल और अधिक कुशल संरचनाओं के लिए बुनियादी नींव बनाती है, जो उनकी लोकप्रियता बताती है। उदाहरण के लिए आप जानते होंगे कि बीएसटी खोजना सबसे बुरी स्थिति में रैखिक है; उस समस्या का जवाब एवीएल पेड़ हैं। आपके पास लाल-काले पेड़, 2-3-4-पेड़, प्रत्यय/उपसर्ग पेड़ और डीएडब्ल्यूजी भी हैं, और इसी तरह, जो सभी अलग-अलग तरीकों से बीएसटी को सामान्यीकृत करते हैं, और कुशल एल्गोरिदम उत्पन्न करते हैं जो सरणी के साथ हमारी पहुंच से बाहर होंगे। –

1

ग्राफिक्स प्रोग्रामिंग में यदि आपने ऑब्जेक्ट बढ़ाया है (यानी प्रत्येक आयाम में अंतराल का प्रतिनिधित्व करता है और न केवल एक बिंदु) तो आप उन्हें एक बाइनरी पेड़ (आमतौर पर एक ऑक्टेट) के छोटे स्तर पर जोड़ सकते हैं जहां वे पूरी तरह से फिट होते हैं।

और पेड़/sortedlist हे (एन) एक सूची में यादृच्छिक प्रविष्टि समय निषेधात्मक धीमी हो सकती है अगर तुम नहीं है पूर्व की गणना। दूसरी ओर एक पेड़ में सम्मिलन समय केवल ओ (लॉग (एन)) है।

7

कल्पना कीजिए कि आप एक लाख तत्वों के साथ एक सरणी है।

आप स्थान 5.

तो तुम सरणी के अंत में सम्मिलित करने और उसके बाद प्रकार पर एक तत्व सम्मिलित करना चाहते हैं।

मान लीजिए कि सरणी भरा है दो; वह ओ (nlog n) है, जो 1,000,000 * 6 = 6,000,000 संचालन है।

कल्पना कीजिए कि आप एक संतुलित पेड़ है।

हे (लॉग एन), के साथ साथ संतुलन के लिए एक सा = 6 + एक सा यही कारण है, यह 10 आपरेशन कहते हैं।

तो, तुम सिर्फ 6,000,000 अपने सरणी छँटाई ऑप्स खर्च किया है। फिर आप उस तत्व को खोजना चाहते हैं। आप क्या करते हैं? बाइनरी खोज - ओ (लॉग एन) - जो बिल्कुल जैसा है जब आप पेड़ में खोज करते हैं तो आप क्या करेंगे!

अब कल्पना करें कि आप आवंटित करना चाहते हैं- अन्य तत्व।

आपकी सरणी पूरी है! आप क्या करते हैं? एन अतिरिक्त तत्वों के साथ सरणी आवंटित करें और बहुत यादगार? आप वास्तव में 4mbytes memcpy करना चाहते हैं?

एक पेड़ में, आप बस एक और तत्व जोड़ें ...

संबंधित मुद्दे