摘要: 随机排列是个很常用的算法,比如洗牌。算法思想很简单,比如有一副整理好的牌,每次随机抽取一张最后就组成一副随机的牌了,并且可以证明所有可能性的排列是等概率的。但是该算法的空间复杂度是O(n),如果每次抽牌都插入到头部,则最坏情况下的时间复杂度是O(n*n)。参考Introduction to Algorithm 5.3的算法,其实对第二种方法稍作改进就可以达到O(n)。算法如下:保持头部的以抽取队列,以及尾部的为抽取队列,一开始头为空,尾为满。从尾部随机抽牌,与尾部第一张交换,头部加一,尾部减一直到尾部为空以下是javascript代码[代码] 阅读全文
posted @ 2011-01-16 00:00 dragonpig 阅读(928) 评论(0) 推荐(0) 编辑