प्रत्यय वृक्ष और त्रीस। अंतर क्या है?


81

मैं Triesआमतौर पर प्रीफिक्स पेड़ों के रूप में जाना जाता है और के बारे में पढ़ रहा हूं Suffix Trees
हालाँकि मुझे एक TrieI के लिए कोड मिल गया है लेकिन मुझे इसके लिए एक उदाहरण नहीं मिल रहा है Suffix Tree। इसके अलावा, मुझे यह महसूस होता है कि कोड जो बनाता है Trieवह Suffix Treeकेवल एक अंतर के साथ एक ही है कि पूर्व मामले में हम उपसर्गों को संग्रहीत करते हैं लेकिन बाद के प्रत्ययों में।
क्या ये सच है? किसी को भी मेरे सिर में यह स्पष्ट करने में मेरी मदद कर सकते हैं? एक उदाहरण कोड से बहुत मदद मिलेगी!


1
TL; DR एक स्ट्रिंग का प्रत्यय ट्री इसके सभी प्रत्ययों का एक पेट्रीसिया तिकड़ी है। इसके बारे में केवल विशेष बात यह है कि बढ़त लेबल मूल स्ट्रिंग के सबस्ट्रिंग हैं, इसलिए उन्हें सूचकांक की एक जोड़ी के रूप में दर्शाया जा सकता है और केवल निरंतर स्थान ले सकता है। यह भी है कि यह रैखिक समय में क्यों बनाया जा सकता है।
निकल्स बी।

जवाबों:


66

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

banana
anana
nana
ana
na
a

एक बार ऐसा करने के बाद आप किसी भी एन-ग्राम को खोज सकते हैं और देख सकते हैं कि क्या यह आपके अनुक्रमित स्ट्रिंग में मौजूद है। दूसरे शब्दों में, n- ग्राम खोज आपकी स्ट्रिंग के सभी संभावित प्रत्ययों की एक उपसर्ग खोज है।

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

यह उत्तर इस डेटा-संरचना के एक प्रकार की व्याख्या करते हुए एक अद्भुत काम करता है।


यह मुझे संदेह है। तीनों का उपयोग प्रत्यय के पेड़ के निर्माण के लिए किया जाता है और यही कारण है कि अधिकांश पाठ्यपुस्तक केवल कोशिशों के लिए कोड प्रदान करती हैं। लेकिन यह सबसे खराब मामला है?
क्रेटाइलस

@ कैरेटाइलस सफ़िक्स के पेड़ बहुत बड़े तारों पर सबसे उपयोगी होते हैं (जैसे शेक्सपियर के सभी कार्यों को अनुक्रमणित करना) जहां ओ (n ^ 2) स्थान और निर्माण समय बस इसे काटने के लिए नहीं जा रहा है। सौभाग्य से, उन सीमाओं को काफी कम किया जा सकता है।
ज़ी ब्लॉब

8

यदि आप एक त्रि की कल्पना करते हैं जिसमें आप कुछ शब्द प्रत्यय लगाते हैं, तो आप इसे स्ट्रिंग के सबस्ट्रिंग के लिए बहुत आसानी से क्वेरी कर पाएंगे। प्रत्यय के पेड़ के पीछे यह मुख्य विचार है, यह मूल रूप से एक "प्रत्यय ट्राइ" है।

लेकिन इस भोले दृष्टिकोण का उपयोग करते हुए, आकार के एक स्ट्रिंग के लिए इस पेड़ का निर्माण ओ होगा (एन ^ 2) और स्मृति का एक बहुत ले लो।

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


2
तो आप कह रहे हैं कि प्रत्यय के पेड़ और प्रत्यय की कोशिशें समान हैं?
बैटमैन

1

अंतर बहुत सरल है। प्रत्यय ट्री की तुलना में "डमी" नोड्स कम होता है। ये डमी नोड्स एकल वर्ण हैं जो पेड़ पर लुकअप ऑपरेशन को बढ़ाते हैं


0

ट्राइ के नोड्स में छोटे संदर्भ के लिंक हैं, 'ट्री' में यह नहीं है। यदि ट्री के नोड्स को छोटे संदर्भ से लिंक मिलता है तो यह Trie; o) में बदल जाता है

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