二分查找复杂度分析(Uneven Split)
Binary search complexity analysis (Uneven Split)
设计一种搜索算法,将排序后的数组分成三分之一和三分之二,而不是二分搜索算法“BinSrch”中的两半。分析算法的时间复杂度
我写完了算法,需要复杂性分析部分的帮助,有人可以解释一下递归关系是什么样的吗?
如果这是一个常规的二分搜索,那么如果你想要的元素是每次迭代将数组减半后留在数组中的最后一个元素,那么将实现最差的时间复杂度。 “我可以将这个数组分成两半直到它剩下 1 个元素多少次”这个问题的答案是基数为 2 的 log(n) - 以后称为 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)。
长话短说,基地并不重要。
设计一种搜索算法,将排序后的数组分成三分之一和三分之二,而不是二分搜索算法“BinSrch”中的两半。分析算法的时间复杂度
我写完了算法,需要复杂性分析部分的帮助,有人可以解释一下递归关系是什么样的吗?
如果这是一个常规的二分搜索,那么如果你想要的元素是每次迭代将数组减半后留在数组中的最后一个元素,那么将实现最差的时间复杂度。 “我可以将这个数组分成两半直到它剩下 1 个元素多少次”这个问题的答案是基数为 2 的 log(n) - 以后称为 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)。 长话短说,基地并不重要。