簡單的帶權隨機演算法

2022-05-29 17:21:10 字數 598 閱讀 6170

def

weight_choice(weight):

""":param weight: list對應的權重序列

:return:選取的值在原列表裡的索引

"""t = random.randint(0, sum(weight) - 1)

for index, val in

enumerate(weight):

t -=val

if t <0:

return

index

#假設weight=[20,30,50] # 即 [0,20)為第乙個區間;[20,50)為第二個區間;[50,100)為第三個區間;

t = random.randint(0, 100) #

從[0,100)中隨機取乙個數,假設t=49

for i, val in enumerate([20,30,50]): #

i和val是0,20; 1,30; 2,50

t -= 20 #

得到t=29 --> t-=30 得到t=-1,則返回 i=1,即隨機結果落在第二個區間

帶權重的隨機演算法

但是,對於這樣的問題,怎樣才能實現這樣的隨機效果呢?直接使用random函式,是不可能做到的。其實相信好多人都已經有實現的思路了,就是產生0 100之間的隨機數,當隨機數在0 70時,就獲得3等獎,70 90是2等獎,90 100是一等獎。一般情況下,這種隨機概率,是通過讀取 或檔案來獲取的,然後儲...

簡單的隨機演算法

有乙個陣列int card,裡面有n個數,將其中的元素隨機排列。首先對於n個數,全排列有 n 種,顯然不能計算全排列後再來取值。這裡的思想是遍歷陣列,對於每個位置上的數,將它與隨機位置的數進行交換,演算法如下 random random new random int card for int i c...

演算法研究 帶權中位數問題

1 對於x1,x2,xn的中位數即各xi的帶權中位數,此處權值wi 1 n,i 1,2.n 此時x1,x2.xn的中位數為xk,k n 1 2 則x1,x2.x k 1 的權值和為 n 1 2 n n 1 2n 1 2 2 通過排序,在o nlgn 的最壞情況時間內求出n個元素的帶權中位數 先用堆排...