无限猴子定理最早是由埃米尔·博雷尔在1909年出版的一本谈概率的书籍中提到的,此书中介绍了“打字的猴子”的概念。无限猴子定理是概率论中的柯尔莫哥洛夫的零一律的其中一个命题的例子。大概意思是,如果让一只猴子在打字机上随机地进行按键,如果一直不停的这样按下去,只要时间达到无穷时,这只猴子就几乎必然可以打出任何给定的文字,甚至是莎士比亚的全套著作也可以打出来。
猴子排序是基于无限猴子定理形成的算法(x
流程
- 随机生成待排序列的一个排列,检测该排列是否是递增序列。
- 重复此过程,直至完成排序。
时间复杂度分析
平均复杂度:n个元素的全排列为n!,则生成有序序列的次数期望为n!。生成一个排列并check的时间复杂度为O(n),相乘得平均复杂度O(n*(n!))。
最好复杂度:一次成功的欧洲猴子O(n)。
最坏复杂度:永不成功的非洲猴子INF。