त्रिक और मूलांक तीनों डेटा संरचनाओं के बीच अंतर क्या है?


96

क्या त्रिक और मूलांक तीनों डेटा संरचना एक ही बात है?

यदि वे समान हैं, तो मूलांक तीन (AKA Patricia trie) का क्या अर्थ है?


4
क्या मैं अकेला हूं जो इसे थोड़ा परेशान करता है कि टैग के radix-treeबजाय टैग है radix-trie? इसके साथ टैग किए गए कुछ सवाल भी हैं।
इरेटलिंग्लिस्ट

@errantlinguist विकिपीडिया radix trieलेख को शीर्षक देता है Radix tree। इसके अलावा, "रेडिक्स ट्री" शब्द का साहित्य में व्यापक रूप से उपयोग किया जाता है। अगर कुछ भी कॉलिंग "उपसर्ग पेड़" की कोशिश करता है, तो मुझे अधिक समझ में आएगा। आखिरकार, वे सभी पेड़ डेटा संरचनाएं हैं।
एमिलियो वाज़केज़-रीना

इसके अलावा: "मूलांक तीनों (AKA Patricia trie) का अर्थ क्या है?" यह मानता है कि मूलांक के पेड़ और पाटिरिया के पेड़ एक हैं और एक ही चीज है, लेकिन वे नहीं हैं (जैसे इस उत्तर को देखें )। पैट्रिसिया पेड़ वे पेड़ हैं जो आपको पेट्रीसिया एल्गोरिदम चलाने से मिलते हैं (FYI PATRICIA एक परिचित है, जो "अल्फ़ान्यूमेरिक में कोड किए गए जानकारी को पुनःप्राप्त करने के लिए व्यावहारिक एल्गोरिदम") के लिए है। परिणामी पेड़ों को मूलांक वाले पेड़ों के रूप में समझा जा सकता है radix = 2, जिसका अर्थ है कि आप एक समय में इनपुट स्ट्रिंग के बिट्स को देखकर पेड़ को पार करते हैंlog2(radix)=1
अमेलियो वाज़केज़-रीना

जवाबों:


119

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

अब, मान लें कि आपके पास शब्द हैं hello, hatऔर have। उन्हें एक तिकड़ी में संग्रहीत करने के लिए , ऐसा लगेगा:

    e - l - l - o
  /
h - a - t
      \
       v - e

और आपको नौ नोड चाहिए। मैंने अक्षरों को नोड्स में रखा है, लेकिन वास्तव में वे किनारों को लेबल करते हैं।

एक मूलांक वृक्ष में, आपके पास होगा:

            *
           /
        (ello)
         /
* - h - * -(a) - * - (t) - *
                 \
                 (ve)
                   \
                    *

और आपको केवल पांच नोड्स चाहिए। नोड्स के ऊपर की तस्वीर में तारांकन हैं।

तो, कुल मिलाकर, एक मूलांक वृक्ष कम स्मृति लेता है , लेकिन इसे लागू करना कठिन है। अन्यथा दोनों का उपयोग मामला बहुत अधिक समान है।


धन्यवाद ... क्या आप मुझे ट्राई डीएस का अध्ययन करने के लिए एक अच्छा संसाधन प्रदान कर सकते हैं ... इससे बहुत मदद मिलेगी ...
आर्यक सेनगुप्ता

मेरा मानना ​​है कि केवल एक चीज जिसका मैंने इस्तेमाल किया था जब मैंने पहली बार ट्राइ किया था विकिपीडिया लेख । मैं यह नहीं कह रहा हूं कि यह सही है लेकिन यह काफी अच्छा है।
Ivaylo Strandjev 14

1
क्या मैं कह सकता हूं कि TRIE में खोज रेडिक्स के पेड़ से तेज है? क्योंकि TRIE में यदि आप अगले चार्ट को खोजना चाहते हैं, तो आपको वर्तमान नोड के चाइल्ड एरे में ith इंडेक्स देखने की जरूरत है, लेकिन मूलांक वृक्ष में आपको क्रमिक रूप से सभी चाइल्ड नोड की खोज करने की आवश्यकता है। कार्यान्वयन देखें code.google.com/p/radixtree/source/browse/trunk/RadixTree/src/...
कोशिश कर रहा

4
वास्तव में एक मूलांक वृक्ष में आपके पास एक ही पत्र से शुरू होने वाले एक से अधिक किनारे नहीं हो सकते हैं ताकि आप एक ही निरंतर अनुक्रमण का उपयोग कर सकें।
Ivaylo Strandjev

1
@ एल्गोरिदमिक रूप से मूलांक TRIE से अधिक तेज है, इसीलिए इसका कम्प्रेशन करने लायक है। लोड करने के लिए कम जगह और कम जगह आमतौर पर बेहतर होती है। कहा कि, कार्यान्वयन की गुणवत्ता अलग-अलग हो सकती है।
ग्लेन टिटेलबाम

68

मेरा सवाल है कि क्या Trie डेटा संरचना और Radix Trie एक ही चीज़ हैं?

संक्षेप में, नहीं। श्रेणी मूलांक Trie की एक विशेष वर्ग का वर्णन Trie , लेकिन इसका मतलब यह नहीं है कि सभी की कोशिश करता मूलांक की कोशिश करता है।

यदि वे समान हैं, तो मूलांक तीन (उर्फ पेट्रीसिया ट्राय) का क्या अर्थ है?

मुझे लगता है कि आपको लिखने का मतलब आपके प्रश्न में नहीं है, इसलिए मेरा सुधार है।

इसी तरह, पैट्रिकिया एक विशेष प्रकार के मूलांक तीनों को दर्शाता है, लेकिन सभी मूलांक कोशिश नहीं करता है पाटिरिया कोशिश करता है।


एक तिकड़ी क्या है?

"ट्राइ" एक साहचर्य सरणी के रूप में उपयोग के लिए उपयुक्त एक पेड़ डेटा संरचना का वर्णन करता है, जहां शाखाएं या किनारे एक कुंजी के कुछ हिस्सों के अनुरूप होते हैं । भागों की परिभाषा यहाँ अस्पष्ट है, क्योंकि कोशिशों के विभिन्न कार्यान्वयन किनारों के अनुरूप अलग-अलग बिट-लंबाई का उपयोग करते हैं। उदाहरण के लिए, एक बाइनरी ट्राइ में प्रति नोड दो किनारों होते हैं जो 0 या 1 के अनुरूप होते हैं, जबकि 16-तरफ़ा ट्राइ में प्रति नोड सोलह किनारों होते हैं जो चार बिट्स (या एक हेक्सिडेसिमल अंक: 0x0 के माध्यम से 0xf) के अनुरूप होते हैं।

विकिपीडिया से लिया गया यह आरेख, 'A', 'to', 'to', 'tea', 'ted', 'ten' और 'inn' सम्मिलित की गई (कम से कम) कुंजी के साथ एक चित्रण लगता है:

मूल त्रय

यदि यह तिकड़ी कुंजी 't', 'te', 'i' या 'in' के लिए आइटम संग्रहीत करने के लिए होती है, तो प्रत्येक नोड में मौजूद अतिरिक्त जानकारी को वास्तविक मानों के साथ अशक्त नोड्स और नोड्स के बीच अंतर करने की आवश्यकता होगी।


मूलांक तीन क्या है?

"मूलांक तीन" एक प्रकार के त्रि का वर्णन करता प्रतीत होता है जो सामान्य उपसर्ग भागों को संघनित करता है, जैसा कि आइवालो स्ट्रैंडजेव ने अपने उत्तर में वर्णित किया है। इस बात पर विचार करें कि एक 256-तरफ़ा ट्राइ जो कुंजी "स्माइल", "स्माइल", "स्माइल" और "स्माइलिंग" को निम्न स्टेटिक असाइनमेंट का उपयोग करके अनुक्रमित करता है:

root['s']['m']['i']['l']['e']['\0'] = smile_item;
root['s']['m']['i']['l']['e']['d']['\0'] = smiled_item;
root['s']['m']['i']['l']['e']['s']['\0'] = smiles_item;
root['s']['m']['i']['l']['i']['n']['g']['\0'] = smiling_item;

प्रत्येक सबस्क्रिप्ट एक आंतरिक नोड तक पहुँचता है। इसका मतलब यह है कि smile_item, आपको सात नोड का उपयोग करना होगा। आठ नोड एक्सेस के साथ smiled_itemऔर smiles_item, और नौ से मेल खाती है smiling_item। इन चार वस्तुओं के लिए, कुल चौदह नोड्स हैं। उन सभी में पहले चार बाइट्स (पहले चार नोड्स के अनुरूप) हैं, हालाँकि। उन चार बाइट्स को बनाने के लिए जो एक rootसे मेल खाती है बनाने के लिए ['s']['m']['i']['l'], चार नोड एक्सेस दूर अनुकूलित किए गए हैं। इसका मतलब है कि कम मेमोरी और कम नोड एक्सेस, जो एक बहुत अच्छा संकेत है। अनावश्यक प्रत्यय बाइट्स तक पहुंचने की आवश्यकता को कम करने के लिए अनुकूलन को पुनरावर्ती रूप से लागू किया जा सकता है। आखिरकार, आप एक ऐसे बिंदु पर पहुँच जाते हैं जहाँ आप केवल खोज कुंजी और अनुक्रमित कुंजियों के बीच अंतरों की तुलना तिकड़ी द्वारा अनुक्रमित स्थानों पर करते हैं।। यह मूलांक तीन है।

root = smil_dummy;
root['e'] = smile_item;
root['e']['d'] = smiled_item;
root['e']['s'] = smiles_item;
root['i'] = smiling_item;

आइटम पुनर्प्राप्त करने के लिए, प्रत्येक नोड को एक स्थिति की आवश्यकता होती है। "मुस्कान" और root.position4 की एक खोज कुंजी के साथ , हम पहुंचते हैं root["smiles"[4]], जो कि होता है root['e']। इसे हम एक वैरिएबल में संग्रहीत करते हैं जिसे कहा जाता है currentcurrent.position5 है, जो कि "smiled"और के बीच अंतर का स्थान है "smiles", इसलिए अगली पहुंच होगी root["smiles"[5]]। यह हमें smiles_itemऔर हमारे स्ट्रिंग के अंत में लाता है । हमारी खोज समाप्त हो गई है, और आइटम को आठ के बजाय सिर्फ तीन नोड एक्सेस के साथ पुनर्प्राप्त किया गया है।


PATRICIA trie क्या है?

PATRICIA ट्राई मूलांक का एक प्रकार है, जिसके लिए केवल ऐसे nनोड्स होने चाहिए जिनका उपयोग nवस्तुओं को करने के लिए किया जाता है । हमारे कुदरती तौर से प्रदर्शन किया मूलांक trie ऊपर स्यूडोकोड में, वहाँ कुल में पांच नोड्स हैं: root(जो एक nullary नोड है, यह कोई वास्तविक मूल्य शामिल हैं), root['e'], root['e']['d'], root['e']['s']और root['i']। एक PATRICIA तिकड़ी में केवल चार होने चाहिए। आइए एक नज़र डालते हैं कि इन उपसर्गों को द्विआधारी में देखकर अलग-अलग कैसे हो सकता है, क्योंकि PATRICIA एक बाइनरी एल्गोरिथ्म है।

smile:   0111 0011  0110 1101  0110 1001  0110 1100  0110 0101  0000 0000  0000 0000
smiled:  0111 0011  0110 1101  0110 1001  0110 1100  0110 0101  0110 0100  0000 0000
smiles:  0111 0011  0110 1101  0110 1001  0110 1100  0110 0101  0111 0011  0000 0000
smiling: 0111 0011  0110 1101  0110 1001  0110 1100  0110 1001  0110 1110  0110 0111 ...

आइए हम विचार करें कि नोड्स को उस क्रम में जोड़ा गया है जो वे ऊपर प्रस्तुत किए गए हैं। smile_itemइस पेड़ की जड़ है। यह अंतर, इसे थोड़ा आसान करने के लिए बोल्ड किया गया है, अंतिम बाइट में "smile", बिट 36 पर है। इस बिंदु तक, हमारे सभी नोड्स में एक ही उपसर्ग है। smiled_nodeके अंतर्गत आता है smile_node[0]। के बीच का अंतर "smiled"और "smiles"बिट 43 है, जहां पर होता है "smiles"एक '1' बिट है, तो smiled_node[1]है smiles_node

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

सरल पाटिरिया आरेख

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

कॉम्प्लेक्स पैट्रिक्सिया आरेख

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

मैं अपने आसन्न गठिया की गंभीरता को कम करने के लिए, यहाँ इस विवरण को कम करने जा रहा हूँ, लेकिन यदि आप PATRICIA के बारे में अधिक जानना चाहते हैं, तो आप डोनाल्ड नथ द्वारा "द आर्ट ऑफ़ कंप्यूटर प्रोग्रामिंग, वॉल्यूम 3" जैसी पुस्तकों से परामर्श कर सकते हैं। , या सेडगविक द्वारा "आपकी-पसंदीदा-भाषा", भागों 1-4 में किसी भी "एल्गोरिदम"।


क्या आप pls मुझे "मूलांक" शब्द के महत्व को समझने में मदद करेंगे! मैं समझता हूं कि कैसे, एक प्राकृतिक तरीके से, हम कई प्रतीकों / किनारों को एक किनारे में रखने की अनुमति देकर एक TRIE को एक कॉम्पैक्ट TRIE में बदलने का प्रयास कर सकते हैं। हालाँकि, मैं यह समझने में सक्षम नहीं हूँ कि क्यों एक संयुक्त राष्ट्र की कॉम्पैक्ट TRIE (केवल एक TRIE) को Radix TRIE के रूप में नहीं कहा जा सकता है।
केजहतक

@ एसईबी - रेडिक्स ट्री पर पोस्ट stackoverflow.com/questions/40087385/… पर आपकी प्रतिक्रिया की वास्तव में सराहना करेंगे । सलाह में thnks।
केजहतक

@BuckCherry मैं सक्षम होना पसंद करूंगा, लेकिन कृपया महसूस करें कि मेरा कंप्यूटर चोरी हो गया था और मैं प्रयास को पर्याप्त प्रतिक्रिया में नहीं डाल पा रहा था।
ऑटिस्टिक

18

TRIE:
हमारे पास एक खोज योजना हो सकती है, जहाँ सभी मौजूदा कुंजियों (जैसे हैश योजना) के साथ संपूर्ण खोज कुंजी की तुलना करने के बजाय, हम खोज कुंजी के प्रत्येक वर्ण की तुलना भी कर सकते हैं। इस विचार के बाद, हम एक संरचना बना सकते हैं (जैसा कि नीचे दिखाया गया है) जिसमें तीन मौजूदा चाबियाँ हैं - " डैड ", " डैब ", और " कैब "।

         [root]
     ...// | \\...
           |  \
           c   d
           |    \
          [*]    [*]
      ...//|\.  ./|\\...        Fig-I
        a       a
       /       /
     [*]      [*]
 ...//|\..  ../|\\...
    /        /   \
   B        b     d
  /        /       \
 []       []       []

(cab)   (dab)     (dad)

यह अनिवार्य रूप से आंतरिक नोड वाला एम-एरी ट्री है, जिसे [*] और लीफ नोड के रूप में दर्शाया जाता है। इस संरचना को त्रिक कहा जाता है । प्रत्येक नोड पर शाखा का निर्णय वर्णमाला के अद्वितीय प्रतीकों की संख्या के बराबर रखा जा सकता है, आर कहते हैं। कम मामले के लिए अंग्रेजी वर्णमाला az, R = 26; विस्तारित ASCII वर्णमाला के लिए, R = 256 और बाइनरी अंक / स्ट्रिंग्स R = 2 के लिए।

कॉम्पैक्ट Trie:
आमतौर पर, एक में एक नोड trie के साथ आकार = आर एक सरणी का उपयोग करता है और इस तरह स्मृति की बर्बादी का कारण बनता है जब प्रत्येक नोड कम किनारों है। स्मृति की चिंता को दरकिनार करने के लिए, विभिन्न प्रस्ताव बनाए गए थे। उन विविधताओं के आधार पर ट्राई को " कॉम्पैक्ट ट्राई " और " कंप्रेस्ड ट्राई " के नाम से भी जाना जाता है । जबकि एक सुसंगत नामकरण दुर्लभ है, एक कॉम्पैक्ट तिकड़ी का सबसे आम संस्करण सभी किनारों को समूहित करके बनाया जाता है जब नोड्स में एक किनारे होता है। इस अवधारणा से ऊपर (चित्र I) का उपयोग करना, trie कुंजी "पिता" के साथ, "थपका", और "टैक्सी" फ़ॉर्म नीचे ले जा सकते हैं।

         [root]
     ...// | \\...
           |  \
          cab  da
           |    \
          [ ]   [*]                Fig-II
               ./|\\...
                 |  \
                 b   d
                 |    \
                []    []

ध्यान दें कि प्रत्येक 'c', 'a', और 'b' इसके संबंधित अभिभावक नोड के लिए एकमात्र किनारा है और इसलिए, इन्हें एक ही किनारे "कैब" में रखा जाता है। इसी तरह, 'डी' और 'ए' को 'दा' कहे जाने वाले सिंगल एज में मिला दिया जाता है।

मूलांक तीन: गणित में मूलांक
शब्द का अर्थ है एक संख्या प्रणाली का एक आधार, और यह अनिवार्य रूप से उस प्रणाली में किसी भी संख्या का प्रतिनिधित्व करने के लिए आवश्यक अद्वितीय प्रतीकों की संख्या को इंगित करता है। उदाहरण के लिए, दशमलव प्रणाली मूलांक दस है, और बाइनरी सिस्टम मूलांक दो है। इसी तरह की अवधारणा का उपयोग करते हुए, जब हम अंतर्निहित प्रतिनिधित्व प्रणाली के अद्वितीय प्रतीकों की संख्या के आधार पर एक डेटा संरचना या एक एल्गोरिथ्म को चिह्नित करने में रुचि रखते हैं, तो हम "रेडिक्स" शब्द के साथ अवधारणा को टैग करते हैं। उदाहरण के लिए, कुछ छँटाई एल्गोरिथ्म के लिए "मूलांक सॉर्ट"। तर्क की एक ही पंक्ति में, तीनों के सभी प्रकारजिनकी विशेषताएं (जैसे कि गहराई, स्मृति की आवश्यकता, खोज मिस / हिट रनटाइम, आदि) अंतर्निहित वर्णमाला के मूलांक पर निर्भर करती हैं, हम उन्हें मूलांक "त्रिक" कह सकते हैं। उदाहरण के लिए, एक संयुक्त राष्ट्र के रूप में अच्छी तरह से एक कॉम्पैक्ट ट्राई जब अक्षर az का उपयोग करता है, तो हम इसे मूलांक 26 ट्राई कह सकते हैं । कोई भी तिकड़ी जो केवल दो प्रतीकों (पारंपरिक रूप से '0' और '1') का उपयोग करती है, को मूलांक 2 त्रि कहा जा सकता है । हालांकि, किसी भी तरह कई साहित्यकारों ने "रेडिक्स ट्राइ" शब्द का उपयोग केवल संकुचित त्रि के लिए किया

PATRICIA ट्री / ट्राई को छोड़ें:
यह ध्यान रखना दिलचस्प होगा कि बाइनरी-अल्फाबेट्स का उपयोग करके कुंजी को स्ट्रिंग के रूप में भी दर्शाया जा सकता है। यदि हम ASCII एन्कोडिंग को मानते हैं, तो एक कुंजी "डैड" को द्विआधारी रूप में प्रत्येक चरित्र के द्विआधारी प्रतिनिधित्व को अनुक्रम में लिखकर " 01100100 01100001 01100100 " के रूप में लिखा जा सकता है, जो 'd', 'a', और के रूप में लिखते हैं। क्रमिक रूप से 'd'। इस अवधारणा का उपयोग करते हुए, एक त्रि (मूलांक दो के साथ) का गठन किया जा सकता है। नीचे हम इस अवधारणा को एक सरलीकृत धारणा का उपयोग करके दर्शाते हैं कि अक्षर 'ए', 'बी', 'सी' और 'विल' ASCII के बजाय एक छोटी वर्णमाला से हैं।

चित्र- III के लिए नोट: जैसा कि उल्लेख किया गया है, चित्रण को आसान बनाने के लिए, आइए केवल 4 अक्षरों {a, b, c, d} के साथ एक वर्णमाला मान लें और उनके संबंधित द्विआधारी प्रतिनिधित्व "00", "01", "10" और "11" क्रमशः। इसके साथ, हमारी स्ट्रिंग कुंजियाँ "डैड", "डैब" और "कैब" क्रमशः "110011", "110001" और "100001" बन जाती हैं। इसके लिए तिकड़ी नीचे दी गई है जैसा कि चित्र- III में दिखाया गया है (बिट्स को बाएं से दाएं की तरह ही पढ़ा जाता है जैसे तार को बाएं से दाएं पढ़ा जाता है)।

          [root]
             \1               
              \
              [*]
             0/ \1               
             /   \
           [*]   [*]         
           0/     /               
           /     /0
         [*]    [*]      
        0/      /               
        /      /0
      [*]    [*]
     0/     0/ \1                Fig-III
     /      /   \
    [*]   [*]   [*]
     \1     \1    \1
      \      \     \
      []     []    []
    (cab)   (dab) (dad)

पेट्रीसिया Trie / ट्री:
हम ऊपर द्विआधारी संकुचित तो trie (चित्र-तृतीय) एकल बढ़त संघनन का उपयोग कर, यह बहुत कम नोड्स ऊपर दिखाए से होता है और अभी तक, नोड्स अभी भी अधिक से अधिक 3 होगा, कुंजियों की संख्या इसमें । डोनाल्ड आर। मॉरिसन ने पाया (1968 में) केवल N नोड्स का उपयोग करके N कीज़ को चित्रित करने के लिए बाइनरी ट्राइ का उपयोग करने का एक अभिनव तरीका और उन्होंने इस डेटा संरचना का नाम PATRICIA रखा।। उनकी त्रिक संरचना अनिवार्य रूप से एकल किनारों (एक-तरफा शाखा) से छुटकारा पा गई; और ऐसा करने में, उन्होंने दो प्रकार के नोड्स की धारणा से भी छुटकारा पा लिया - आंतरिक नोड्स (जो किसी भी कुंजी को चित्रित नहीं करते हैं) और पत्ती नोड्स (कि चित्रण कुंजी)। ऊपर बताए गए संघनन तर्क के विपरीत, उनकी तिकड़ी एक अलग अवधारणा का उपयोग करती है जहां प्रत्येक नोड में एक ब्रांचिंग निर्णय लेने के लिए कुंजी के कितने बिट्स को छोड़ दिया जाना शामिल है। अभी तक उनके पैट्रियिया ट्राई की एक और विशेषता यह है कि यह कुंजियों को संग्रहीत नहीं करता है - जिसका अर्थ है कि ऐसी डेटा संरचना सवालों के जवाब देने के लिए उपयुक्त नहीं होगी, सभी कुंजियों को सूचीबद्ध करें जो किसी दिए गए उपसर्ग से मेल खाते हैं , लेकिन खोजने के लिए अच्छा है क्या कोई कुंजी मौजूद है या तीनों में नहीं। फिर भी, पेट्रीसिया ट्री या पेट्रीसिया ट्राई शब्द का उपयोग तब से किया गया है, जिसका उपयोग कई अलग-अलग लेकिन समान इंद्रियों में किया जाता है, जैसे कि, एक कॉम्पैक्ट तिकड़ी [NIST] को इंगित करने के लिए, या मूलांक दो के साथ एक मूलांक तीन को इंगित करने के लिए - जैसा कि सूक्ष्म रूप में इंगित किया गया है। WIKI में रास्ता] और इसी तरह।

एक रेडिक्स ट्राई नहीं हो सकता है कि ट्राइ:
टर्नरी सर्च ट्राइ (उर्फ टर्नेरी सर्च ट्री) को अक्सर संक्षिप्त रूप में TST के रूप में जाना जाता है ( जे। बेंटले और आर। सेडगविक द्वारा प्रस्तावित ) जो तीन-तरफा शाखाओं के साथ एक ट्राइ के समान दिखता है। इस तरह के पेड़ के लिए, प्रत्येक नोड में एक विशेषता वर्णमाला 'x' होती है, ताकि ब्रांचिंग निर्णय से प्रेरित हो कि क्या एक कुंजी का चरित्र 'x' के बराबर या उससे अधिक है। इस फिक्स्ड 3-वे ब्रांचिंग फ़ीचर के कारण, यह ट्राइ के लिए एक मेमोरी-कुशल विकल्प प्रदान करता है, खासकर जब R (मूलांक) बहुत बड़ा होता है जैसे कि यूनिकोड अक्षर के लिए। दिलचस्प है, टीएसटी, (आर-वे) ट्राइ के विपरीत, आर से प्रभावित इसकी विशेषताएं नहीं हैं। उदाहरण के लिए, टीएसटी के लिए खोज मिस है ln (N) हैविरोध के रूप में आर-ट्राइ के लिए लॉग आर (एन) का विरोध किया । TST के मेमोरी आवश्यकताओं, के विपरीत आर रास्ता trie है नहीं के रूप में अच्छी तरह से अनुसंधान के एक समारोह। इसलिए हमें एक TST को मूलांक-त्रिक कहने के लिए सावधान रहना चाहिए। मैं, व्यक्तिगत रूप से, यह नहीं सोचता कि हमें इसे मूलांक-त्रिक कहना चाहिए क्योंकि इसकी विशेषताओं में से कोई भी (जहाँ तक मुझे पता है) इसके अंतर्निहित वर्णमाला के मूलांक, आर से प्रभावित है।


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

"जैसे सवालों के जवाब देने के लिए उपयुक्त नहीं होगा, सभी कुंजियों को सूचीबद्ध करें जो किसी दिए गए उपसर्ग से मेल खाते हैं", गंभीरता से?
पचेरियर

@ स्पेसर ज़रूर! क्लासिक पेट्रीसिया एक पूर्णांक को संग्रहीत करता है, जिसे आप एक सरणी के लिए एक सूचकांक के रूप में उपयोग कर सकते हैं। सरणी में आप स्ट्रिंग डालते हैं। तीनों में आप स्ट्रिंग के लिए 0-आधारित सरणी इंडेक्स डालते हैं। खोज और तुलना करें और बिट एक्सट्रैक्शन फ़ंक्शन पूर्णांक के बजाय पूर्णांक के अनुरूप स्ट्रिंग पर काम करते हैं, और यदि आपका इंसर्ट फ़ंक्शन दूसरों पर आधारित है (जैसा कि होना चाहिए, क्योंकि वहां बार-बार बहुत तर्क होता है) और आप ' अपने रास्ते पर अच्छी तरह से हो जाएगा। आप uintptr_tअपने पूर्णांक के रूप में भी उपयोग कर सकते हैं , क्योंकि ऐसा लगता है कि आम तौर पर मौजूद होने की उम्मीद है (हालांकि आवश्यक नहीं)।
ऑटिस्टिक

आप कहते हैं कि "बहुत से साहित्यकारों ने" रेडिक्स ट्राई "शब्द का उपयोग केवल संकुचित त्रि के लिए किया।" दरअसल, मुझे विकिपीडिया के अलावा कोई अन्य संदर्भ नहीं मिल रहा है। क्या आपको कोई और मिला?
WDS

@ wds - आप सही हो सकते हैं, क्योंकि मुझे याद नहीं है कि जब मैंने यह लिखा था तो मेरे पास क्या संसाधन हैं। एक त्वरित googling से मुझे mathcs.emory.edu/~cheung/Courses/323/Syllabus/Text/trie02.html या tutorialdiary.com/radix-trie-patricia-trie-or-compressed-trie जैसे लिंक मिलते हैं, जो अनिवार्य रूप से इंगित करते हैं या (सबसे अधिक संभावना) विकी से प्रभावित / प्रभावित है। अगर मुझे कोई अन्य विश्वसनीय / विद्वतापूर्ण संसाधन मिल जाए तो मैं यहाँ पोस्ट करूँगा।
केजहतक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.