網站首頁 編程語言 正文
真隨機數
自然界中的有很多不確定的物理現象,通過測量這些現象,就可以獲得真隨機數。
比如白噪聲的幅值、電子元器件的電壓噪聲等,真隨機數可以通過用硬件對這些參數進行采集獲得。
偽隨機數
偽隨機數序列是用確定性的算法計算出來的周期很長的序列。
程序的運行過程是一個確定的過程,每一條指令都是確定的,因此不能產生真的隨機數。? ? ? ?
說到偽隨機數就會說到種子,什么是種子呢,我們可以將種子理解為一個初始值,特定算法根據這個初始值產生一個一定的序列,生成的這個序列“看起來”是隨機的,實際上是一個周期很長的確定序列。
如果每次的種子設置得相同,那么產生的序列都是相同的。? ? ? ?
舉個例子
我們可以簡單的設置這個種子為某個數,比如1。
請看如下代碼,用srand()設置種子的值,用rand()產生偽隨機數序列,需要包含頭文件#include <stdlib.h>。重復運行下列代碼,因為種子相同,所以每次輸出的序列都是如圖的序列"41 18467 6334 26500 …"。
srand(1); // 設置種子的值為1,如果不設置,默認種子為1
for (int i = 0; i < 10; ++i) {
cout << rand() << " "; // 輸出10個偽隨機數
}
如果每次種子設置得不同,那生成的序列也將不同。 如何獲得不同的種子呢?? ? ? ?
可以用C語言中的庫函數 time_t time(time_t *seconds) 返回自1970-01-01 00:00:00 UTC 起經過的時間,以秒為單位。
這個函數的入參seconds也能保存結果,請看如下代碼,輸出的t和seconds的值是一樣的。
time_t seconds;
time_t t=time(&seconds);
cout << t <<" "<< seconds <<endl; // t和seconds的值是一樣的
那么,我們將當前的時間設置為種子,由于時間一直在變,種子就一直在變,每次就能生成不同的偽隨機數序列。
time_t t=time(nullptr);
srand(t); // 設置種子的值為時間
for (int i = 0; i < 10; ++i) {
cout << rand() << " ";
}
C++代碼示例
題目
將1-100的有序序列變成無序序列,要求每次運行的結果不同。
// 題目:將1-100的有序序列變成無序序列,要求每次運行的結果不同。
void fun(vector<int> &vec) {
time_t t = time(nullptr);
srand(t); // 設置種子的值為時間
rand();
for (int i = 0; i < 500; ++i) {
// 每次隨機交換數組中的兩位
swap(vec[rand() % 100], vec[rand() % 100]);
}
}
int main() {
vector<int> vec(100);
for (int i = 0; i < 100; ++i) {
vec[i] = i+1;
}
fun(vec);
for (auto it : vec) {
cout << it << " ";
}
cout << endl;
system("pause");
}
原文鏈接:https://blog.csdn.net/weixin_43222324/article/details/108631034
相關推薦
- 2022-08-21 Android自定義view貝塞爾曲線_Android
- 2022-04-01 Fatal Python error: Py_Initialize: unable to load
- 2022-07-26 當本地ping通虛擬機,虛擬機ping不通本地時。
- 2022-04-12 Android中導航組件Navigation的實現原理_Android
- 2023-06-20 k8s應用監控探針詳解_云其它
- 2022-12-11 React高級特性Context萬字詳細解讀_React
- 2022-03-28 深入理解numpy中argmax的具體使用_python
- 2022-11-27 Git基礎學習之標簽tag的使用詳解_相關技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支