二分查找运行时间上界:Recurrence Relation
Binary search running time upper bound: Recurrence Relation
我试图理解一个典型的二进制搜索算法具有 运行ning 时间 O(log n) 的证明。在这个证明中,确定了一些输入大小 n 的一般 运行 时间函数 T(n),这用于显示大 O。我了解大部分,但不是第一步。
证明首先确定如果 n=0 则 运行 时间是常数,否则 T(n) <= c + T(floor(n/2))
对于某个常数 c。这对我来说很有意义。然后证明说明函数 T(n) 是非递减的,这对我来说也很有意义。
但随后它会尝试找到满足两个不等式的上限(对于 n = 0 和 n != 0)。它通过使用 T(n) 不递减这一事实来确定 T(n) <= T(2ceil(log n)) 来实现这一点。这是我不明白的部分。这个界限从何而来?为什么要选择那个特定的不平等?我看不到它的来源。
因为我们有:
- n = 2^log(n)
- log n <= ceil(log n)
- 2^(log n) <= 2^(ceil(log n))
我们可以得出结论 T(n) = T(2^(log n)) <= T(2^(ceil(log n))) 使用 T 是非递减的事实。
我试图理解一个典型的二进制搜索算法具有 运行ning 时间 O(log n) 的证明。在这个证明中,确定了一些输入大小 n 的一般 运行 时间函数 T(n),这用于显示大 O。我了解大部分,但不是第一步。
证明首先确定如果 n=0 则 运行 时间是常数,否则 T(n) <= c + T(floor(n/2))
对于某个常数 c。这对我来说很有意义。然后证明说明函数 T(n) 是非递减的,这对我来说也很有意义。
但随后它会尝试找到满足两个不等式的上限(对于 n = 0 和 n != 0)。它通过使用 T(n) 不递减这一事实来确定 T(n) <= T(2ceil(log n)) 来实现这一点。这是我不明白的部分。这个界限从何而来?为什么要选择那个特定的不平等?我看不到它的来源。
因为我们有:
- n = 2^log(n)
- log n <= ceil(log n)
- 2^(log n) <= 2^(ceil(log n))
我们可以得出结论 T(n) = T(2^(log n)) <= T(2^(ceil(log n))) 使用 T 是非递减的事实。