PHP高效產生一個不重複隨機數
PHP產生一個隨機數組的封裝方法
/* * array unique_rand( int $min, int $max, int $num ) * 生成一定数量的不重复随机数 * $min 和 $max: 指定随机数的范围 * $num: 指定生成数量 */ function unique_rand($min, $max, $num) { //初始化变量为0 $count = 0; //建一个新数组 $return = array(); while ($count < $num) { //在一定范围内随机生成一个数放入数组中 $return[] = mt_rand($min, $max); //去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的key和value交换两次。这种做法比用 array_unique() 快得多。 $return = array_flip(array_flip($return)); //将数组的数量存入变量count中 $count = count($return); } //为数组赋予新的键名 shuffle($return); return $return; }
該方法以每次獲取隨機數存入數組再去重...效率低下...不想用
PHP高效產生m個n範圍內的不重複隨機數(m<=n)
註:在《 Programming Pearls 》一書中也有提到,題目為「如何高效產生m個n範圍內的不重複隨機數(m<=n)”
此演算法非常巧妙的取隨機數的位置(陣列的下標),取代取隨機數本身,每次取到一個隨機數之後,就將其在取值範圍中排除,下一次只會在剩下的數字中取,一次遍歷就可以完成隨機數的選取,效率相當高。
function rand_num($num='200'){ for($i=0;$i<$num;$i++){ $n[$i] = $i; } for($i=0;$i<$num;$i++){ $rand = mt_rand($i,$num-1); //数组 随机数交换下标 if($n[$i] == $i){ $n[$i] = $n[$rand]; $n[$rand] = $i; } } }
1、第一步,為陣列的每個數字以其下標順序賦值,得到一個 $num 個數字鍵值對應順序排列的陣列。
2.第二步,開始取範圍[ i,$num-1 ]範圍內的隨機數$rand,並將獲取到的隨機數$rand作為數組中當前位置鍵i對應下標的值$rand,將陣列中鍵$rand對應下標的值替換為i,其實就是陣列鍵值交叉互換。意義是,將已經產生的隨機數在取值範圍[ i,$num-1 ]中排除,下次會在剩下的數字中[ i 1,num-1 ]取值。
3.第三步驟,為避免重複取值,只在未改變的鍵值對中進行交替運算,即在原數組順序排列(鍵==值) 的位置進行交替運算。
4.結束。
如上圖,取得10個隨機數部分試例。
更多PHP相關問題請上PHP中文網:PHP影片教學
#以上是PHP高效產生一個不重複隨機數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用 RANDBETWEEN 在 Excel 中產生隨機數字如果要產生特定範圍內的隨機數,RANDBETWEEN 函數是一種快速簡單的方法。這允許您在您選擇的任何兩個值之間產生隨機整數。使用 RANDBETWEEN 在 Excel 中產生隨機數:按一下您希望出現第一個隨機數的儲存格。鍵入=RANDBETWEEN(1,500)將「1」替換為您要產生的最低隨機數,將「500」替換為

如何優化Java開發中的隨機數產生效能隨機數在電腦科學上有廣泛的應用,特別是在密碼學、模擬、遊戲等領域。在Java開發中,我們常常需要產生隨機數來滿足各種需求。然而,隨機數產生的效能通常是開發者關注的問題之一。本文將探討如何優化Java開發中的隨機數產生效能。使用ThreadLocalRandom類別在Java7中引入了ThreadLocalRandom類

使用Go語言產生隨機數Go語言是一種現代化、簡潔和高效的程式語言,提供了許多內建程式庫,可用於產生隨機數。其中,crypto/rand套件提供了一系列函數來產生安全的隨機數。在本文中,我們將透過使用crypto/rand套件中的Read函數來產生隨機數。首先,我們需要匯入crypto/rand包,並建立一個位元組數組來儲存隨機數。程式碼範例如下:packagemain

如何使用PHP數組產生隨機數字和驗證碼隨機數和驗證碼在開發網站和應用程式過程中非常常見。 PHP提供了各種方法來產生隨機數字和驗證碼。本文將介紹如何使用PHP數組產生隨機數字和驗證碼,並附帶對應的程式碼範例。一、產生隨機數在PHP中,我們可以使用rand()函數來產生隨機數。 rand()函數需要兩個參數,即最小值和最大值。範例程式碼如下:$min=1;$max=

Java中如何使用Random.nextInt()方法產生隨機數?隨機數在電腦科學有廣泛應用,可用於產生密碼、遊戲中的隨機事件、資料科學中的隨機抽樣等。 Java中提供了Random類別來產生隨機數,其中的nextInt()方法可以用來產生一個隨機整數。以下我將介紹如何使用Random.nextInt()方法產生隨機數,並提供具體的程式碼範例。首先,我們需要

在Golang中避免產生重複隨機數的方法:建立一個新的隨機數產生器rand.New(rand.Source)。使用rand.NewSource(time.Now().UnixNano())作為熵源。使用rand.Intn(n)產生隨機整數。

探索NumPy產生隨機數的方法及應用引言:隨機數在電腦科學和統計學中有著廣泛的應用,例如模擬實驗、資料產生和特徵選擇等。在Python中,NumPy(NumericalPython)庫是一個強大的數值計算庫,提供了許多用於產生隨機數的函數。本文將對NumPy中的隨機數產生方法進行探索,並給出具體的程式碼範例。一、NumPy的隨機數產生函數NumPy提供

在本文中,我們將深入探討與C程式設計中的字串操作相關的一個有趣且實用的問題。我們將在C語言中建構一個「隨機密碼產生器」。這個問題不僅可以增強您對字串操作的理解,還可以增加您對C標準庫的知識。問題陳述任務是建立一個產生指定長度的隨機密碼的程式。密碼應包含大小寫字母、數字和特殊字元。 C解決方案方法為了解決這個問題,我們將利用C標準函式庫的強大功能。我們將使用rand()函數在指定範圍內產生隨機數。我們將創建一個包含密碼可能包含的所有字符的字串,然後對於密碼中的每個字符,我們將從這個字串中隨機選擇一個
