मुझे एक trie की अवधारणा को समझने में परेशानी हो रही है। एक trie में सबसे लंबा शब्द कैसे खोजें?
पूरे शब्द की वर्तनी यदि मैं यह सही ढंग से देखते हैं, एक Trie में सभी पत्र-गांठ है जाएगा और सभी माता पिता नोड्स पात्रों अंतिम पत्ती के लिए अग्रणी पकड़: "trie" विकिपीडिया प्रविष्टि से मैं इस तस्वीर नोड। तो, एक वर्ग DigitalTreeNode बुलाया
public class DigitalTreeNode {
public boolean isAWord;
public String wordToHere; (compiles all the characters in a word together)
public Map<String, DTN> children;
}
अगर मैं एक विधि है कि trie में सबसे लंबा शब्द देता है यह केवल प्रत्येक पत्ती नोड पर सबसे लंबा शब्द खोजने शामिल होगा लागू करने के लिए करना चाहता था द्वारा परिभाषित किया गया है, तो मैं है? मैं कैसे इस तरह के रूप में एक विधि लागू करना होगा:
public static String longestWord (DigitalTreeNode d);
मैं इसे एक सबसे लंबे समय तक स्ट्रिंग वैरिएबल की स्थापना करना शामिल है, रिकर्सिवली प्रत्येक नोड के माध्यम से जा रहा है और पता चल सके कि यह एक शब्द है, अगर यह एक शब्द है अनुमान लगा रहा हूँ और यह की दूरी सबसे लंबे समय तक चरम = newWordLength से अधिक है। लेकिन, मुझे यकीन नहीं है कि मानचित्र बच्चे कैसे फिट बैठते हैं। उपरोक्त विधि का उपयोग करके मुझे किसी भी त्रिभुज में सबसे लंबा शब्द कैसे मिलेगा?
क्या जटिलता हैं आप क्या ढूंढ रहे हैं? ए [बीएफएस] (http://en.wikipedia.org/wiki/Breadth-first_search) संरचना पर आसानी से इसे 'ओ (| एस | * एन)' में ढूंढ सकता है, जहां | एस | औसत स्ट्रिंग की लंबाई है। मुझे नहीं लगता कि आप इसे मानक त्रिभुज के साथ बेहतर कर सकते हैं, लेकिन यदि आप डीएस में हेरफेर कर सकते हैं, तो मुझे लगता है कि यह बेहतर हो सकता है। – amit
प्रत्येक स्ट्रिंग वर्णों को देखते हुए और मानते हैं कि वे हैं | एस | लंबे समय तक, मुझे नहीं लगता कि मैं ओ (| एस | * एन) जटिलता से काफी बेहतर कर सकता हूं। – user1766888