एक विकल्प सभी मान्य अंग्रेजी शब्दों को एक तिहाई में स्टोर करना होगा। एक बार ऐसा करने के बाद, आप स्ट्रिंग में अक्षरों के बाद रूट को नीचे से ट्राई चलाना शुरू कर सकते हैं।
- इस बिंदु पर इनपुट तोड़, या
- शब्द का विस्तार जारी: जब भी आप एक नोड है कि एक शब्द के रूप में चिह्नित है मिल जाए, आप दो विकल्प हैं।
आप दावा कर सकते हैं कि एक बार आपके द्वारा इनपुट को तोड़ने के बाद एक मैच मिला है जो सभी कानूनी हैं और शेष शेष वर्ण शेष नहीं हैं। चूंकि प्रत्येक पत्र में आपके पास एक मजबूर विकल्प होता है (या तो आप एक ऐसा शब्द बना रहे हैं जो वैध नहीं है और रोकना चाहिए- या आप शब्द को विस्तारित रख सकते हैं) या दो विकल्प (विभाजित या चलते रहें), आप इस फ़ंक्शन को कार्यान्वित कर सकते हैं संपूर्ण प्रत्यावर्तन का उपयोग कर:
PartitionWords(lettersLeft, wordSoFar, wordBreaks, trieNode):
// If you walked off the trie, this path fails.
if trieNode is null, return.
// If this trie node is a word, consider what happens if you split
// the word here.
if trieNode.isWord:
// If there is no input left, you're done and have a partition.
if lettersLeft is empty, output wordBreaks + wordSoFar and return
// Otherwise, try splitting here.
PartitinWords(lettersLeft, "", wordBreaks + wordSoFar, trie root)
// Otherwise, consume the next letter and continue:
PartitionWords(lettersLeft.substring(1), wordSoFar + lettersLeft[0],
wordBreaks, trieNode.child[lettersLeft[0])
विकृतिविज्ञानी सबसे खराब स्थिति में इस स्ट्रिंग है, जो तेजी से लंबे समय से टी कर सकते हैं के सभी विभाजनों सूची जाएगा। हालांकि, यह केवल तब होता है जब आप स्ट्रिंग को बड़ी संख्या में तरीकों से विभाजित कर सकते हैं जो सभी मान्य अंग्रेजी शब्दों से शुरू होते हैं, और अभ्यास में होने की संभावना नहीं है। यदि स्ट्रिंग में कई विभाजन हैं, तो हम उन्हें ढूंढने में काफी समय व्यतीत कर सकते हैं। उदाहरण के लिए, "dotheredo" स्ट्रिंग पर विचार करें। हम इस कई मायनों विभाजित कर सकते हैं:
do the redo
do the red o
doth ere do
dot here do
dot he red o
dot he redo
इससे बचने के लिए आप उत्तर की संख्या आप रिपोर्ट, शायद दो या तीन की एक सीमा संस्थान कर सकते हैं।
चूंकि हम ट्राई से बाहर निकलने पर रिकर्सन काटते हैं, अगर हम कभी भी एक विभाजन की कोशिश करते हैं जो शेष स्ट्रिंग को वैध नहीं छोड़ता है, तो हम इसे बहुत जल्दी पहचान लेंगे।
आशा है कि इससे मदद मिलती है!
मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन आपके महान ब्लॉग पोस्ट को पढ़ने के बाद मेरा कोई प्रश्न था। ओ (2^एन) अभी भी मुझे सामान्य समाधान के लिए पहेली करता है हालांकि सहजता से यह समझ में आ सकता है। मैंने इसे हल करने के साथ-साथ पुनरावृत्ति को हल करने के लिए एक कॉन्बिनेटोरिक्स का उपयोग करने की कोशिश की (टी (एन) = एन * टी (एन -1) + ओ (के)) लेकिन मैं केवल एन के उत्पाद को शामिल करने में बाध्य हो सकता हूं! गामा समारोह के साथ। क्या आपने ओ (2^एन) के साथ आने के साथ-साथ पुनरावृत्ति को हल करने का प्रयास किया था? – ak3nat0n
क्या इससे मदद मिलती है? https://en.wikipedia.org/wiki/Composition_%28combinatorics%29 –