计算机算法设计与分析-王晓东著,课后题有一题设计O(n^3/2)的舍伍德排序算法
答案为对于第i次插入元素,需要O(i^1/2)的时间,这里的O(i^1/2)是因为舍伍德算法查找元素需要O(n/k+1)的时间,k为随机数生成次数,取k=n^1/2,得到O(n^1/2)。数据结构用数组模拟链表,对于插入只需要O(1)时间,所以第i次插入元素,需要O(i^1/2)的时间。那么总的时间复杂度O(n^3/2)如何得到?
显然,我们总共需要插入n次,那么总的时间复杂度O(n)可以表示为
那么,其中M(x)为2区域从0到n的积分
显然
则
忽略低阶项,
补充:舍伍德算法查找元素为什么是O(n/k+1)
对于一个有序的数组,例如1,3,5,7,11,13
我们随机生成一个非负整数作为下标,随机生成k次,取最接近目标数的位置开始顺序查找
我们取最坏情况,需要查找元素13
如果k次随机生成的下标至少有一次为5(元素13的下标),那么还需顺序查找0次
如果k次随机生成的下标没有5,至少有一次4(元素11的下标),那么还需顺序查找1次
......
记E(k)为随机生成k次的查找次数的数学期望
那么
化简后
同理得
则
忽略低阶项,