Vacant
猴子排序BogoSort,慢到笑出声的奇葩算法

access_time
brush 290个字
whatshot 595 ℃

首先我们介绍无限猴子定理
无限猴子定理最早是由埃米尔·博雷尔在1909年出版的一本谈概率的书籍中提到的,此书中介绍了“打字的猴子”的概念。无限猴子定理是概率论中的柯尔莫哥洛夫的零一律的其中一个命题的例子。大概意思是,如果让一只猴子在打字机上随机地进行按键,如果一直不停的这样按下去,只要时间达到无穷时,这只猴子就几乎必然可以打出任何给定的文字,甚至是莎士比亚的全套著作也可以打出来。
根据猴子定理,如果我们不断把数组中的元素打乱(洗牌),那么在无限长的时间里,这个数列在某次肯定会变成有序。

// BogoSort 猴子排序 平均复杂度:O(n*n!)(这是我见过效率最低的算法)
// 每次把原始数据打乱一次,如果排序好了就返回,没排序好就继续打乱
func BogoSort(s []int) {
    // 打乱这个数组的元素(洗牌)
    rand.Shuffle(len(s), func(i, j int) {
        s[i], s[j] = s[j], s[i]
    })
    // 没排序好,再跑一次 :(
    if IsSorted(s) == false {
        BogoSort(s)
    }
}

#如无特别声明,该文章均为 Vacant 原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。
#最后编辑时间为: 2022 年 05 月 21 日


create 添加新评论


account_circle
email
language
textsms





关于 DreamCat

主题名称:DreamCat | 版本:X2.6.220211

主题开发:HanFengA7 | TeddyNight | Dev-Leo | CornWorld | WhiteBearcn | DFFZMXJ

Designed by HanFengA7 Power by Typecho

Copyright © 2015-2022 by LychApe All rights reserved!

加我的QQ
加我的微博
加我的支付宝
加我的微信