跳蚤演算法 基本原理。

2021-06-15 21:55:12 字數 1151 閱讀 5482

跳蚤演算法:基本原理。

一、演算法的誕生及設計初衷。

傳統教材中取得x個0 to n之間不重複隨機數的方法一般是這樣:

(x個不重複隨機數輸出到a()陣列)

for i=1 to x

dor=int(rnd*(n+1))

c=《確定r不包含在a()內》

loop until c

《將r新增到a()>

next

由於r可能與a()內的值重複,且每次迴圈都要歷遍a(),因此該演算法的效率很低。而且r是否命中到a()存在一定的隨機性,取得乙個合適的r要迴圈多次(次數不確定),從運算時間上來說是不可預見的。

不重複隨機數是編寫程式經常需要的演算法。因此,出於高效、穩定的需要,通過對撲克洗牌的觀察,設計出如下演算法。由於不清楚這個演算法的學名,因其在工作時數值隨機交換,好似跳蚤一樣跳來跳去的,因此給它取個有趣的名字叫「跳蚤演算法」,並在csdn的vb版多次提供。

「跳蚤演算法」有許多改進方式及應用方法。以下僅是最基本的「跳蚤演算法」,以便於描述這個演算法的原理。

這個演算法的優點在於運算時間穩定、高效,缺點是需要大量的儲存空間。需要的空間與n的取值有關。通常情況下,如果您要從s to e的範圍內選擇x個隨機數,假如e-s的絕對值大於10000000一般我不推薦您使用這個演算法。如果這個絕對值大於2000000000,在vb下是難以做到的。

該演算法原則上不適用於浮點數。

二、跳蚤演算法原理

a()為乙個陣列,元素上下標符合a(0 to n)的理想狀態。在0 to n範圍內取得x個隨機數,(x<=n)

i為陣列元素的當前索引

r為乙個隨機數 r。(0<=r<=n)

1、首先需要為陣列賦值,打亂乙個所有值都一樣的陣列是沒有意義的。

for i=0 to n

a(i)=i

next

2、打亂原有順序排列的陣列元素值。

for i=0 to n

r=int(rnd*(n+1))

swap a(i),a(r)

next

sub swap(v1,v2)

'交換兩值

t=v1:v1=v2:v2=t

end sub

3、獲取x個不重複隨機數,輸出到b()裡面。

for i=1 to x

b(i)=a(i-1) 

next

RSA演算法基本原理

圖為 rsa公開金鑰演算法的發明人,從左到右ron rivest,adi shamir,leonard adleman.攝於1978年 素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15 3 5,所以15不是素數 又如,12 6 2 4 3,所以12也...

mysql的基本原理 Mysql 基本原理

mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...

ARA 演算法的基本原理

在介紹ara 演算法之前,有必要介紹一下weighted a 演算法,在最初的a 演算法中,f s 的計算方法為 f g h可以看出f s 是由個g s 和h s 兩項構成的,其中g s 是乙個後驗值,而h s 是乙個先驗值,這樣一種啟發式的搜尋方式本身為演算法本身節省了很多資源,去除了一些不必要點...