2010-04-03 15 views
9

मेरे पास trie है जिसका उपयोग मैं कुछ स्ट्रिंग प्रोसेसिंग करने के लिए कर रहा हूं। मेरे पास एक साधारण कंपाइलर है जो कुछ डेटा से trie उत्पन्न करता है। एक बार उत्पन्न होने पर, मेरा trie रन टाइम पर नहीं बदलेगा।फ़ाइल में एक त्रिभुज रखना - सी

मैं एक ऐसे दृष्टिकोण की तलाश में हूं जहां मैं एक फ़ाइल में ट्राई जारी रख सकूं और इसे प्रभावी ढंग से लोड कर सकूं। मैंने sqllite को यह समझने के लिए देखा है कि वे b-tree पर कैसे बने रहे हैं लेकिन उनका फ़ाइल प्रारूप थोड़ा उन्नत दिखता है और मुझे उन सभी की आवश्यकता नहीं हो सकती है।

अगर कोई trie को जारी रखने और पढ़ने के लिए कुछ विचार प्रदान कर सकता है तो यह सहायक होगा। मैं सी

उत्तर

11

का उपयोग कर प्रोग्रामिंग कर रहा हूँ मैं कुछ शोध किया और निम्नलिखित थोड़ा जवाहरात ऑनलाइन पाया:

  1. trie.h
  2. trie.c

क्रमबद्धता और अक्रमांकन के साथ एक काम कर trie। इसे मूल रूप से पायथन में उपयोग के लिए लिखा गया था (इसमें पाइथन को बांधने के लिए triemodule.c संबंधित है), लेकिन यह शुद्ध सी है; आप विचारों के लिए इसे खा सकते हैं या अपनी इच्छानुसार इसका इस्तेमाल कर सकते हैं।

अद्यतन:

ऐसा प्रतीत होता है लिंक अब काम कर रहे हैं। मैं मूल रखने लेगी, लेकिन यहां वेबैक मशीन में लिंक कर रहे हैं:

  1. trie.h
  2. trie.c
+2

आशाजनक लग रहा है। मुझे इसे आज़माएं। –

+1

+1 - अच्छा खोजें !! –

+0

लिंक काम नहीं कर रहे – funkybro

3

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

यहां नोड पढ़ने/लिखने के लिए उदाहरण छद्म कोड है। यह बाल नोड्स को पढ़ने/लिखने के द्वारा काम करता है। इसमें त्रिभुज विशिष्ट नहीं है, और अन्य पेड़ डेटा संरचनाओं के लिए भी काम करना चाहिए।

void writeNode(Node *node) 
    write node data to file 
    write node.numOfChildren to file 
    for each child: 
     writeNode(child) 

Node *readNode() 
    Node *node = allocateNewNode() 
    read node data from file 
    read node.numOfChildren from file 
    for (i=0; i<node.numOfChildren; i++) 
     Node *child = readNode() 
     node.addChild(child) 
1

अपने नोड्स के सभी एक ही आकार के होते हैं तो आप सिर्फ अपने नोड्स (root = 0) गणना और उनके सूचकांक में एक फाइल करने के लिए उनमें से प्रत्येक लिख सकते हैं। उन्हें लिखते समय आपको उन नोड्स इंडेक्स में अन्य नोड्स में अपना संदर्भ बदलना होगा। आपको शायद NULL मान भी चाहिए। आप -1 इस्तेमाल कर सकते हैं या आप (root = 1) और (NULL = 0).

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

अपने नोड्स विभिन्न आकारों कर रहे हैं तो यह और भी है जटिल।

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