专栏文章

如何求最小值

休闲·娱乐参与者 133已保存评论 139

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
139 条
当前快照
1 份
快照标识符
@mip77miw
此快照首次捕获于
2025/12/03 07:17
3 个月前
此快照最后确认于
2025/12/03 07:17
3 个月前
查看原文
以下介绍一个全新的只用比较求出 nn 个元素最小值的算法:
随机选 kk 个元素,然后递归地找到这 kk 个元素的最小值。此时该最小值的排名期望不超过 nk\frac{n}{k}。用这个元素和剩余的 nkn-k 个元素比较,把其中比这个元素小的元素取出来,递归找这一部分的最小值。
找最小值的比较次数期望不超过 C(n)=C(nk)+C(k)+nkC(n)=C(\frac{n}{k})+C(k)+n-k,时间复杂度为 T(n)=T(nk)+T(k)+O(n)T(n)=T(\frac{n}{k})+T(k)+O(n)
选取不同的 kk 可以平衡使用的比较次数与时间复杂度。例如:
  • k=nk=\sqrt{n} 时比较次数为 n+O(n)n+O(\sqrt{n}),时间复杂度则是 O(n)O(n)
  • k=n1k=n-1 时比较次数仅仅为 n1n-1,但是时间复杂度为 O(n2)O(n^2)
该算法十分灵活,扩展性强,不失为一种好的求最小值的方法。

评论

139 条评论,欢迎与作者交流。

正在加载评论...