2010-05-14 10 views
5

एक सवाल के बारे में 20 सवालों के खेल here पूछा गया था:क्या कोई आइटम खोजने के लिए कोई एल्गोरिदम है जो कुछ गुणों से मेल खाता है, जैसे 20 प्रश्न गेम?

हालांकि, अगर मैं इसे सही ढंग से समझ रहा हूँ, जवाब ग्रहण करने के लिए कि प्रत्येक प्रश्न के नीचे एक hierarchal शाखाओं पेड़ जाना होगा लग रहे हैं। यदि खेल इस तरह से चला गया तो एक बाइनरी पेड़ काम करना चाहिए:

  1. क्या यह एक जानवर है? हाँ।
  2. क्या यह एक स्तनपायी है? हाँ।
  3. क्या यह एक बिल्ली का बच्चा है? हाँ।

क्योंकि बिल्ली का बच्चा स्तनपायी और स्तनपायी का एक उदाहरण है जानवर का एक उदाहरण है। लेकिन क्या होगा यदि प्रश्न इस तरह जाते हैं?

  1. क्या यह एक स्तनपायी है? हाँ।
  2. क्या यह एक शिकारी है? हाँ।
  3. क्या इसकी लंबी नाक है? सं।

आप उन प्रकार के प्रश्नों के साथ एक पेड़ को शाखा नहीं बना सकते हैं, क्योंकि वहां बहुत सारे शिकारी हैं जो स्तनधारियों नहीं हैं। तो आप अपने कार्यक्रम को सिर्फ स्तनधारियों तक सीमित नहीं कर सकते हैं और शिकारियों को स्तनधारियों का उप-समूह होना चाहिए।

तो क्या एक बाइनरी खोज पेड़ का उपयोग करने का कोई तरीका है जिसे मैं समझ नहीं रहा हूं या इस समस्या के लिए एक अलग एल्गोरिदम है?

बस स्पष्ट करने के लिए, मैं केवल उदाहरण के रूप में 20 प्रश्नों का उपयोग कर रहा हूं, इसलिए मेरा प्रश्न सामान्य रूप से इस तरह की खोज समस्या के बारे में है, विशेष रूप से 20 प्रश्नों के गेम में शामिल अन्य समस्याएं नहीं।

+1

यह और भी मुश्किल है जब आपको यह तथ्य लेना पड़ता है कि लोग लगातार गलत तरीके से जवाब देते हैं, उदाहरण के लिए बहुत से लोग सोचते हैं कि डॉल्फ़िन मछली हैं ... आपको एएनएन या कुछ और अंतःस्थापित दृष्टिकोण की आवश्यकता क्यों है, जैसे एएनएन या अन्य मशीन सीखना। –

+0

धन्यवाद, लेकिन मैं केवल 20 प्रश्नों का उपयोग ऐसे परिस्थिति के उदाहरण के रूप में कर रहा हूं जहां आपको यह पता लगाना होगा कि कौन सा ऑब्जेक्ट गुणों के समूह से मेल खाता है। तो इस सवाल के लिए, मुझे यह मानकर खुशी होगी कि आपको हमेशा सही उत्तर मिल जाएगा। मैंने अपने प्रश्न को संपादित करने और इसे स्पष्ट करने के लिए संपादित किया। – lala

उत्तर

2

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

इसके अलावा, आप चीजों को विभाजित करने के लिए आसानी से 20 आयामों ('गुण') से अधिक आसानी से प्राप्त कर सकते हैं, और उन बीस के कुछ सेट को एक से अधिक ऑब्जेक्ट द्वारा साझा किया जा सकता है (इसलिए 20-स्तर का पत्ता नोड बाइनरी पेड़ में केवल एक आइटम नहीं होना चाहिए)।

इस प्रकार, "बाइनरी सर्च" वास्तव में क्या चल रहा है इसके लिए सिर्फ एक रूपक है, जिसमें प्रत्येक चरण में आप उस संपत्ति को चुनने का प्रयास करते हैं जो आपके शेष सेट को दो बराबर हिस्सों में विभाजित करता है। जहां तक ​​वास्तविक डेटा संरचनाएं जाती हैं, आपको कुछ और उपयोग करना होगा।

0

यदि आपको समस्या के लिए बाइनरी पेड़ से चिपकने की आवश्यकता है, तो कुछ भी नहीं कह रहा है कि आप शाखा या नोड को डुप्लिकेट नहीं कर सकते हैं। निर्णयों के एक से अधिक सेट के अंत में बिल्ली का उत्तर नोड रखें। या शिकारी प्रश्न दो बार पूछें - एक बार यदि उपयोगकर्ता ने स्तनधारियों को "हाँ" कहा, और एक बार उपयोगकर्ता ने "नहीं" कहा।

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

+0

पेड़ उस तरह से तेजी से बढ़ेगा और वास्तव में तेज़ी से बड़ा नहीं होगा? मैं सिर्फ एक नौसिखिया हूं, लेकिन ऐसा लगता है कि हर संभव उत्तर पर इसे फिर से शुरू करना आसान होगा और ऐसा करने के बजाय उन्हें एक बार जांचें। – lala

-1

यदि आप एक सटीक मैच की तलाश में हैं - बस सभी संपत्तियों पर हैश करें और एक लुकअप करें।

यदि आप समान वस्तुओं को खोजने के लिए पैटर्न पहचान करना चाहते हैं तो आप एक 'रैखिक' मानचित्रण के साथ एक विधि का उपयोग कर सकते हैं - जैसे के-निकटतम पड़ोसी। उदाहरण के लिए आप खोज स्थान का प्रतिनिधित्व करने के लिए एक केडी-पेड़ का उपयोग कर सकते हैं।

+0

"हैश ऑन"? क्या प्रोग्रामर का कुछ गड़बड़ है? – lala

+0

"हैश ऑन" == मानों को हैश तालिका में डाल दें। – tzaman

0

मुझे विश्वास है कि आप जो खोज रहे हैं उसे आमतौर पर वर्गीकरण के लिए Decision Tree के रूप में जाना जाता है। इसके बाद आप C4.5 जैसे एल्गोरिदम का उपयोग करके सीख सकते हैं कि कुशलतापूर्वक वर्गीकृत करने के लिए अपने प्रश्नों को कैसे व्यवस्थित किया जाए।