【发布时间】:2014-11-22 08:40:53
【问题描述】:
我正在尝试一些算法课的作业,但我遇到了书中未描述的情况。我的任务是创建一个算法并对Sequential 或Linear Search 执行逐行分析,以在数组A[p...r] 中找到元素k。
我的算法非常简单:
1 for ct=1 to r
2 if A[ct] == k
3 return ct
4 return -1
直观地说,我已经知道该算法在最佳情况下会在 Θ(1) 中执行,而在最坏情况下会在 Θ(n) 中执行,但是我在执行逐行分析来证明这一点时遇到了一点麻烦。
这是我目前的分析结果(请注意常量旁边的#s 和 tj 下的 j 应该是下标):
Line | Algorithm | constants | time
1 for ct=1 to r c1 tj+1
2 if A[ct] = k c2 tj
3 return ct c3 1
4 return -1 c4 1
将常量按复杂度相加得到:
c1(tj+1) + c2tj +c3 + c4 = tj(c1+ c2) + (c1 + c3 + c4) = tj(c) + c = tj
这就是我的绊脚石......
在所有情况下,第 3 行和第 4 行只会执行一次,这就是为什么我将它们列为常数时间,但实际上在搜索期间只会执行其中的一个。我知道对于渐近符号而言,常量并不重要,但令人困扰的是我的 tj(c1+ c2) + (c1 + c3 + c4) 语句包含 c3 + c4,因为我知道它应该更像 c3 or c4。
问题
我能够适当地插入我的 T(n),以便 T(1) = Θ(1) 和 T(n) = Θ(n),但我觉得我还没有准确地证明这一点。
- 谁能权衡我的数学可能不正确的地方?
- 您应该如何评估算法中的提前返回语句?
【问题讨论】:
-
复杂度为 O(r)
标签: java algorithm search analysis asymptotic-complexity