「跳蚤演算法」函式模組(不重複隨機數高效演算法)

2021-06-15 21:55:12 字數 2580 閱讀 4086

attribute vb_name = "modflearandom"

'flearandom module

'kitegirl 2005

public sub flearandom(byref plist() as long, optional byval pset_scan as boolean = false, optional byval pset_swap as boolean = false, optional byval pscan_start as long = 0, optional byval pscan_end as long = 0, optional byval pswap_start as long = 0, optional pswap_end as long = 0)

'flearandom函式

'語法:flearandom(plist() ,[pset_scan,] [pset_swap,] [pscan_start,] [pscan_end,] [pswap_start,] [pswap_end] )

'說明:以「跳蚤演算法」對序列進行亂序處理。

'引數: long plist() 必要引數。作為序列容器的陣列。

' boolean pset_scan 可選引數。掃瞄域設定開關。使其為true則使用者設定的掃瞄域引數有效。

' boolean pset_swap 可選引數。交換域設定開關。使其為true則使用者設定的交換域引數有效。

' long pscan_start 可選引數。掃瞄域開始。

' long pscan_end 可選引數。掃瞄域結束。

' long pswap_start 可選引數。交換域開始。

' long pswap_end 可選引數。交換域結束。

'說明:序列初始狀態可以有序地儲存在該陣列當中。

' 雖然序列本身可以適合某些應用,但單一的long型別不能滿足更多需要。

' 更多場合則以long型別的序列作為某個其他型別陣列的索引,這樣可以獲得更豐富的應用。

' 交換區的絕對長度,也就是abs(pswap_end-pswap_start)不能超過2^31。

''交換設定匯入

dim tswap_start as long '交換域開始

dim tswap_end as long '交換域結束

if pset_swap then

tswap_start = pswap_start

tswap_end = pswap_end

else

tswap_start = lbound(plist())

tswap_end = ubound(plist())

end if

'交換範圍

dim tswap_count as long '交換域元素數

tswap_count = (tswap_end - tswap_start) + 1

'交換補償

dim tswap_rep as long '交換補償

tswap_rep = tswap_start

'掃瞄設定匯入

dim tscan_start as long '掃瞄開始

dim tscan_end as long '掃瞄結束

if pset_scan then

tscan_start = pscan_start

tscan_end = pscan_end

elseif (not pset_scan) and pset_swap then

tscan_start = tswap_start

tscan_end = tswap_end

else

tscan_start = lbound(plist())

tscan_end = ubound(plist())

end if

'序列擾亂

dim tlist_index as long '序列索引

dim tlist_index_sur as long '序列索引_源

dim tlist_index_des as long '序列索引_目的

for tlist_index = tscan_start to tscan_end

tlist_index_sur = tlist_index

tlist_index_des = int(rnd * tswap_count) + tswap_rep

'交換plist(tlist_index_sur)和plist(tlist_index_des)

flearandom_valueswap plist(tlist_index_sur), plist(tlist_index_des)

next

end sub

private sub flearandom_valueswap(byref pa as long, byref pb as long)

'flearandom_valueswap過程

'語法:flearandom_valueswap pa, pb

'說明:以「跳蚤演算法」對序列進行亂序處理。

dim ttemp as long

ttemp = pa: pa = pb: pb = ttemp

end sub

不重複隨機數

1 不重複隨機數1 生產 lowerbound,upperbound 的隨機數,核心 int upperbound lowerbound 1 rnd lowerbound 示例 如下 sub rndnumnorepeat1 dimdic dim i set dic createobject scri...

例子 隨機數 不重複的隨機數

以隨機數是js數學物件的方法之一。math.random 0 1的隨機數這樣使用的範圍就比較小,所以如果想用這個api獲得其它範圍的隨機數的話,就需要使用下面這種 math.random b a 1 a 以上這種寫法是獲取a b的隨機數的寫法,比如想要50 100的隨機數,就應該是 math.ran...

不重複隨機數生成

直接上 生成 0,total 的隨機數 最大隨機數 ilist private static ilistgetrandomsequence int total random random new random for var i listbase.count 1 i 0 i return listo...