當前位置:首頁 » 操作系統 » seed演算法

seed演算法

發布時間: 2022-04-28 10:48:56

java中random(seed)函數的演算法

你這里的random是哪個類里的方法?
Math類里的random()方法是不能傳參數的,返回的數的范圍在0.0-1.0之間

一般隨機數中提到的seed應該指的是生成隨機數的基準,就是按照什麼標准來生成。

② 在Python代碼中random.seed(1)什麼意思

seed( ) 用於指定隨機數生成時所用演算法開始的整數值。

如果使用相同的seed( )值,則每次生成的隨即數都相同,如果不設置這個值,則系統根據時間來自己選擇這個值,此時每次生成的隨機數因時間差異而不同,設置的seed()值僅一次有效。

在其他語言中,要在兩個變數間交換值而不是用第三個變數,要麼使用算術運算符,要麼使用位異或(Bitwise XOR)。

(2)seed演算法擴展閱讀:

注意事項:

在Python里,一個表達式中的名字在它被賦值之前是沒法使用的。這是有意而為的:這樣能避免一些輸入失誤,同時也能避免默認究竟應該是什麼類型的問題(0,None,[],?)。記住把計數器初始化為0,列表初始化為[],以此類推。

確保把頂層的,未嵌套的代碼放在最左邊第一列開始。這包括在模塊文件中未嵌套的代碼,以及在交互提示符中未嵌套的代碼。Python使用縮進的辦法來區分嵌套的代碼段,因此在代碼左邊的空格意味著嵌套的代碼塊。除了縮進以外,空格通常是被忽略掉的。

③ C語言 time(NULL)

我們知道在產生隨機數的時候,需要一個叫做種子seed的值作為產生隨機數演算法的初始值。
而c/c++庫中的srand就是為這一次的隨機數生成設置種子。s代表的就是seed的意思。
time_t
time(time_t
*time);該函數返回自計算機計時的某個時刻起到現在所過去的秒數。
一般是返回自1970年1月1日00:00:00以來,到調用函數的時刻所累積的秒數。
所以綜上所述:
srand((unsigned)time(null));
這語句的含義就是以自1970年1月1日00:00:00以來,到調用函數的時刻所累積的秒數作為
產生隨機數演算法的種子seed。
沒有語句會對程序產生什麼影響:
如果在程序運行時沒有自主設置種子的話,用函數rand產生的隨機數序列會是一樣的。
而用srand設置隨機數種子後,可能產生不同的隨機序列(概率很大)。
之所以說以很大的概率產生不同的隨機數序列,是因為從上面的解釋可以看到,
srand是以秒數為單位的。一旦程序多次運行的時間間隔少於1s。那麼srand設置種子也沒有什麼用處。所以庫函數產生隨機數有一定的缺陷。不知道我解釋明白了沒有!

④ 用隊列實現種子填充演算法的非遞歸

一、種子填充演算法(Seed Filling)
如果要填充的區域是以圖像元數據方式給出的,通常使用種子填充演算法(Seed Filling)進行區域填充。種子填充演算法需要給出圖像數據的區域,以及區域內的一個點,這種演算法比較適合人機交互方式進行的圖像填充操作,不適合計算機自動處理和判斷填色。根據對圖像區域邊界定義方式以及對點的顏色修改方式,種子填充又可細分為幾類,比如注入填充演算法(Flood Fill Algorithm)、邊界填充演算法(Boundary Fill Algorithm)以及為減少遞歸和壓棧次數而改進的掃描線種子填充演算法等等。
所有種子填充演算法的核心其實就是一個遞歸演算法,都是從指定的種子點開始,向各個方向上搜索,逐個像素進行處理,直到遇到邊界,各種種子填充演算法只是在處理顏色和邊界的方式上有所不同。在開始介紹種子填充演算法之前,首先也介紹兩個概念,就是「4-聯通演算法」和「8-聯通演算法」。既然是搜索就涉及到搜索的方向問題,從區域內任意一點出發,如果只是通過上、下、左、右四個方向搜索到達區域內的任意像素,則用這種方法填充的區域就稱為四連通域,這種填充方法就稱為「4-聯通演算法」。如果從區域內任意一點出發,通過上、下、左、右、左上、左下、右上和右下全部八個方向到達區域內的任意像素,則這種方法填充的區域就稱為八連通域,這種填充方法就稱為「8-聯通演算法」。如圖1(a)所示,假設中心的藍色點是當前處理的點,如果是「4-聯通演算法」,則只搜索處理周圍藍色標識的四個點,如果是「8-聯通演算法」則除了處理上、下、左、右四個藍色標識的點,還搜索處理四個紅色標識的點。兩種搜索演算法的填充效果分別如如圖1(b)和圖1(c)所示,假如都是從黃色點開始填充,則「4-聯通演算法」如圖1(b)所示只搜索填充左下角的區域,而「8-聯通演算法」則如圖1(c)所示,將左下角和右上角的區域都填充了。

圖(1) 「4-聯通」和「8-聯通」填充效果

並不能僅僅因為圖1的填充效果就認為「8-聯通演算法」一定比「4-聯通演算法」好,應該根據應用環境和實際的需求選擇聯通搜索方式,在很多情況下,只有「4-聯通演算法」才能得到正確的結果。
1.1 注入填充演算法(Flood Fill Algorithm)
注入填充演算法不特別強調區域的邊界,它只是從指定位置開始,將所有聯通區域內某種指定顏色的點都替換成另一種顏色,從而實現填充效果。注入填充演算法能夠實現顏色替換之類的功能,這在圖像處理軟體中都得到了廣泛的應用。注入填充演算法的實現非常簡單,核心就是遞歸和搜索,以下就是注入填充演算法的一個實現:

164 void FloodSeedFill(int x, int y, int old_color, int new_color)
165 {
166 if(GetPixelColor(x, y) == old_color)
167 {
168 SetPixelColor(x, y, new_color);
169 for(int i = 0; i < COUNT_OF(direction_8); i++)
170 {
171 FloodSeedFill(x + direction_8[i].x_offset,
172 y + direction_8[i].y_offset, old_color, new_color);
173 }
174 }
175 }

for循環實現了向8個聯通方向的遞歸搜索,秘密就在direction_8的定義:

15 typedef struct tagDIRECTION
16 {
17 int x_offset;
18 int y_offset;
19 }DIRECTION;

79 DIRECTION direction_8[] = { {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1},{0, -1}, {-1, -1} };

這個是搜索類演算法中常用的技巧,無需做太多說明,其實只要將其替換成如下direction_4的定義,就可以將演算法改成4個聯通方向填充演算法:

80 DIRECTION direction_4[] = { {-1, 0}, {0, 1}, {1, 0}, {0, -1} };

圖2就是應用本演算法實現的「4-聯通」和「8-聯通」填充效果:

⑤ 如何在重復調用一個程序時,每次給seed一個不同隨機種子

建議:
你可以改成不要每次都new一個Random對象,而是使用同一個Random對象,調用多次nextDouble()方法
public class random {
public static void main(String[] args) {
GRNumber(123, 2, 32, 5);
}

public static void GRNumber(int seed, int x, int y, int times) {
Random r = new Random(seed);
for (int i=0; i<times; i++) {
double number = x + (int) (r.nextDouble()*y);
System.out.println("產生隨機數: " + number);
}
}

}
Random類中實現的隨機演算法是偽隨機,也就是有規則的隨機。在進行隨機時,隨機演算法的起源數字稱為種子數(seed),在種子數的基礎上進行一定的變換,從而產生需要的隨機數字。
相同種子數的Random對象,相同次數生成的隨機數字是完全相同的。也就是說,兩個種子數相同的Random對象,第一次生成的隨機數字完全相同,第二次生成的隨機數字也完全相同。
你這里就是每次都使用同一個種子,new一個Random對象,獲得這個對象的第一個隨機數,當然每次都相同。

⑥ 隨機演算法、函數

產生整數rand的原理是:
y=ax+b(mod n)其中,n一般是一個很大的素數,幾萬。
a也是大素數。而且a,b,n都是常數。所以rand的產生決定於x,
他被稱為seed。
每一個seed都是上一次產生的y的函數。這樣,如果直接取seed=y的話,
雖然產生的rand之間相關性甚小,但只要知道某個y,就能推知以後的rand。
為避免這種情況,一般取seed為y和當時計算機的時間的函數,如seed=y+t

⑦ SAS語言RANNOR函數的seed

(1)首先明確一點,SAS的rannor生成的標准正態偽隨機數是通過對均勻分布偽隨機數(ranuni函數)做Box-Muller變換得到的。而均勻分布偽隨機數是通過余同數生成器(即Lehmer迭代公式)獲得的,公式如下:

其中SAS內部設置a=397204094,m=2^31-1,c=0。上述公式生成的是(0,m)上的均勻偽隨機數,SAS通過除以m獲得(0,1)上的均勻偽隨機數。所以,由上述演算法可知,seed的作用就是給出這個迭代器的初始值R0。

(2)seed值應該說跟它後面生成的隨機數是對應的。至於為什麼你獲得的隨機數是一樣的,原因在於rannor函數得到一個seed後,後面生成的隨機數就是根據最初seed生成的一系列偽隨機數。這個通過比較下面程序的結果就明白了:

data test;
do x=1234567,123456,12345,0;
rannor=rannor(x);
output;
end;
run;
data test2;
do i=1 to 4;
rannor=rannor(1234567);
output;
end;
run;
proc print data=test;
run;
proc print data=test2;
run;

熱點內容
360app加密 發布:2024-10-04 15:21:23 瀏覽:981
佛山埃安s哪個配置好 發布:2024-10-04 15:21:23 瀏覽:510
mysql主伺服器ip 發布:2024-10-04 15:19:28 瀏覽:13
linux刪除mysql用戶 發布:2024-10-04 15:16:54 瀏覽:481
vivo存儲招標 發布:2024-10-04 14:40:16 瀏覽:315
腳本櫻井光 發布:2024-10-04 14:40:03 瀏覽:911
易語言給程序加密 發布:2024-10-04 14:32:49 瀏覽:444
交電費的密碼是多少 發布:2024-10-04 14:31:59 瀏覽:482
月薪正演算法 發布:2024-10-04 14:30:44 瀏覽:139
linux命令行輸入 發布:2024-10-04 14:13:19 瀏覽:734