저의 하찮은 뇌로는 이해할 수 없었기에 글로씁니다.
우선 이프로그램은 50%확률로 -1, 50%확률로 +1 을 더하는 프로그램입니다.
테스트 요소의 개수는 10000개 입니다.
모든 시행을 5000번 시행한 결과는 다음과 같습니다. ( 총 5천만번)
2234 : 1
2236 : 1
2238 : 8
2240 : 2
2242 : 4
2244 : 12
2246 : 11
2248 : 15
2250 : 18
2252 : 11
2254 : 7
2256 : 9
2258 : 4
2260 : 1
2262 : 3
2264 : 5
2266 : 2
2270 : 3
2272 : 2
2274 : 3
2276 : 4
2278 : 2
2280 : 1
2282 : 2
2284 : 3
2286 : 3
2288 : 2
2290 : 3
2292 : 2
2294 : 4
2296 : 1
2298 : 2
2300 : 2
2302 : 5
2304 : 3
2306 : 1
2308 : 2
2310 : 4
2312 : 2
2314 : 3
2316 : 4
2318 : 2
2320 : 3
2322 : 2
2324 : 2
2326 : 2
2328 : 3
2330 : 1
2332 : 3
2334 : 4
2336 : 1
2338 : 3
2340 : 4
2342 : 2
2344 : 1
2346 : 2
2348 : 1
2350 : 3
2352 : 3
2354 : 2
2356 : 2
2358 : 2
2364 : 1
2366 : 2
2368 : 5
2372 : 4
2374 : 1
2376 : 3
2378 : 1
2380 : 1
2386 : 1
2388 : 1
2398 : 1
2400 : 4
2402 : 6
2404 : 6
2406 : 9
2408 : 12
2410 : 10
2412 : 13
2414 : 10
2416 : 14
2418 : 12
2420 : 15
2422 : 20
2424 : 11
2426 : 9
2428 : 15
2430 : 20
2432 : 23
2434 : 35
2436 : 36
2438 : 35
2440 : 33
2442 : 28
2444 : 32
2446 : 28
2448 : 38
2450 : 47
2452 : 47
2454 : 59
2456 : 62
2458 : 75
2460 : 70
2462 : 78
2464 : 73
2466 : 106
2468 : 93
2470 : 131
2472 : 126
2474 : 154
2476 : 129
2478 : 160
2480 : 182
2482 : 191
2484 : 190
2486 : 239
2488 : 237
2490 : 314
2492 : 321
2494 : 312
2496 : 354
2498 : 358
2500 : 379
2502 : 335
2504 : 338
2506 : 325
2508 : 332
2510 : 304
2512 : 245
2514 : 228
2516 : 177
2518 : 204
2520 : 178
2522 : 165
2524 : 148
2526 : 124
2528 : 148
2530 : 122
2532 : 102
2534 : 100
2536 : 81
2538 : 62
2540 : 69
2542 : 63
2544 : 71
2546 : 55
2548 : 56
2550 : 45
2552 : 38
2554 : 32
2556 : 23
2558 : 25
2560 : 39
2562 : 29
2564 : 42
2566 : 24
2568 : 32
2570 : 17
2572 : 12
2574 : 13
2576 : 13
2578 : 15
2580 : 23
2582 : 10
2584 : 11
2586 : 14
2588 : 11
2590 : 13
2592 : 9
2594 : 9
2596 : 5
2598 : 4
2600 : 3
2602 : 3
2604 : 1
2606 : 2
2620 : 3
2622 : 1
2626 : 4
2628 : 2
2630 : 2
2632 : 4
2634 : 1
2636 : 1
2638 : 1
2640 : 1
2644 : 5
2646 : 2
2650 : 3
2652 : 2
2654 : 2
2656 : 2
2658 : 1
2660 : 5
2662 : 4
2664 : 1
2666 : 1
2668 : 2
2670 : 3
2672 : 3
2674 : 2
2676 : 4
2678 : 2
2680 : 1
2682 : 5
2686 : 5
2688 : 2
2690 : 1
2692 : 2
2694 : 3
2696 : 3
2698 : 4
2700 : 1
2702 : 4
2704 : 1
2706 : 5
2710 : 2
2712 : 2
2714 : 6
2716 : 1
2718 : 1
2720 : 4
2722 : 4
2724 : 2
2726 : 1
2728 : 3
2730 : 3
2734 : 1
2736 : 5
2738 : 4
2740 : 2
2742 : 4
2744 : 10
2746 : 7
2748 : 7
2750 : 17
2752 : 16
2754 : 11
2756 : 13
2758 : 7
2760 : 4
2762 : 3
2764 : 2
2766 : 1
의문이 드는 부분은 2244 ~ 2252, 2744~2756 부분입니다.
매번 시도할 때 마다 비슷한 위치에 저리 뭉치는데 이유를 모르겠네여 ;;
코드는 다음과 같습니다.
class pc_random
{
public:
static void set_bio()
{
srand( time(NULL) );
}
static bool get_bio()
{
return rand() % 2;
}
};
class object
{
public:
size_t index;
size_t left=0, right=0;
size_t score=2500;
void lr(bool lr)
{
if ( lr == false )
{left++; score -= 1;}
else
{right++; score += 1;}
if ( score < 1 ) score = 1;
else if ( score >= 5000 ) score = 5000;
}
};
class pc_test
{
public:
std::vector<object> objects;
pc_test()
: objects(10000)
{
pc_random::set_bio();
for ( int i = 0; i < 10000; i++ )
objects[i].index = i;
}
void start()
{
for(auto& v:objects)
{
v.lr(pc_random::get_bio());
}
}
void print()
{
std::vector<std::vector<int>> score(5000+1);
for(auto& v:objects)
{
score[v.score].push_back(v.index);
}
for ( int i = 1; i < 5001; i++ )
{
if ( score[i].size() > 0)
std::cout << i << " : " << score[i].size() << std::endl;
}
}
};
int main()
{
pc_test test;
for ( int i = 0; i < 5000; i++ )
{
test.start();
}
test.print();
std::cout << std::endl;
return 0;
}
ㅇㅅㅇ
이게다 선형합동법 때문에 그렇데요
c++ random 헤더 쓰면 해결됩니다
갤 내에 검샏 ㄱ
굉장히 신기한 일일세.. 아무리 rand 함수가 진정한 의미의 난수가 아닌 의사난수 여서 패턴이 나올 확률이 있다 할지라도 그 패턴이 연속해서 300번가량 +1 을 더하도록 나온다는것은 말이 안되는데? 근데 저거 2000대 말고 전체 0부터 1만까지로 해서 한번 그래프 그려볼래? 혹시 정규분포처럼 그림이 나올려나?
한가지 테스트 해보고 싶은게 있는데 단순히 +1 하고 -1 연산만 하지 말고 %2 하기 전의 rand 값이 뭐로 찍히는지도 같이 출력해서 패턴좀 분석해보자..
이거때문에 씨발 사다리가 20연속짝나오는거구만 개새끼들