Boost Random Number Generator Library

๋ฐ˜์‘ํ˜•

Boost Library์˜ ๋žœ๋คํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค.


๋ณดํ†ต C์–ธ์–ด์—์„œ ๋‚œ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•˜๋ฉด, rand()/srand()๋ฅผ ์‚ฌ์šฉํ•˜์…จ์„๊ฒ๋‹ˆ๋‹ค. ์ข€ ๋” ๋ง๋ถ™์—ฌ์„œ time.h๋ฅผ includeํ•˜์—ฌ time๊นŒ์ง€ ์ผ๋˜ ์‚ฌ๋žŒ๋“ค๋„ ์•„๋งˆ ๋Œ€๋ถ€๋ถ„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๋จผ์ € Boost Documentation์— ์ ํ˜€์žˆ๋Š” ๋žœ๋คํ•จ์ˆ˜์— ๋Œ€ํ•ด ์ ์–ด๋ดค์Šต๋‹ˆ๋‹ค.


๋‚œ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹ค์–‘ํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ๋ฌธ์ œ์˜์—ญ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


1. ๊ณ„์‚ฐ (์‹œ๋ฎฌ๋ ˆ์ด์…˜, ๋ชฌํ…Œ์นผ๋กœ๋ฆฌ ์ ๋ถ„)

2. ๊ฒŒ์ž„ (์ ์˜ ์›€์ง์ž„)

3. ๋ณด์•ˆ (๊ฑด์ƒ์„ฑ)

4. ํ…Œ์ŠคํŠธ (๋ฌด์ž‘์œ„ํ•œ ํ™”์ดํŠธ ๋ฐ•์Šค ํ…Œ์ŠคํŠธ)


๋ฌธ์ œ์˜์—ญ์˜ ์š”๊ตฌ์— ๋”ฐ๋ฅธ ๋‚œ์ˆ˜ ์ƒ์„ฑ์ž์˜ ๋‹ค์–‘ํ•œ ๋ณ€ํ™”.


1. ๋น„๊ฒฐ์ •์  ๋‚œ์ˆ˜์ƒ์„ฑ์ž

2. ์˜์‚ฌ๊ฒฐ์ • ๋‚œ์ˆ˜์ƒ์„ฑ์ž

3. ์ค€ ๋‚œ์ˆ˜์ƒ์„ฑ์ž


๋žœ๋คํ•จ์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ ๋ชฉํ‘œ


1. Third-Party(์ œ 3์ž ํšŒ์‚ฌ)์—์„œ ๊ฐœ๋ฐœํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ๊ณผ ๋‚œ์ˆ˜์ƒ์„ฑ์ž์˜ ์‰ฌ์šด ๊ฒฐํ•ฉ

2. ์ƒ์„ฑ์ž์˜ ํƒ€๋‹น์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜

3. ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋ฐฉํ•˜๋Š” ๊ฐ„์ดํ•œ Front-end Class ์ œ๊ณต

4. ์ตœ๋Œ€ํ•œ์˜ ํšจ์œจ์„ฑ

5. Front-end ์ฒ˜๋ฆฌ์— ์žˆ์–ด์„œ ์–‘์žํ™” ํšจ๊ณผ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ



Boost์—์„œ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ random.hpp๋ฅผ includeํ•ฉ๋‹ˆ๋‹ค.


๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ ํผํฌ๋จผ์Šค ๋น„๊ต 

(์ถœ์ฒ˜ : http://cafe.naver.com/devrookie)


1. rand48 : 0.096

2. rand48 run-time configurable : 0.697

3. lrand48 glibc 2.1.2 : 0.844

4. minstd_rand : 0.174

5. ecuyer1988 : 0.445

6. kreutzer1986 : 0.249

7. hellekalek1995 (inversive) : 4.895

8. mt11213b : 0.165

9. mt19937 : 0.165

10. mt19937 original : 0.185

11. lagged_fibonachi607 : 0.111

12. lagged_fibonachi4423 : 0.112

13. lagged_fibonachi19937 : 0.113

14. lagged_fibonachi23209 : 0.122

15. lagged_fibonachi44497 : 0.263


๊ทธ๋Ÿผ ์ฝ”๋“œ๋ฅผ ํ•œ ๊ฐœ ์งœ๋ณด๋„๋ก ํ•˜์ง€์š”..


#include <iostream>

#include <boost/random.hpp>

using namespace std;

using namespace boost;

int main()

{

rand48    dl;

uniform_int<>    kid(1,100);

variate_generator < rand48, uniform_int<> rand(dl, kid);


for(int i=0;i<20;i++)

cout << rand() << ' ';


return 0;

}


์œ„ ์ฝ”๋“œ๋Š” rand48 ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. 1,100๊นŒ์ง€ ์•„๋ฌด ์ˆซ์ž๋‚˜ ๋ฝ‘์•„์„œ 20๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋” ๋‚˜์•„๊ฐ€์„œ time ํ•จ์ˆ˜๋ฅผ ์“ด๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ˆซ์ž๊ฐ€ ๋ฐ”๋€Œ๊ฒ ์ง€์š”? ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๋ช…ํ•ด๋ณด์ž๋ฉด, ๋จผ์ € ๋‚œ์ˆ˜ ๋ฐœ์ƒ๊ธฐ ํ•˜๋‚˜๋ฅผ ์ •ํ•ด์ค๋‹ˆ๋‹ค. rand48์„ ์ •ํ•ด์คฌ์ง€์š”. ๊ทธ ๋‹ค์Œ int๋ฉด int, double์ด๋ฉด double ๋“ฑ ์ž๋ฃŒํ˜•์„ ์ •ํ•ด ๋žœ๋ค์œผ๋กœ ๋ฝ‘์•„์˜ฌ ์ˆซ์ž์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” 1์—์„œ 100๊นŒ์ง€๋ฅผ ์ง€์ •ํ•ด์คฌ์ง€์š”. ์ค‘๊ฐ„๊ณผ์ •์ด ๋น ์ ธ์žˆ์ง€๋งŒ ๋‚˜์ค‘์— seed๋ผ๋Š” ๊ฐ’์„ ๋ฉค๋ฒ„ํ•จ์ˆ˜๋กœ ๋„˜๊ฒจ์ค˜์„œ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” ๋น ์ง„ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋งŒ๋“ค์–ด์ค€ generator์™€ ๋ฒ”์œ„๋ฅผ variate_generator (์—ฌ๊ธฐ์„œ๋Š” using namespace๋ฅผ ์‚ฌ์šฉ)๋กœ ์ „๋‹ฌํ•˜์—ฌ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ถœ๋ ฅ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๊ทธ ์™ธ์—๋„ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์…”์„œ ์‚ฌ์šฉํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.





๋ฐ˜์‘ํ˜•

'Programming > C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

chkmd5 (ํŒŒ์ผ MD5 ํ•ด์‹œ๊ฐ’ ๊ฐ€์ ธ์˜ค๋Š” ํ”„๋กœ๊ทธ๋žจ, only Windows OS)  (0) 2017.01.26
System Call Function VS Library Call Function  (0) 2016.12.26
GCC Stack Smashing Protector  (0) 2016.04.03
Boost thread Library  (0) 2013.08.12
Boost Library  (0) 2013.04.12
TAGS.

Tistory Comments