n
शब्द आवृत्ति जोड़े की एक सरणी को देखते हुए:आवृत्ति के साथ यादृच्छिक रूप से आइटम का चयन करने के लिए कुशल एल्गोरिदम
[ (w0, f0), (w1, f1), ..., (wn-1, fn-1) ]
जहां wi
एक शब्द है, fi
एक पूर्णांक आवृत्ति है, और आवृत्तियों का योग ∑fi = m
,
मैं एक छद्म-यादृच्छिक उपयोग करना चाहता हूं p
शब्द wj0, wj1, ..., wjp-1
का चयन करने के लिए संख्या जेनरेटर (पीआरएनजी) जैसे किसी भी शब्द का चयन करने की संभावना इसकी आवृत्ति के आनुपातिक है:
P(wi = wjk) = P(i = jk) = fi/m
(ध्यान दें, यह प्रतिस्थापन के साथ चयन है, इसलिए वही शब्द चुना जा सकता है हर बार)।
मैं अब तक तीन एल्गोरिदम के साथ आया हूं:
आकार
m
की एक सरणी बनाएं, और इसे पॉप्युलेट करें ताकि पहलीf0
प्रविष्टियांw0
हों, अगलीf1
प्रविष्टियांw1
हैं, और इसी तरह , इसलिए अंतिमfp-1
प्रविष्टियांwp-1
हैं।[ w0, ..., w0, w1,..., w1, ..., wp-1, ..., wp-1 ]
फिर श्रेणी0...m-1
मेंp
सूचकांक का चयन करने के लिए पीआरएनजी का उपयोग करें, और उन सूचकांक में संग्रहीत शब्दों की रिपोर्ट करें।
यहO(n + m + p)
काम लेता है, जो कि बहुत अच्छा नहीं है, क्योंकिm
n से बहुत बड़ा हो सकता है।mi = ∑h≤ifh = mi-1 + fi
कंप्यूटिंग के बाद एक बार इनपुट सरणी के माध्यम से चरण औरmi
कंप्यूटिंग के बाद,0...p-1
में प्रत्येकk
के लिए0...mi-1
श्रेणीxk
उत्पन्न करने के लिए पीआरएनजी का उपयोग करें औरwjk
के लिएwi
का चयन करें (संभवतः वर्तमान मूल्य को बदलनाwjk
) अगरxk < fi
।
यहO(n + np)
काम की आवश्यकता है।mi
को एल्गोरिदम 2 के रूप में गणना करें, और एन वर्ड-आवृत्ति-आंशिक-योग ट्रिपल पर निम्न सरणी उत्पन्न करें:[ (w0, f0, m0), (w1, f1, m1), ..., (wn-1, fn-1, mn-1) ]
और फिर,0...p-1
में प्रत्येक के लिए,0...m-1
श्रेणी मेंxk
संख्या उत्पन्न करने के लिए पीआरएनजी का उपयोग करें फिरi
सेंट खोजने के लिए ट्रिपल की सरणी पर बाइनरी खोज करेंmi-fi ≤ xk < mi
, औरwjk
के लिएwi
का चयन करें।
यहO(n + p log n)
काम की आवश्यकता है।
मेरा प्रश्न है: क्या इसके लिए एक और अधिक कुशल एल्गोरिदम मैं उपयोग कर सकता हूं, या ये उतना ही अच्छा है जितना इसे प्राप्त होता है?
इस OT है, और मुझे इस के लिए मत मारो कृपया, लेकिन आप कैसे उप/सुपर स्क्रिप्ट योग समीकरण के संकेत मिला है, और? – dassouki
बस का उपयोग करें ...
ब्लॉक (पूर्णलाइन के लिए) के अंदर। – rampion...
ब्लॉक (इनलाइन के लिए) याऔर योग चिह्न के लिए, बस ∑ का उपयोग करें (गणित सिगिल के लिए अधिक HTML इकाइयों के लिए http://www.w3.org/TR/WD-entities-961125 देखें) – rampion