【问题标题】:Binary search complexity analysis (Uneven Split)二分查找复杂度分析(不均匀拆分)
【发布时间】:2021-08-25 21:39:27
【问题描述】:

设计一种搜索算法,将排序后的数组分成三分之一和三分之二,而不是像二进制搜索算法“BinSrch”中的两半。分析算法的时间复杂度。

我已经完成了算法的编写,需要复杂性分析部分的帮助,有人可以解释一下递归关系是什么样的吗?

【问题讨论】:

  • 如果我的回答解决了您的问题,请将其标记为已接受:)

标签: arrays algorithm data-structures binary-search divide-and-conquer


【解决方案1】:

如果这是一个常规的二分搜索,如果你想要的元素是每次迭代切割一半数组后留在数组中的最后一个元素,那么将实现最差的时间复杂度。 “我可以将这个数组分成多少次直到它剩下 1 个元素”这个问题的答案是 log(n),底数为 2 - 以后称为 log2(n)。这就是常规 bin 搜索的时间复杂度为 log2(n) 的原因。

同样的逻辑也适用于您的案例。您再次需要尽可能地延长搜索时间,如果每次迭代都使用数组的较大部分 - 2/3 部分 - 就会发生这种情况,因为这会导致它的大小减小得最慢。 那么,您可以将数组的剩余部分削减多少次,直到剩下 1 个元素?再次 log(n),但这次的底数为 1.5 - log1.5(n)。

最后,记住已知底 a,b 的对数规则: loga(n) = logb(n) * loga(b),所以在我们的例子中 log1.5(n) = log2(n) * log1.5(2) 第三部分是一个常数,所以我们的效率与常规的二分搜索效率相同,只是乘以某个常数——这使它的时间复杂度为 log(n)。 长话短说,基地并不重要。

【讨论】:

  • 我相信你的意思是 3/2 的对数基数? 2/3 的对数基数会给出 log_{2/3} n 的负值。
  • 另外,是的,从大 O 的角度来看,复杂度是对数的,但由于常数因子较高,这在实践中会比正常的二分搜索慢。
  • @templatetypedef 是的,这就是我的意思并修复了它。谢谢
猜你喜欢
  • 2019-10-05
  • 1970-01-01
  • 2019-02-17
  • 2012-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多