क्या द्विआधारी पेड़ पदानुक्रमित डेटा संग्रहीत करने में एक विशिष्ट उद्देश्य की सेवा करते हैं? उनका विहित उपयोग क्या है?


12

मैं बाइनरी पेड़ों की संरचना को समझता हूं और उन्हें कैसे पार करना है। हालांकि, मैं उनके वास्तविक उपयोगों, कार्यक्रमों और प्रोग्रामिंग में उद्देश्यों को महसूस करने के लिए संघर्ष कर रहा हूं। जब मैं पदानुक्रमित डेटा के 'वास्तविक जीवन' उदाहरणों के बारे में सोचता हूं तो उनके पास निश्चित रूप से 2 से अधिक बच्चे होते हैं। उदाहरण के लिए, एक परिवार के पेड़ में, एक माँ के पास अक्सर दो से अधिक बच्चे हो सकते हैं।

क्या 'बाइनरी ट्रीज़' केवल सरणियों और सूचियों पर तेजी से प्रसंस्करण समय के कारण रैखिक रूप से संबंधित डेटा को स्टोर करने के लिए उपयोगी होते हैं? वैकल्पिक रूप से, क्या वे पदानुक्रमित डेटा संग्रहीत करने में एक विशिष्ट उद्देश्य की सेवा करते हैं? यदि हां, तो बाइनरी पेड़ों के आवेदन के कौन से उदाहरण हैं। ऐसा कौन-सा डेटा है, जिसके नोड में अधिकतम 2 बच्चे हैं?


मुझे लगता है कि बाइनरी ट्री का मुख्य उपयोग डेटा ऑर्डर करना है। https://en.wikipedia.org/wiki/Binary_search_tree
मैनड्रिल

जवाबों:


25

नहीं, द्विआधारी पेड़ उस श्रेणीबद्ध डेटा को संग्रहीत करने के लिए नहीं हैं, जिस अर्थ में आप सोच रहे हैं। एन-एरी पेड़ों के लिए प्राथमिक उपयोग का मामला, जहां nएक निश्चित संख्या है, तेजी से खोज की क्षमता है , न कि शब्दार्थ पदानुक्रम।

पुराने खेल को याद रखें जहां एक व्यक्ति 1 और 100 के बीच की संख्या के बारे में सोचता है, और दूसरे को इसे जितना संभव हो सके उतने अनुमानों में लगाना पड़ता है, और यदि आप गलत अनुमान लगाते हैं तो संख्या के बारे में सोच रहे व्यक्ति को आपको बताना होगा कि क्या आप भी हैं उच्च या बहुत कम? यह थोड़ी देर के बाद उबाऊ हो जाता है क्योंकि आप जल्दी से पता लगाते हैं कि आपको हमेशा 50 पर शुरू करना चाहिए, फिर 25 या 75 पर जाएं, और उसके बाद प्रत्येक नए अनुमान के साथ आधे में खोजे जाने वाली सीमा को विभाजित करते रहें, और अंततः आप किसी भी संख्या का अनुमान लगा सकते हैं अधिकांश 7 अनुमानों में, गारंटी दी गई है।

यह एक मजेदार खेल के लिए नहीं बना सकता है, लेकिन वह संपत्ति जो बाइनरी (और अन्य एन-एरी) पेड़ों को उपयोगी बनाती है: आप उन्हें बहुत कम समय में सेट किए गए एक बहुत बड़े डेटा की खोज करने के लिए उपयोग कर सकते हैं।


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

1
@ sw123456: यह सही है। किसी भी इंजीनियरिंग की तरह, यह ट्रेडऑफ़्स के साथ आता है, (अधिक उपयोग करता है - और अधिक खंडित - एक ही संख्या के तत्वों के साथ एक सरणी की तुलना में, O (n) के बजाय # सेट डेटा के तत्व #n तक पहुंच (O) पहुंच, आदि) लेकिन तेजी से खोज निश्चित रूप से बाइनरी पेड़ों का प्रमुख लाभ है।
मेसन व्हीलर

@ sw123456 मुझे खुशी है कि मैं इसे समझाने में मदद कर सकता हूं :)
मेसन व्हीलर

3
पेड़ों के संतुलित होने पर तत्वों तक पहुंच O (लॉग (n)) है। ओ (एन) सबसे खराब स्थिति होगी जब इसे पतित किया जाता है (केवल एक ब्रैकेट के साथ अधिकांश नोड्स)।
मैनड्रिल

@ sw123456 नेटवर्क रूटिंग बाइनरी ट्री के एक मामूली संशोधन का उपयोग करता है जिसे ट्राइ कहा जाता है (समस्या डोमेन के लिए अधिक दक्षता के लिए बनाया गया)। यह वास्तव में पदानुक्रम की जानकारी को संग्रहीत करता है क्योंकि राउटर पेड़ को बिट-बाय-बिट करता है जब यह खोजने के लिए एक आईपी पता ढूंढता है कि इसे पैकेट को कहां अग्रेषित करना चाहिए। आईपी ​​पते भी प्रकृति पदानुक्रम द्वारा होते हैं, इसलिए सबसे लंबे समय तक उपसर्ग मैच खोजने के लिए एक आईपी ट्रैवर्सिंग में, राउटर आईपी पदानुक्रम, सबनेट आईपी आदि का पता लगा रहा है, यह स्पष्ट रूप से शब्दार्थ नहीं है, लेकिन संबंध है। राउटर लुकअप दक्षता के लिए इस संरचना का उपयोग करते हैं, जैसा कि मेसन ने उत्तर दिया था।
क्रिस साइरफाइस

3

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

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

आपका जटिल, एन-एरी ट्री एक सरल, द्विआधारी वृक्ष बन गया है।

मुझे यकीन है कि यह नुथ, वॉल्यूम में है। 1 कहीं का।


यह वास्तव में एक दिलचस्प कार्यान्वयन है। क्या मैं यह सोचने में सही हूं कि क्योंकि प्रत्येक बच्चे की नोड एक लिंक्ड सूची की शुरुआत थी, इसलिए पेड़ अब ओ (लॉग) एन नहीं होगा यदि संतुलित या ओ (एन) यदि नहीं, तो इस तथ्य के कारण कि प्रत्येक नोड का दौरा शुरू होगा। एक रैखिक खोज बंद? इस कार्यान्वयन के परिणामस्वरूप बहुत धीमे खोज समय होंगे? लेकिन उल्टा, खोज समय एक मानक रैखिक संरचना की तुलना में तेज होगा? क्या मैंने इसे सही तरीके से समझा है?
sw123456

@ sw123456, यदि मूल पेड़ संतुलित था, तो परिणामस्वरूप बाइनरी पेड़ लगभग निश्चित रूप से नहीं होगा। मेरा मानना ​​है कि बाकी सब पेड़ के बाहर लगे पंखे पर निर्भर करेगा कि किसी भी बच्चे को कितने नोड दिए गए हैं। एक रेखीय खोज केवल तब होगी जब यह पता लगाया जाए कि दिए गए नोड के बच्चों में से कौन सा पालन करना है। लेकिन मुझे यकीन नहीं है कि आप एन-एरी ट्री के किसी भी अन्य कार्यान्वयन में इससे बच सकते हैं।
जस्टाल्ट

2

द्विआधारी पेड़ उनका उपयोग क्यों करते हैं?

प्रोग्रामिंग में आप एक ही प्रकार के डेटा के संग्रह के साथ बहुत काम करते हैं।

इस डेटा को संग्रहीत करने के दो मूल तरीके हैं: लिंक की गई सूचियाँ और सरणियाँ।

वे दोनों अप और डाउनसाइड के साथ आते हैं: एक लिंक की गई सूची में किसी भी स्थिति में तत्वों को जोड़ना या तत्वों को निकालना आसान है। लेकिन एक विशिष्ट तत्व तक पहुंचना कठिन है, क्योंकि आपको उस सूची से गुजरना होगा जब तक आप अपने इच्छित तत्व पर नहीं होते।

  • यह कुशलता से खोज नहीं करता है, लेकिन सम्मिलित करना और हटाना आसान है।

सरणी के साथ एक विशिष्ट तत्व तक पहुंचना आसान है, लेकिन किसी तत्व को सम्मिलित करना या हटाना कठिन है क्योंकि डालने का मतलब है: सरणी को एक से बढ़ाना, सम्मिलित स्थिति 1 से पहले सभी तत्वों को दाईं ओर शिफ्ट करना और तत्व सम्मिलित करना।

  • यह कुशलतापूर्वक (यदि सॉर्ट किया गया) खोज करता है लेकिन सम्मिलित करना और हटाना कठिन है।

तो लिंक की गई सूची और सरणी दोनों में गिरावट है।

बाइनरी ट्री को सरणी और लिंक की गई सूची की दोनों समस्याओं से निपटने के लिए बनाया गया है:

  1. आसान डालें और हटाएँ
  2. आसान खोज

तो बाइनरी ट्री तब बनाया जाता है जब आपके पास बहुत सारे डेटा होते हैं जो नियमित रूप से बदलते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.