এই উত্তরগুলির কোনওটিই বিশেষভাবে পরিষ্কার বা সহজ নয়।
এখানে একটি পরিষ্কার, সহজ পদ্ধতি যা কাজের গ্যারান্টিযুক্ত।
জড়ো_আরঙ্কিতকরণ_প্রবণতা এমন একটি অভিধান নেয় p
যা সম্ভাবনা বা ফ্রিকোয়েন্সিগুলিতে প্রতীকগুলি ম্যাপ করে । এটি যে টিপলগুলি থেকে নির্বাচন করতে হবে তার ব্যবহারযোগ্য তালিকার আউটপুট দেয়।
def accumulate_normalize_values(p):
pi = p.items() if isinstance(p,dict) else p
accum_pi = []
accum = 0
for i in pi:
accum_pi.append((i[0],i[1]+accum))
accum += i[1]
if accum == 0:
raise Exception( "You are about to explode the universe. Continue ? Y/N " )
normed_a = []
for a in accum_pi:
normed_a.append((a[0],a[1]*1.0/accum))
return normed_a
উৎপাদনের:
>>> accumulate_normalize_values( { 'a': 100, 'b' : 300, 'c' : 400, 'd' : 200 } )
[('a', 0.1), ('c', 0.5), ('b', 0.8), ('d', 1.0)]
কেন এটি কাজ করে
আহরণ পদক্ষেপ (প্রথম প্রতীক ক্ষেত্রে বা 0) নিজেই এবং পূর্ববর্তী প্রতীক সম্ভাব্যতা বা ফ্রিকোয়েন্সি মধ্যে একটি বিরতি প্রতিটি প্রতীক সক্রিয়। এই ব্যবধানগুলি অন্তর্ভুক্ত 0.0 -> 1.0 (পূর্ববর্তী প্রস্তুত) অবধি বর্তমান প্রতীকটির অন্তর শেষ পয়েন্টের কম বা সমান হওয়া অবধি তালিকার মধ্য দিয়ে পদক্ষেপের মাধ্যমে (এবং এইভাবে সরবরাহিত বিতরণের নমুনা) থেকে নির্বাচন করতে ব্যবহার করা যেতে পারে।
নিয়মমাফিককরণ কিছু মান নিশ্চিত সবকিছু অঙ্কের করতে প্রয়োজন থেকে আমাদের রিলিজ। সাধারণীকরণের পরে সম্ভাবনার "ভেক্টর" এর পরিমাণ 1.0 হয়।
কোড বাকি নির্বাচন ও বন্টন থেকে ইচ্ছামত দীর্ঘ নমুনা জেনারেট করার জন্য নীচে:
def select(symbol_intervals,random):
print symbol_intervals,random
i = 0
while random > symbol_intervals[i][1]:
i += 1
if i >= len(symbol_intervals):
raise Exception( "What did you DO to that poor list?" )
return symbol_intervals[i][0]
def gen_random(alphabet,length,probabilities=None):
from random import random
from itertools import repeat
if probabilities is None:
probabilities = dict(zip(alphabet,repeat(1.0)))
elif len(probabilities) > 0 and isinstance(probabilities[0],(int,long,float)):
probabilities = dict(zip(alphabet,probabilities)) #ordered
usable_probabilities = accumulate_normalize_values(probabilities)
gen = []
while len(gen) < length:
gen.append(select(usable_probabilities,random()))
return gen
ব্যবহার:
>>> gen_random (['a','b','c','d'],10,[100,300,400,200])
['d', 'b', 'b', 'a', 'c', 'c', 'b', 'c', 'c', 'c'] #<--- some of the time
random.choice()
? আপনি সংঘটনগুলির যথাযথ সংখ্যার সাথে মাস্টার তালিকা তৈরি করে একটি বেছে নিন। এটি অবশ্যই একটি সদৃশ প্রশ্ন।