因为我们在
Lounge<C++> 中都有点无聊,所以我写了一个搜索来查找特定长度的“消息”的平均偏移量。
我下载了100万位圆周率数并查找了所有固定长度(例如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
请注意,当我们搜索的π的数字数量达到其数字数量的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和π的位数:https://gist.github.com/3062541