दिलचस्प पोस्ट
पायथन में बड़ी जेसन फाइलें पढ़ना आईईक्वालिटी कॉम्प्रेयर <टी> में गेटहाशकोड की क्या भूमिका है .नेट में? मैक्रो काम सी ऑफसेट कैसे करता है? jQuery के xy दस्तावेज़ DOM ऑब्जेक्ट के निर्देशांक सरणी के सरणी पर array_unique का उपयोग कैसे करूं? क्या एक foreach पाश में बेहतर है … कुंजी के आधार पर & प्रतीक या पुन: असाइन का उपयोग कर? एंड्रॉइड: जीपीएस स्थान की एक छवि कैप्चर कैसे करें शाब्दिक संकेतन वी.एस. जावास्क्रिप्ट में ऑब्जेक्ट बनाने के लिए कन्स्ट्रक्टर एक विशिष्ट गतिविधि के बजाय कार्य को पुनर्स्थापित करने की अधिसूचना? मानक स्ट्रीम (पब्बिनेट) द्वारा प्रयुक्त आंतरिक बफ़र सेट करना बनाम क्लास बनाम क्लासेस कैसे मैं गतिशील रूप से वेब सेवा पतों को एक recompile बिना .net में स्विच कर सकता हूँ? छवियों में सरल रोशनी सुधार openCV c ++ Jquery mouseenter () vs माउसओवर () क्या कोई प्लेटफॉर्म्स हैं जहां संरचना की प्रति का उपयोग करें fd_set (चयन () के लिए) या pselect ()) समस्याओं का कारण बनता है?

लोड किए गए पासा के लिए डेटा संरचना?

मान लीजिए कि मेरे पास एक n-sided लोड किया हुआ मर चुका है जहां प्रत्येक पक्ष के पास कुछ रोलिंग की संभावना है जो मैं इसे रोल करता हूं। मैं जिज्ञासु हूँ अगर इस जानकारी को स्थिर रूप से संचित करने के लिए अच्छा एल्गोरिथ्म है (यानी संभाव्यता के एक निश्चित सेट के लिए) ताकि मैं मरने के एक यादृच्छिक रोल को कुशलतापूर्वक अनुकरण कर सकूं।

वर्तमान में, मेरे पास इस समस्या का एक ओ (एलजी एन) समाधान है। यह विचार सभी कश्मीर के लिए पहली कश्मीर पक्षों की संचयी संभावना की एक तालिका को संग्रहित करना है, [0, 1] में एक यादृच्छिक वास्तविक संख्या उत्पन्न करने के लिए और सबसे बड़ा सूचकांक प्राप्त करने के लिए तालिका पर एक द्विआधारी खोज करने के लिए जो संचयी मूल्य चुना मूल्य से अधिक नहीं है मुझे यह समाधान पसंद है, लेकिन यह अजीब लगता है कि रनटाइम संभावनाओं को खाते में नहीं लेती है विशेष रूप से, एक तरफ उग्र मामलों में हमेशा ऊपर आ रहा है या समान रूप से वितरित किए जा रहे मूल्यों में, ओ (1) में रोल के परिणाम को एक सरल दृष्टिकोण से उत्पन्न करना संभव है, हालांकि मेरा समाधान अब भी लॉगरिदम से कई कदम उठाएगा।

क्या किसी के पास इस समस्या को हल करने के लिए कोई सुझाव है, जिस तरह से उस क्रम में "अनुकूली" है?

संपादित करें : इस प्रश्न के उत्तर के आधार पर, मैंने इस लेख के कई तरीकों का वर्णन करते हुए एक लेख लिखा है , उनके विश्लेषण के साथ। ऐसा लगता है कि उपनाम विधि के वोज के कार्यान्वयन को Θ (एन) प्रीप्रोसेसिंग टाइम और ओ (1) प्रति मरने के रोल के कारण देता है, जो वास्तव में प्रभावशाली है। उम्मीद है कि यह उत्तर में निहित जानकारी के लिए एक उपयोगी अतिरिक्त है!

Solutions Collecting From Web of "लोड किए गए पासा के लिए डेटा संरचना?"

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

यह विचार है कि आपकी संभावनाओं की संख्या पी कश्मीर और तीन नए एन-एलिमेंट एरेज़, क्यू कश्मीर , कश्मीर और बी कश्मीर का उत्पादन होता है । प्रत्येक क्यू कश्मीर 0 और 1 के बीच की संभावना है, और प्रत्येक कश्मीर और बी कश्मीर 1 और n के बीच पूर्णांक है।

हम यादृच्छिक संख्या 1 और n के बीच दो यादृच्छिक संख्या, आर और एस, 0 और 1 के बीच पैदा करते हैं। चलो i = मंजिल (आर * एन) +1 यदि q < i > < i > < i > < i <वापस लौटाता है I i उपनाम पद्धति का काम यह जानने में है कि कैसे क्यू, एक कश्मीर और बी कश्मीर का उत्पादन किया जाए

संतुलित द्विआधारी खोज पेड़ (या सरणी में द्विआधारी खोज) का उपयोग करें और ओ (लॉग एन) जटिलता प्राप्त करें प्रत्येक मरने के परिणाम के लिए एक नोड रखें और चाबियाँ अंतराल हो सकती हैं जो कि परिणाम को ट्रिगर करेगा

 function get_result(node, seed): if seed < node.interval.start: return get_result(node.left_child, seed) else if seed < node.interval.end: // start <= seed < end return node.result else: return get_result(node.right_child, seed) 

इस समाधान के बारे में अच्छी बात यह है कि यह लागू करने के लिए बहुत आसान है, लेकिन अभी भी अच्छी जटिलता है

मैं अपनी मेज को दानेदार करने की सोच रहा हूँ

प्रत्येक मर मूल्य के लिए संचयी के साथ एक तालिका होने के बजाय, आप लंबाई xN की एक पूर्णांक सरणी बना सकते हैं, जहां एक्स संभवतः संभावना की सटीकता बढ़ाने के लिए एक उच्च संख्या है।

सूचकांक (एक्सएन द्वारा सामान्यीकृत) संचयी मूल्य के रूप में इस सरणी को पॉप्युलेट करें और, सरणी में प्रत्येक 'स्लॉट' में, यदि यह सूचकांक ऊपर आता है तो वैसे-वैसे पासा रोल को स्टोर करेगा।

शायद मैं उदाहरण के साथ आसान समझा सकता हूं:

तीन पासा का प्रयोग: पी (1) = 0.2, पी (2) = 0.5, पी (3) = 0.3

एक सरणी बनाएं, इस स्थिति में मैं एक साधारण लंबाई चुनूँगा, कहते हैं 10. (वह है, एक्स = 3.33333)

 arr[0] = 1, arr[1] = 1, arr[2] = 2, arr[3] = 2, arr[4] = 2, arr[5] = 2, arr[6] = 2, arr[7] = 3, arr[8] = 3, arr[9] = 3 

फिर संभावना प्राप्त करने के लिए, बस 0 और 10 के बीच की संख्या को यादृच्छिक बनाएं और उस सूचकांक का उपयोग करें।

यह विधि सटीकता खो सकती है, लेकिन एक्स में वृद्धि और सटीकता पर्याप्त होगी।