वहाँ कुछ अच्छा जवाब यहाँ पहले से ही कर रहे हैं, और मुझे लगता है कि एक Trie शायद जाने के लिए सही तरीका है, लेकिन यह एक दिलचस्प समस्या इसलिए मैं अपने दो सेंट के मूल्य में टॉस जाएगा ...
निष्पक्ष दृष्टिकोण उपलब्ध अक्षरों और सभी विशिष्ट सबसेट के सभी क्रमपरिवर्तन उत्पन्न करना होगा, फिर शब्दकोश में प्रत्येक संभावित शब्द की खोज करें। समस्या यह है कि, जबकि ऐसा करना मुश्किल नहीं है, वहां संभावित शब्दों की एक आश्चर्यजनक रूप से बड़ी संख्या है, और उनमें से अधिकांश अमान्य हैं।
सकारात्मक तरफ, शब्दकोश की जांच करना बाइनरी खोज या इसी तरह के कुछ के साथ हो सकता है। नकारात्मक पक्ष पर, आप यह कई बार ऐसा करेंगे कि कार्यक्रम पत्रों की लंबी सूची के लिए रोक देगा।
हमें निश्चित रूप से इसे और अधिक उपयोगी बनाने के लिए शब्दकोश को प्रीप्रोसेस करने की आवश्यकता है, और हमें वास्तव में आवश्यक संभावित मैचों में से अधिकांश को रद्द करने का एक तरीका है, भले ही विधि कभी-कभी झूठी सकारात्मक स्थिति हो।
ऐसा करने का एक तरीका यह दर्शाता है कि एक बिट मानचित्र में कौन से अक्षरों का उपयोग किया जाता है। दूसरे शब्दों में, शब्दकोश में प्रत्येक शब्द के लिए 32-बिट संख्या को सटीक करें, जहां प्रत्येक बिट सेट किया गया है यदि वर्णमाला के संबंधित अक्षर को कम से कम एक बार शब्द में प्रयोग किया जाता है। यह आपको शब्दकोश के रैखिक स्कैन करके और केवल उन लोगों को रखने के लिए सभी संभावित शब्दों को खोजने की अनुमति देगा जो आपके द्वारा उपलब्ध अक्षरों का उपयोग करते हैं। मुझे संदेह है कि, कुछ चतुरता और अनुक्रमण के साथ, आप रैखिक से बेहतर कर सकते हैं।
आपके द्वारा प्राप्त उम्मीदवारों में से कुछ को आपके पास उपलब्ध होने की तुलना में एक पत्र के अधिक उदाहरणों की आवश्यकता होगी, इसलिए ये झूठे सकारात्मक होंगे। इसका मतलब है कि आपको लगभग सभी हिट को खत्म करने के लिए जेनरेट किए गए सभी उम्मीदवारों पर अंतिम जांच करने की आवश्यकता है। ऐसा करने के कई तरीके हैं, लेकिन सबसे सरल बात यह है कि अक्षरों की अपनी सूची में जाना और उस अक्षर की पहली घटना को संभावित शब्द में डैश के साथ प्रतिस्थापित करना है।जब आप पूरा कर लेंगे, तो संभावित शब्द में डैश के अलावा कुछ भी है, तो यह एक विफलता है। एक और अधिक सुरुचिपूर्ण समाधान, हालांकि जरूरी नहीं है, पत्र आवृत्तियों की एक सरणी उत्पन्न करना और उनकी तुलना करना होगा।
फिर से, मुझे लगता है कि कोशिश करता शायद जाने का रास्ता है, लेकिन मुझे आशा है कि इन विचारों को आप के लिए उपयोगी होते हैं।
संपादित
मुझे कैसे आप प्रारंभिक खोज पर एक पूर्ण रैखिक खोज की तुलना में बेहतर कर सकता का एक उदाहरण बाहर टॉस करते हैं: मूलांक का उपयोग करें। एक साधारण इंडेक्स रखें जो आपको दिए गए अक्षर से शुरू होने वाले पहले शब्द को देखने देता है। फिर, खोज करते समय, उन सभी शब्दों को छोड़ दें जो आपके पास एक पत्र से शुरू होते हैं जो आपके पास नहीं है। यह एक विशाल गति नहीं है, लेकिन यह एक सुधार है।
तो सवाल यह वास्तव में "कैसे कुशलतापूर्वक एक वेक्टर से अधिक पुनरावृति करने के लिए" नहीं है, बल्कि "कैसे कुशलतापूर्वक पता लगाने के लिए अगर संग्रह में कोई भी शब्द पत्र का एक सेट से इकट्ठा किया जा सकता है?" – jalf
आप अपनी समस्या के विवरण में ध्यान में नहीं लग रहे हैं कि शब्दों को बोर्ड के साथ-साथ खिलाड़ी के हाथ के आधार पर भी बनाया जा सकता है। – jemfinch
ओह। मैं इसे ध्यान में नहीं ले रहा था। महान, अभी तक और अधिक जटिलता पहले से ही (मेरे ज्ञान के स्तर के लिए) जटिल समस्या –