2009-04-26 15 views
10

दस मिलियन-खिलाड़ी ऑनलाइन पोकर साइट के लिए टकराव का पता लगाने की एल्गोरिदमिक जटिलता का वर्णन करने का सबसे अच्छा तरीका क्या है?एनपी-हार्ड? ऑनलाइन पोकर संलयन पहचान की एल्गोरिदमिक जटिलता?

मान लें (मुझे नहीं लगता कि इन मान्यताओं ज्यादा फर्क तो उन्हें अनदेखा करने के लिए स्वतंत्र लग रहा है, लेकिन सिर्फ स्पष्ट करने के लिए):

  • कि साइट 10,000,000 पंजीकृत उपयोगकर्ता ही है।
  • कि इन खिलाड़ियों ने कुल 5 अरब हाथ खेले हैं।
  • कि आपको दी गई एकमात्र जानकारी साइट के लिए "मास्टर हैंड हिस्ट्री डेटाबेस" है, जिसमें प्रत्येक खिलाड़ी के लिए सभी खिलाड़ी छेद कार्ड और सट्टेबाजी कार्य शामिल हैं।
  • दूसरे शब्दों में, आप शॉर्टकट नहीं ले सकते हैं जैसे आईपी पते की जांच करना, असामान्य रेक/लाभ पैटर्न की तलाश करना, और आगे।
  • मान लीजिए कि आपको एक ऐसा फ़ंक्शन दिया गया है, जब वास्तव में एन (जहां एन 2 और 10 के बीच है) के समूह को पारित किया जाता है, तो समूह में सभी खिलाड़ियों ने एक साथ तालमेल किया है, तो सत्य लौटाता है। अगर कुछ खिलाड़ी नहीं हैं लेकिन सभी खिलाड़ी कॉलर हैं, तो फ़ंक्शन गलत हो जाता है। TRUE का एक वापसी मूल्य (उदाहरण के लिए) 75% आत्मविश्वास से बना है।

आपका काम उन खिलाड़ियों की पूरी सूची तैयार करने के साथ-साथ उन सभी खिलाड़ियों की एक विस्तृत सूची तैयार करना है, जिनके साथ उन्होंने टक्कर ली है। मैंने हाल ही में एनपी-हार्ड के रूप में वर्णित इस समस्या को सुना है लेकिन क्या यह सही है? कभी-कभी हम चीजें "एनपी" या "एनपी-हार्ड" कहते हैं जो केवल "कठिन" होती हैं।

धन्यवाद!

+0

मेरे पास कोई जवाब नहीं है (अभी तक?), लेकिन एक और सवाल है। :) अगर मैं कॉल करता हूं ("बॉब", "जेन", "मैरी"), और: 1. बॉब हाथ में जेन के साथ टक्कर लगी 1. 2. बॉब हाथ में मैरी के साथ टक्कर लगी 2. 3. जेन colluded हाथ में मैरी के साथ 3. (मान लें कि वे एकमात्र गेम खेले गए हैं) यह क्या लौटता है? –

+0

उस मामले में, बॉब, जेन और मैरी मानते हुए एक ही टेबल पर बैठे हैं, फ़ंक्शन सत्य लौटाता है। आपने एक 3-प्लेयर संयोजन समूह की पहचान की है और उस समूह के प्रत्येक खिलाड़ी को आपके हाथों के उप-समूह के दौरान सक्रिय होने की आवश्यकता नहीं है। बेशक, हैकॉल्यूड कुछ हद तक "जादुई" है लेकिन मुझे लगा कि समस्या को सीमित करना आवश्यक था। अगर यह चीजों को सरल बनाता है तो यहां हैकॉल्यूड की अपनी परिभाषा को व्यक्त करने के लिए स्वतंत्र महसूस करें! :-) –

+0

@ व्हीलिंग कोडिंग: अगर किसी और ने इस सवाल से पूछा था, तो मैंने उन्हें आपसे पूछने के लिए कहा होगा। :) –

उत्तर

4

जानवर बल दृष्टिकोण मैं तुरंत देख रहा है:

Set colluders = new Set(); 
for(Player p1 : allPlayers) 
{ 
    for(Player p2 : allPlayers) 
    { 
    if(!p1.equals(p2) && haveColluded(p1, p2)) 
    { 
     colluders.add(p1); 
     colluders.add(p2); 
    } 
    } 
} 

2 की तुलना में बड़ा तर्क मायने रखता है के साथ haveColluded कॉल करना है कि क्योंकि मिथ्या नकारात्मक दे सकता है एक बिंदु नहीं दिख रहा। मुझे लगता है कि यह इस बात पर निर्भर करता है कि समारोह कितना महंगा है। लेकिन ओ (एन^2) में उपर्युक्त परिणाम कॉल करने के लिए कहते हैं (एन खिलाड़ियों की संख्या)। यह कार्य स्वयं ओ (एम) होगा, जहां एम एक साथ खेले जाने वाले खेलों की संख्या है। इस प्रकार, एल्गोरिदम ओ (एन^3) के तहत अच्छी तरह से लगता है। एनपी-हार्ड होने के लिए, आपको साबित करना होगा "एक समस्या एच एनपी-हार्ड है अगर केवल एक एनपी-पूर्ण समस्या है जो एल बहुपद समय है एच को ट्यूरिंग-कम करने योग्य [...] दूसरे शब्दों में, एल कर सकते हैं एच के लिए एक ओरेकल के साथ एक ओरेकल मशीन द्वारा बहुपद समय में हल किया जाना चाहिए। " (http://en.wikipedia.org/wiki/NP-hard)। मैंने एनपी-पूर्ण समस्याओं का अध्ययन किया है (उदाहरण के लिए 3-एसएटी, यात्रा विक्रेता समस्या, इत्यादि) और मुझे नहीं लगता कि आप इसे कैसे साबित करेंगे। लेकिन फिर, यह clique problem के समान संदिग्ध प्रतीत होता है।

+0

जानकारीपूर्ण उत्तर के लिए धन्यवाद। मैं यह भी नहीं देखता कि आप कैसे साबित करेंगे कि यह एनपी-हार्ड है, लेकिन यह एनपी-हार्ड जैसी समस्याओं के लिए एक संदिग्ध समानता है। बेशक, "हैकॉल्यूड" फ़ंक्शन होने से चीजों को सरल बना दिया जाता है। आईआरएल समस्या है (अगर आप मुझसे पूछें) स्पष्ट संलयन के मामलों को छोड़कर अचूक (यानी, जहां 6 खिलाड़ी एक ही आईपी से लॉग इन करते हैं या ऐसा कुछ)। –

+2

यह 'हैकॉल्यूड() 'फ़ंक्शन के गुणों पर निर्भर करता है। शायद 10 खिलाड़ियों को एक साथ मिलकर काम किया जा सकता है केवल उन सभी कार्यों पर फ़ंक्शन को कॉल करके।यदि यह मामला है, तो समस्या बहुत कठिन है। –

3

clique detection जैसा लगता है, जो एनपी-हार्ड है। दूसरी ओर, यहां का आकार का आकार सीमित है (10), इसलिए क्रूर-बल एन^10 सबसे खराब है।

संपादित करें: यहां मुख्य प्रश्न यह है कि संलयन कार्य के गुण क्या हैं। क्या फंक्शन को दो छोटे सेटों (5 कहें) खिलाड़ियों को कॉल करके हमेशा एक साथ मिलकर 10 खिलाड़ियों का पता लगाया जा सकता है?

+0

मुझे विश्वास नहीं है कि यह 'क्लिक डिटेक्शन समस्या' है। उन्हें किसी दिए गए आकार की क्लिक्स का पता लगाने के लिए भी नहीं कहा जा रहा है। उनसे पूछा जा रहा है कि 10 नोड्स का ग्राफ पूरी तरह से जुड़ा हुआ है या नहीं। यह एक काफी मामूली समस्या है। – paxos1977

+0

यह निश्चित रूप से क्लर्क समस्या है, जैसा कि मैंने इसे देखा है, और "एक्स को जानने" के बजाय उसका निर्णय "एक्स के साथ colluded" है। –

+0

@ceretullis: नहीं। उन्हें नोड्स (एक विशाल ग्राफ में) की एक पूरी सूची के लिए कहा जा रहा है जो कि उप-अनुच्छेद के सदस्य हैं जिनके पास 'हैकॉल्यूड()' फ़ंक्शन द्वारा निर्धारित संपत्ति है। यह पूरी तरह से अलग है और विशिष्टता के लिए आकार 10 के एक ग्राफ की जांच करने से कहीं अधिक कठिन है। –

1

अपने मॉडल के तहत, जो आप वर्णन करते हैं वह काफी आसान होना चाहिए। आपको एक अंतर्निहित ग्राफ दिया जाता है (शिखर खिलाड़ी खिलाड़ी होते हैं, किनारों को एक साथ खेल खेला जाता है)। आप उस ग्राफ का सबग्राफ चाहते हैं।

यदि संलयन फ़ंक्शन पूरी तरह विश्वसनीय था तो आप इसे ग्राफ में प्रत्येक जोड़ी के शीर्ष पर कॉल करते हैं, और आपको उप-अनुच्छेद मिलता है।

वह सबग्राफ शायद काफी डिस्कनेक्ट हो गया है। मैं उम्मीद करता हूं कि परिणामी ग्राफ डिस्कनेक्ट हो जाएगा या बहुत कमजोर रूप से जुड़ा होगा; कुछ अच्छी तरह से जुड़े सबग्राफ कुछ मिनट-कटौती करके जल्दी से गिर जाएंगे।

ध्यान दें कि हम खुद ही जोड़े को देख करने के लिए, सीमित कर सकते हैं क्योंकि मिलीभगत समारोह का पालन करना चाहिए (आत्मविश्वास का स्तर के संदर्भ में) collude (ए, बी, सी) < collude (ए, बी)।

इस वैश्विक संलयन समारोह का निर्माण करना वह हिस्सा है जो कठिन लगता है।

1

मैं दो कदम में इस विभाजित होगा: प्रत्येक हाथ में खेलने की जांच पोकर के

  1. दोहराएं 5 अरब से अधिक हाथ। कुछ एल्गोरिदम को नियोजित करें, चलिए इसे प्रत्येक हाथ पर एल्गोरिदम ए पर कॉल करें। जैसे ही आप जाते हैं, आप एक संलयन ग्राफ बनाते हैं जहां चरम खिलाड़ी खिलाड़ियों का प्रतिनिधित्व करते हैं और अप्रत्यक्ष भारित किनारों में दो खिलाड़ियों के बीच मिलन के कुछ विश्वास का प्रतिनिधित्व होता है। जब एल्गोरिदम ए खिलाड़ी वाई के साथ तालमेल करने वाले खिलाड़ी एक्स के संदेह पर ट्रिगर्स, कुछ मूल्य को संकुचित ग्राफ में भारित किनारे XY में जोड़ा जाता है। जैसे ही आप हाथों से प्रगति करते हैं, किनारे के वजन के साथ समय के साथ जमा होता है। जब कुछ सीमा तक पहुँच गया है, तो बढ़त एक्स और वाई के बीच मिलीभगत

  2. तब समारोह निर्धारित करता है कि एन खिलाड़ी कोने की एक सूची सभी एक साथ सांठगांठ है एन कोने युक्त subgraph की पुष्टि करने की बात है का प्रतिनिधित्व करता है पूरी तरह से जुड़ा हुआ है (जिसका मतलब है कि प्रत्येक नोड में सबग्राफ में हर दूसरे नोड को टकराव की सीमा से अधिक वजन होता है)। आईआईआरसी, यह निर्धारित करना ओ (एन * एलजी (एन)) है।

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