B पेड़ और B + पेड़ों में क्या अंतर है?


293

एक बी-ट्री में आप आंतरिक और पत्ती नोड्स में कुंजी और डेटा दोनों को स्टोर कर सकते हैं , लेकिन बी + ट्री में आपको डेटा केवल पत्ती नोड्स में संग्रहीत करना होगा ।

क्या बी + ट्री में उपरोक्त कार्य करने का कोई फायदा है?

हर जगह ख + पेड़ों के बजाय बी-पेड़ों का उपयोग क्यों नहीं किया जाए, क्योंकि सहज रूप से वे बहुत तेज लगते हैं?

मेरा मतलब है, आपको बी (पेड़) में कुंजी (डेटा) को दोहराने की आवश्यकता क्यों है?


37
मुझे लगता है कि वे क्या कह रहे हैं "बी-ट्री" बनाम बी + -ट्री। उनका मतलब हाइफ़न है, माइनस साइन नहीं।
स्टू

जवाबों:


421

नीचे दी गई छवि B + पेड़ों और B पेड़ों के बीच अंतर दिखाने में मदद करती है।

बी + पेड़ों के लाभ:

  • क्योंकि B + पेड़ों में आंतरिक नोड्स से जुड़ा डेटा नहीं है, इसलिए अधिक कुंजी मेमोरी के एक पृष्ठ पर फिट हो सकती हैं। इसलिए, इसे पत्ती नोड पर मौजूद डेटा तक पहुंचने के लिए कम कैश मिस की आवश्यकता होगी।
  • बी + पेड़ों के पत्ती नोड्स जुड़े हुए हैं, इसलिए एक पेड़ में सभी वस्तुओं का पूर्ण स्कैन करने के लिए सभी पत्ती नोड्स के माध्यम से सिर्फ एक रैखिक पास की आवश्यकता होती है। दूसरी ओर, एबी ट्री को पेड़ में हर स्तर के एक ट्रावेल की आवश्यकता होगी। इस पूर्ण-वृक्ष ट्रैवर्सल में संभवतः B + पत्तियों के रैखिक ट्रैवर्सल की तुलना में अधिक कैश मिसेज़ शामिल होंगे।

बी पेड़ों का लाभ:

  • क्योंकि बी ट्री में प्रत्येक कुंजी के साथ डेटा होता है, अक्सर एक्सेस किए गए नोड्स रूट के करीब झूठ बोल सकते हैं, और इसलिए इसे अधिक तेज़ी से एक्सेस किया जा सकता है।

बी और बी + पेड़


2
पत्ती नोड में प्रविष्टियों की संख्या पर उनकी कोई अड़चन है ??
TLE

38
@ अच्छा सवाल! हाँ। एक हार्ड ड्राइव एक समय में कम से कम स्मृति पृष्ठ तक पहुंचता है, इसलिए हम सभी बिंदुओं को स्मृति के एक पृष्ठ में फिट करना चाहते हैं। हमें प्रति पत्ते के उपयोग के लिए केवल एक डिस्क की आवश्यकता होती है, इसलिए हम एक पृष्ठ के आकार से अधिक पत्ती को निर्दिष्ट नहीं करना चाहते हैं। यदि हम एक पृष्ठ आकार के बिंदुओं के साथ एक पत्ता भरते हैं, और फिर हम इस पत्ते में एक और सूचक जोड़ना चाहते हैं, तो हम इस नोड के दो बच्चे बनाते हैं, और प्रत्येक नए बच्चे को पत्ती के आधे हिस्से को देते हैं। बेशक, पेड़ की ऊंचाई न्यूनतम रखने के लिए कुछ फेरबदल हो सकता है। क्या यह मदद करता है?
रोज़ पेरेन

बी-ट्री के प्रत्येक लीफ नोड के अंतिम पॉइंटर को अगले लीफ नोड की ओर इंगित करना चाहिए, है ना?
कैमिनो

8
तो इस तरह के एक पुराने धागे को उछालने के लिए खेद है, लेकिन @ बेबीबर्गर की टिप्पणी के बारे में कि कैमिनो की टिप्पणी कैसे सही थी, वास्तव में सही नहीं है; एक बी-ट्री, वास्तव में, पत्ती नोड्स से जुड़ा नहीं है। अ ब +, निश्चित।
जेसन

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

113

बी पेड़ों पर बी + पेड़ों का प्रमुख लाभ यह है कि वे आपको डेटा को पॉइंटर्स को हटाकर अन्य नोड्स में पैक करने की अनुमति देते हैं, इस प्रकार फैनआउट बढ़ जाता है और संभवतः पेड़ की गहराई कम हो जाती है।

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


1
मैं जेफ के जवाब को पसंद करता हूं, क्योंकि यह पूर्ण स्कैन करते समय दक्षता में अंतर पर जोर देता है।
रोज़ पेरोन

मैं वास्तव में उलझन में हूं क्योंकि एक इन-ऑर्डर ट्रैवर्सल का उपयोग करके बी-ट्री को ट्रेस करना ओ (एन) समय में क्रमबद्ध क्रम में सभी मूल्यों को पढ़ेगा। यदि भौतिक पृष्ठ आकार के लिए प्रत्येक ट्री नोड को आकार दिया जाता है, तो ऐसा लगता है कि चीजें किसी भी अधिक इष्टतम नहीं हैं। इसके विपरीत, ख + वृक्ष में पहले (सबसे छोटे) मान को प्राप्त करने की लागत हे (लॉग एन) और फिर प्रत्येक पत्ती के माध्यम से चलने के लिए ओ (एन) है, इसलिए कुल लागत हे (लॉग एन + एन) है। यह अधिक काम है और अधिक डिस्क पढ़ता है जो समझ में आता है क्योंकि पेड़ में यह सब अतिरिक्त डेटा है। मुझे नहीं मिला।
एरिक

उपरोक्त वाक्य में word फैनआउट ’के लिए यह एक और शब्द क्या होगा?
जॉर्ज बुकरन

3
@JorgeBucaran fanout = किनारों की संख्या एक नोड से बाहर आ रही है
बेंटमैन

33

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

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


1
क्या आप इस बात से सहमत होंगे कि एक बी + ट्री का इस्तेमाल उन स्थितियों के लिए किया जाएगा जिनमें डेटा के सभी क्रमों में एक क्रमिक रीडिंग हो सकती है। जबकि बी ट्री रैंडम एक्सेस स्थितियों के लिए आदर्श होगा?
JDPeckham 21

31
  1. एक बी ट्री सर्च कुंजी और डेटा को आंतरिक या पत्ती नोड्स में संग्रहीत किया जाता है। लेकिन एक बी में -tree डेटा केवल पत्ती नोड्स में संग्रहीत किया जाता है।
  2. B + ट्री का पूर्ण स्कैन बहुत आसान है क्योंकि सभी डेटा लीफ नोड्स में पाए जाते हैं। बी ट्री के पूर्ण स्कैन के लिए पूर्ण ट्रैवर्सल की आवश्यकता होती है।
  3. बी ट्री में, डेटा पत्ती नोड्स या आंतरिक नोड्स में पाया जा सकता है। आंतरिक नोड्स का विचलन बहुत जटिल है। B + ट्री में, डेटा केवल लीफ नोड्स में पाया जाता है। पत्ती नोड्स का विलोपन आसान है।
  4. B वृक्ष में सम्मिलन B + वृक्ष की तुलना में अधिक जटिल है।
  5. बी + ट्री बेमानी खोज कुंजी संग्रहीत करते हैं लेकिन बी ट्री का कोई अनावश्यक मूल्य नहीं है।
  6. B + ट्री में, पत्ती नोड डेटा को क्रमिक लिंक्ड सूची के रूप में ऑर्डर किया जाता है लेकिन B ट्री में लीफ नोड को लिंक की गई सूची का उपयोग करके संग्रहीत नहीं किया जा सकता है। कई डेटाबेस सिस्टम के कार्यान्वयन बी + ट्री की संरचनात्मक सादगी पसंद करते हैं।

15

डेटाबेस सिस्टम अवधारणाओं 5 से उदाहरण

बी + पेड़ B + ट्री

संबंधित बी पेड़ BTREE


5
मुझे नहीं लगता कि बी-ट्री में नोड के बच्चों के लिए लिंक हैं। उदाहरण के लिए फार्म Clearview bucketकरने के लिए Mianus Bucket। ऐसा करने का कोई मतलब नहीं होगा, वैसे भी क्योंकि आप दोनों के बीच Downtown bucketउस घटना को बहुत अधिक खोजा जाएगा , जिसे आप बी-ट्री में इंडेक्स स्कैन करना चाहते हैं (बैकट्रैकिंग की आवश्यकता होती है)। तुम्हें यह कहाँ मिला?
इवान कैरोल

1
@ EvanCarroll डेटाबेस सिस्टम अवधारणाओं 5 वीं, शायद आपको लेखक के साथ पुष्टि करने की आवश्यकता है :)
कैमिनो

11

"बहुत तेज" परिभाषित करें। समान रूप से वे उसी के बारे में हैं। अंतर यह है कि वे द्वितीयक भंडारण का उपयोग कैसे करते हैं। बी-ट्री और बी + ट्री पर विकिपीडिया के लेख काफी भरोसेमंद लगते हैं।


2
मैं चार्ली से सहमत हूं। चूंकि बी-ट्री का एक नोड एक माध्यमिक मेमोरी पेज या ब्लॉक का प्रतिनिधित्व करता है, इसलिए एक नोड से दूसरे में जाने के लिए पृष्ठ-परिवर्तन के समय की आवश्यकता होती है।

11

एडेगोक ए, अमित

मुझे लगता है कि एक महत्वपूर्ण बिंदु आप लोगों को याद कर रहे हैं डेटा और संकेत के बीच अंतर है जैसा कि इस खंड में समझाया गया है।

सूचक: सूचक अन्य नोड्स के लिए।

डेटा: - डेटाबेस इंडेक्स के संदर्भ में, डेटा वास्तविक डेटा (पंक्ति) के लिए सिर्फ एक और सूचक है जो कहीं और निवास करता है।

इसलिए बी ट्री के मामले में प्रत्येक नोड में तीन सूचना कुंजियाँ होती हैं, जो कीज़ और पॉइंटर से जुड़े डेटा से लेकर चाइल्ड नोड तक होती हैं।

बी + ट्री आंतरिक नोड में कुंजी और बिंदुओं को बाल नोड में रखते हैं जबकि लीफ नोड संबद्ध डेटा को कुंजी और संकेत देते हैं। यह किसी दिए गए आकार के नोड की अधिक संख्या की अनुमति देता है। नोड का आकार मुख्य रूप से ब्लॉक आकार से निर्धारित होता है।

प्रति नोड अधिक कुंजी होने का लाभ ऊपर अच्छी तरह से समझाया गया है ताकि मैं अपने टाइपिंग प्रयास को बचा सकूं।


10

B + पेड़ विशेष रूप से ब्लॉक-आधारित स्टोरेज (जैसे: हार्ड डिस्क) में अच्छे हैं। इसे ध्यान में रखते हुए, आपको कई फायदे मिलते हैं, उदाहरण के लिए (मेरे सिर के ऊपर से):

  • उच्च धूमधाम / कम गहराई: इसका मतलब है कि आपको डेटा प्राप्त करने के लिए कम ब्लॉक प्राप्त करने होंगे। संकेत के साथ परस्पर जुड़े डेटा के साथ, प्रत्येक रीड को कम पॉइंटर्स मिलते हैं, इसलिए आपको डेटा प्राप्त करने के लिए अधिक जानकारी की आवश्यकता होती है

  • सरल और सुसंगत ब्लॉक स्टोरेज: एक आंतरिक नोड में एन पॉइंटर्स होते हैं, और कुछ नहीं, एक लीफ नोड में डेटा होता है, और कुछ नहीं। इससे पार्स, डिबग और यहां तक ​​कि पुनर्निर्माण करना आसान हो जाता है।

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


2
ज्यादातर इन-मेमोरी पेड़ों के लिए; लेकिन अन्य लोकप्रिय विकल्प हैं, जैसे लाल-काले पेड़, छोड़ें सूचियां और ऐसे।
जेवियर

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

आपके पहले बिंदु को "अधिक खोज" के बजाय "कम लाइक्स" नहीं कहना चाहिए। छोटी गहराई -> कम तलाश
जेसी

1
@ जेजे: हाई फैनआउट => कम गहराई => कम तलाश, लेकिन डेटा और पॉइंटर्स को मिलाने का मतलब कम पॉइंटर्स => कम फैनआउट => अधिक गहराई => अधिक तलाश
जेवियर

1
@ आडोगोका: एक बी + वृक्ष में दो प्रकार के नोड होते हैं: केवल कुंजी और संकेत के साथ आंतरिक नोड, कोई डेटा नहीं; और डेटा और कोई संकेत के साथ पत्ती नोड्स। जो प्रत्येक आंतरिक नोड पर अधिकतम कुंजियों की संख्या के लिए अनुमति देता है। यदि आप एक आंतरिक नोड पर डेटा संग्रहीत करते हैं, तो आप कम पॉइंटर्स फिट कर सकते हैं और आपका पेड़ लंबा हो जाता है।
जेवियर

5

बी + ट्री में, चूंकि केवल नोडर्स आंतरिक नोड्स में संग्रहीत होते हैं, इसलिए उनका आकार बी ट्री के आंतरिक नोड्स (जो डेटा + कुंजी दोनों को संग्रहीत करता है) की तुलना में काफी छोटा हो जाता है। इसलिए, बी + ट्री के इंडेक्स को एक ही डिस्क रीड में बाहरी स्टोरेज से प्राप्त किया जा सकता है, जो लक्ष्य का स्थान खोजने के लिए संसाधित होता है। यदि यह एक बी ट्री है, तो प्रत्येक निर्णय लेने की प्रक्रिया के लिए एक डिस्क रीड की आवश्यकता होती है। आशा है कि मैंने अपनी बात स्पष्ट कर दी है! :)


4

**

बी-ट्री की बड़ी खामी क्रमिक रूप से कुंजियों को ट्रेस करने की कठिनाई है। बी + ट्री, बी-ट्री की तीव्र यादृच्छिक अभिगम संपत्ति को बरकरार रखता है, जबकि तीव्र अनुक्रमिक पहुंच की अनुमति भी देता है

** रेफरी: C // लेखक का उपयोग करके डेटा संरचनाएं: Aaro M Tenenbaum

http://books.google.co.in/books?id=X0Cd1Pr2W0gC&pg=PA456&lpg=PA456&dq=drawback+of+B-Tree+is+the+difficulty+of+Traversing+the+keys+sequentially&source=bl&ots=pGcPQSEJMS&sig= F9MY7zEXYAMVKl_Sg4W-0LTRor8 & hl = hi & सा = एक्स और Ei = nD5AUbeeH4zwrQe12oCYAQ और वेद = 0CDsQ6AEwAg # v = onepage & q = खामी% 20of% 20B-ट्री% 20is% 20the% 20difficulty% 20of% 20Traversing% 20the% 20keys% 20sequentially & f = झूठी


1
यह सही उत्तर होना चाहिए था। संक्षेप में: संदर्भ की स्थानीयता।
थियोडोर जियोग्रॉएस

2

एक उदाहरण लें - आपके पास प्रति पंक्ति विशाल डेटा के साथ एक तालिका है। इसका मतलब है कि वस्तु का हर उदाहरण बड़ा है।

यदि आप यहां बी ट्री का उपयोग करते हैं तो अधिकांश समय डेटा के साथ पृष्ठों को स्कैन करने में व्यतीत होता है - जिसका कोई फायदा नहीं है। डेटाबेस में जो ऑब्जेक्ट डेटा को स्कैन करने से बचने के लिए B + Trees का उपयोग करने का कारण है।

B + पेड़ डेटा से अलग कुंजी।

लेकिन अगर आपके डेटा का आकार कम है, तो आप उन्हें कुंजी के साथ स्टोर कर सकते हैं जो बी ट्री करता है।


1
"यदि आप यहां बी ट्री का उपयोग करते हैं तो अधिकांश समय डेटा के साथ पृष्ठों को स्कैन करने में बिताया जाता है" - आवश्यक नहीं है। बी-ट्री नोड्स डिस्क पर डेटा के लिए केवल "पॉइंटर्स" रख सकते हैं, स्वयं डेटा नहीं।
TT_

2

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


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

1

एक B + पेड़ एक संतुलित पेड़ है जिसमें पेड़ की जड़ से पत्ती तक का हर रास्ता एक ही लंबाई का होता है, और पेड़ के प्रत्येक नॉनफ़ल नोड में [n / 2] और [n] बच्चे होते हैं, जहाँ n होता है एक विशेष पेड़ के लिए तय किया गया। इसमें इंडेक्स पेज और डेटा पेज शामिल हैं। बाइनरी पेड़ों में प्रति पेरेंट नोड में केवल दो बच्चे होते हैं, बी + ट्री में प्रत्येक पेरेंट नोड के लिए बच्चों की एक परिवर्तनीय संख्या हो सकती है


1
स्पष्टता के लिए, B वृक्ष बाइनरी ट्री नहीं हैं। वास्तव में, बी पेड़ और बी + पेड़ बाइनरी पेड़ों की तुलना में निर्माण और उपयोग में एक दूसरे के करीब हैं। विकी लेख परिभाषाएँ साफ करने में मदद कर सकते हैं - B + ट्री , B ट्री और बाइनरी ट्री
uutsav

1

बी + पेड़ों का एक संभावित उपयोग यह है कि यह उन परिस्थितियों के लिए उपयुक्त है जहां पेड़ इतना बड़ा हो जाता है कि यह उपलब्ध स्मृति में फिट नहीं होता है। इस प्रकार, आप आमतौर पर एकाधिक I / O करने की अपेक्षा करेंगे।
अक्सर ऐसा होता है कि B + ट्री का उपयोग तब भी किया जाता है जब यह वास्तव में मेमोरी में फिट हो जाता है, और तब आपका कैश मैनेजर इसे स्थायी रूप से रख सकता है। लेकिन यह एक विशेष मामला है, सामान्य एक नहीं है, और कैशिंग नीति B + ट्री रखरखाव से अलग है।

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


यह इस सवाल के जवाब में है कि हमें हर जगह B + के पेड़ों के बजाय B- पेड़ों का उपयोग क्यों नहीं करना चाहिए :)
stack programmer

3
लेकिन आपने केवल एक पक्ष का वर्णन किया है, जहां तक ​​हम जानते हैं, आपके उत्तर के साथ बी-पेड़ ठीक उसी तरह कार्य कर सकते हैं। ओपी ने मतभेदों को समझाने के लिए कहा और आपने केवल एक के बारे में बात की और दूसरे से नहीं। आपके पास एक सर्कल के साथ एक वेन आरेख नहीं हो सकता है!
मालफिस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.