2010-04-22 18 views
10

ट्री और बी + पेड़ इंडेक्सिंग लेक्सिकोग्राफिकली सॉर्ट स्ट्रिंग्स [कुछ अरबों के क्रम में] के लिए तुलना कैसे करता है? इसे रेंज क्वेरीज़ का भी समर्थन करना चाहिए।ट्री बनाम बी + पेड़

perf से। साथ ही कार्यान्वयन जटिलता बिंदु दृष्टिकोण।

उत्तर

13

मैं कहूंगा कि यह रेंज द्वारा आपके मतलब पर निर्भर करता है।

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

ध्यान दें कि B+ Tree का ब्रांचिंग कारक इसके प्रदर्शन (मध्यस्थ नोड्स की संख्या) को प्रभावित करता है। यदि h पेड़ की ऊंचाई है, तो n अधिकतम ~~ बी एच। इसलिए एच ~~ लॉग (एन अधिकतम)/लॉग (बी)।

n = 1 000 000 000 और b = 100 के साथ, हमारे पास h ~~ 5 है। इसलिए इसका मतलब रूट से पत्ते तक जाने के लिए केवल 5 सूचक डीफरेंसिंग है। यह Trie से अधिक कैश-अनुकूल है।

अंत में, B+ TreeTrie से लागू करने के लिए स्वीकार्य रूप से अधिक कठिन है: यह Red-Black Tree जटिलता के स्तर पर अधिक है।

+1

यदि आप "xx और zz के बीच के सभी शब्द" की तुलना में आपके Trie कार्यान्वयन के बारे में स्मार्ट हैं तो यह मुश्किल नहीं है। यदि आप लेक्सिकोग्राफिकल ऑर्डर में किनारों को संग्रहित कर रहे हैं तो स्ट्रिंग्स लेक्सिकोोग्राफिक ऑर्डर में भी हैं। –

+0

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

+0

गलती से इसे नीचे वोट दिया, इसे ऊपर उठाना था। मैं इसे अभी वापस नहीं बदल पा रहा हूं :( –

0

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

3

अपने वास्तविक कार्य पर निर्भर करता है:

  • आप पूरे सबट्री प्राप्त करना चाहते हैं, एक बी + ट्री यह अंतरिक्ष कुशल है, क्योंकि तुम्हारा सबसे अच्छा विकल्प है।
  • लेकिन अगर आप एक substree से पहले N बच्चों पाने के लिए चाहते हैं, तो एक Trie सबसे अच्छा विकल्प है क्योंकि आप बस एक बी + ट्री परिदृश्य की तुलना में कम नोड्स की यात्रा है।
  • सबसे लोकप्रिय कार्य जो द्वारा अच्छी तरह से संभाला जाता है Trieशब्द उपसर्ग पूर्णता है।
+0

मैं कोशिश कर रहा प्रयासों की कुछ भिन्नताएं बीटीआर की तुलना में केवल अधिक अंतरिक्ष-कुशल नहीं हैं, बल्कि अधिकांश प्रश्नों (प्रत्यक्ष पहुंच, शब्द पूर्णता, सीमा क्वेरी) के लिए भी तेज़ हैं। –

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