O(n^3/2)的舍伍德排序算法

计算机算法设计与分析-王晓东著,课后题有一题设计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)可以表示为\sqrt{1}+\sqrt{2}+\sqrt{3}+...+\sqrt{n}

那么O(n)=\int_{0}^{n}\sqrt{x}dx+M(x),其中M(x)为2区域从0到n的积分

显然 M(x)<\sum_{0}^{n-1}(\sqrt{n+1}-\sqrt{n})=\sqrt{n}-1

O(n)<\frac{2}{3}\cdot n^{\frac{3}{2}}+\sqrt{n}-1

忽略低阶项,O(n)=n^{\frac{3}{2}}

补充:舍伍德算法查找元素为什么是O(n/k+1)

对于一个有序的数组,例如1,3,5,7,11,13

我们随机生成一个非负整数作为下标,随机生成k次,取最接近目标数的位置开始顺序查找

我们取最坏情况,需要查找元素13

如果k次随机生成的下标至少有一次为5(元素13的下标),那么还需顺序查找0次

如果k次随机生成的下标没有5,至少有一次4(元素11的下标),那么还需顺序查找1次

......

记E(k)为随机生成k次的查找次数的数学期望

那么E(k)=1[1-(\frac{n-1}{n})^{k}]+2[(\frac{n-1}{n})^{k}\cdot (1-(\frac{n-2}{n-1})^{k})]+ ...+(n-1)[(\frac{2}{n})^{k}\cdot(1-(\frac{1}{2})^{k})]

化简后E(k)=\frac{1^k+2^k+3^k+...+n^k}{n^k}

同理得E(k)=\frac{\int_{0}^{n}x^k+M(x)}{n^k}

M(x)<\sum_{1}^{n-1}[(n+1)^k-n^k]=n^k-1

E(k) < \frac{\frac{n^{k+1}}{k+1}+n^k-1}{n^k}=\frac{n}{k+1}+1- \frac{1}{n^k}

忽略低阶项,O(n) = \frac{n}{k+1}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值