作者EdisonX (卡卡獸)
看板C_and_CPP
標題Re: [問題] 關於在陣列中快速產生亂數的方法
時間Thu Oct 3 21:59:16 2013
之前用 web 版看這篇就很想回,不過環境擋 telnet , 所以有點晚回覆..
言歸正傳。
※ 引述《abab7974 (幻滅)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VC++2012
: 問題(Question):
: 如何在陣列中快速產生亂數
恕刪...
: 我的老師希望的是
: loop1
: [1][2][3][4][5][6]
: [ ][ ][ ][ ][ ][ ]
: loop2
: [1][2][3][4][5][6]
: [4][7][8][0][5][6]
恕刪...
: 我有看到書上似乎可以用vector一次產生一整列的值,不過似乎只能固定值
: 因為當我使用亂數產生時,應該是同時產生的關係導致時間一樣所以所有亂數產生的值
: 都是一樣的。
: 這是我測試的程式碼
: http://codepad.org/wNBx69lD
: 我GOOGLE了很多資料,還是找不太到我可以改的方法,所以想來這請教一下。
該是偷打廣告 - C++11 的時候了。
http://en.cppreference.com/w/cpp/numeric/random/seed_seq
#include <random>
#include <cstdint>
#include <iostream>
int main()
{
std::seed_seq seq{1,2,3,4,5};
std::vector<std::uint32_t> seeds(10);
seq.generate(seeds.begin(), seeds.end());
for (std::uint32_t n : seeds) {
std::cout << n << '\n';
}
}
--------------------------- 可愛分隔線 --------------------------
其實你們老師要的東西,在 C++ 11 大多都 support 了,
然後有種 array 是設計給數值分析用的 : valarray (不到 C++11 就有了)
http://www.cplusplus.com/reference/valarray/
正常而言使用它操作 NR 的東西速度應該要 "飛快" ,
不過目前這東西實測結果...嗯,各家 compiler 其實效果不一,
目前就我所知,在 VC 系列下效果很糟,
( 我把實測數據拿掉了,之前測過 VS / g++ CArray , vector , valarry ,
結果 VS valarry 效果真的很糟 ,有興趣可自己玩玩 )
至於有沒有調用 SSE2 、做優化的 valarry ... 嗯,我沒再深入找了。
再來是 C++ 11 其實多了一堆和 NR 有關的 function / class ,
只是要到可讓業界拿去用的話,可能還有段路要走就是了,其他的有興趣自己查。
http://en.cppreference.com/w/cpp/numeric
--------------------------- 可愛分隔線 --------------------------
提外話,上一篇有提到這本書
數值分析 使用C語言 程曉旭 耿魯靜 張海 王勇
其實這本書寫得算不錯,只是後面的章節說明草率就是了。
然後,NR 的書籍不要太要求, Code 撰寫一定符合 C99 還是什麼標準、
什麼技巧一定要用、記憶體防呆一定要夠漂亮...等,
NR 的書只是用 Code 表達它的算法,細節從來沒太 care 過,
其他的...嗯,就看個人造化了。
--
就算把新鮮的肝拿回去,還是一樣寫碼到禿頭,加班到天亮,
永遠當老闆的傀儡 你是不是想這麼做?
是的話你就拿回去~ 拿啊!!
九世宅男 : 下輩子不要再讓我幹工程師了 ~
< Kuso 星爺語錄 >
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 101.8.216.167
→ Schottky:compile不過讓人覺得很沒誠意啊,至少code要寫到可以跑吧? 10/03 22:11
→ Schottky:不然直接寫pseudo code也可以,還在書名烙什麼C語言... 10/03 22:12
→ EdisonX:compile 不過是有點扯...第一版沒這問題說 10/03 23:06
→ azureblaze:那個用K&R時代的compiler說不定能跑XD 10/03 23:12
→ azureblaze:雖然看起來有人連「"」都翻譯了 10/03 23:12
→ Schottky:不行, 我試過了... XD 10/03 23:23
→ Schottky:那不是K&R的問題,而是根本就胡亂include沒有好好宣告 10/03 23:24
→ Schottky:不過既然第一版沒這問題,可見至少有一個版本是正確的... 10/03 23:26
推 abab7974:感謝E大的資訊,我之後會來研究看看的,謝謝 10/04 11:27