二分查找算法的big oh是如何计算的?

发布于 2024-11-09 07:10:18 字数 25 浏览 0 评论 0原文

我正在寻找数学证明,而不仅仅是答案。

I'm looking for the mathematical proof, not just the answer.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小草泠泠 2024-11-16 07:10:18

二分查找的递归关系是(在最坏的情况下)

T(n) = T(n/2) + O(1)

使用马斯特定理

输入图片这里的描述

  • n 是问题的大小。
  • a是递归中子问题的数量。
  • n/b 是每个子问题的大小。 (这里假设所有子问题本质上都是相同的大小。)
  • f(n)是递归调用之外完成的工作的成本,其中包括划分问题的成本和合并子问题的解决方案的成本。

这里 a = 1,b = 2 且 f(n) = O(1) [常数]

我们有 f(n) = O(1) = O(nlogba< /sup>)

=>; T(n) = O(nlogba log2 n)) = O(log2 n )

The recurrence relation of binary search is (in the worst case)

T(n) = T(n/2) + O(1)

Using Master's theorem

enter image description here

  • n is the size of the problem.
  • a is the number of subproblems in the recursion.
  • n/b is the size of each subproblem. (Here it is assumed that all subproblems are essentially the same size.)
  • f (n) is the cost of the work done outside the recursive calls, which includes the cost of dividing the problem and the cost of merging the solutions to the subproblems.

Here a = 1, b = 2 and f(n) = O(1) [Constant]

We have f(n) = O(1) = O(nlogba)

=> T(n) = O(nlogba log2 n)) = O(log2 n)

桜花祭 2024-11-16 07:10:18

证明非常简单:如果您还没有找到您要查找的项目,则每次递归都会将剩余项目的数量减半。由于你最多只能将一个数 n 递归地分成两半 log2(n) 次,这也是递归的边界:

2·2·…·2·2 = 2xn ⇒ log2(2 x) = x ≤ log2(n)

这里 x > 也是递归次数。本地成本为 O(1),总共为 O(log n)。

The proof is quite simple: With each recursion you halve the number of remaining items if you’ve not already found the item you were looking for. And as you can only divide a number n recursively into halves at most log2(n) times, this is also the boundary for the recursion:

2·2·…·2·2 = 2xn ⇒ log2(2x) = x ≤ log2(n)

Here x is also the number of recursions. And with a local cost of O(1) it’s O(log n) in total.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文