c++11 random seed test

시드 세팅에 따른 성능 비교

quick sort 성능 테스트 중 랜덤 피봇에대한 성능 저하가 심각했었는데 시드를 매 반복마다 초기화할때 얼마나 느려지는지에 대해서 실제 테스트를 했었던 수치이다.

1. 고정 인덱스

퀵소트 테스트 돌리는데 피봇으로 고정 인덱스 박아넣으면 소팅하는 정렬상태는 비중복 값으로 완전랜덤으로 섞여있음

n = 10000000

  Hoare’s lomuto’s
1회 0.748 0.838
2회 0.711 0.753
3회 0.716 0.757
4회 0.722 0.762
5회 0.712 0.763
6회 0.725 0.754
7회 0.722 0.768
8회 0.709 0.746
9회 0.732 0.743
10회 0.727 0.738

2. 여기서 매 파티션마다 시드값을 새로 줄경우에

1
2
3
std::mt19937_64 rng;
rng.seed(std::random_device()());
std::uniform_int_distribution<int>distribution(start, end)

n = 1000000 첫번째보다 n은 10배 작음.

  Hoare’s lomuto’s
1회 2.969 2.919
2회 2.874 2.911
3회 2.897 2.889
4회 2.919 2.886
5회 2.916 2.875
6회 2.888 2.878
7회 2.9 2.883
8회 2.924 2.903
9회 2.891 2.871
10회 2.88 2.904

3. 시드생성을 전역에

다음코드를 전역과 메인함수에 넣고,

1
2
std::mt19937_64 rng;
rng.seed(std::random_device()());
1
std::uniform_int_distribution<int>distribution(start, end)

이것만 재귀에 넣어서 구했을때 n은 두번째와 동일

  Hoare’s lomuto’s
1회 0.095 0.101
2회 0.088 0.104
3회 0.093 0.094
4회 0.101 0.098
5회 0.093 0.093
6회 0.088 0.091
7회 0.085 0.092
8회 0.083 0.089
9회 0.085 0.091
10회 0.085 0.091
Posted 2020-01-07