因为我们都在Lounge<C++>中感到无聊,所以我继续执行搜索以找出特定长度的“消息”的平均偏移量。
我下载了 100 万位 Pi并查找了所有固定长度的子序列(例如 00..99)。根据消息长度,您将获得以下输出:
Digits Avg.Offset Unfound
1 8.1 0
2 107.07 0
3 989.874 0
4 9940.46 0
5 99959.4 8 <-- note
请注意,在 pi searched的位数的 10% 处,我们已经开始遇到未找到的模式。
还要注意,正如信息熵定律所预测的那样,平均偏移量大致与消息的长度成正比。
原始输出和时间:
跑步
for a in 10 100 1000 10000 100000; do \make -B CFLAGS=-DNUMRANGE=$a && time ./test; done
节目
g++ -DNUMRANGE=10 -std=c++0x -g -O3 -fopenmp -march=native test.cpp -o test && ./test
0 unfound
81 cumulative, 8.1 average
real 0m0.008s
user 0m0.008s
sys 0m0.004s
g++ -DNUMRANGE=100 -std=c++0x -g -O3 -fopenmp -march=native test.cpp -o test && ./test
0 unfound
10707 cumulative, 107.07 average
real 0m0.004s
g++ -DNUMRANGE=1000 -std=c++0x -g -O3 -fopenmp -march=native test.cpp -o test && ./test
0 unfound
989874 cumulative, 989.874 average
real 0m0.010s
g++ -DNUMRANGE=10000 -std=c++0x -g -O3 -fopenmp -march=native test.cpp -o test && ./test
0 unfound
9.94046e+07 cumulative, 9940.46 average
real 0m0.081s
g++ -DNUMRANGE=100000 -std=c++0x -g -O3 -fopenmp -march=native test.cpp -o test && ./test
8 unfound
9.99594e+09 cumulative, 99959.4 average
real 0m7.387s
完整代码、makefile 和 pi 数字:https ://gist.github.com/3062541