【发布时间】:2013-09-29 06:14:26
【问题描述】:
我有一个算法,它接受一个数组作为参数,并返回它的最大值。
find_max(as) :=
max = as[0]
for i = 1 ... len(as) {
if max < as[i] then max = as[i]
}
return max
我的问题是:鉴于数组最初处于(一致)随机排列并且其所有元素都是不同的,max 变量的预期更新次数是多少(忽略初始分配)。
例如,如果as = [1, 3, 2],则max 的更新次数将为 1(读取值 3 时)。
【问题讨论】:
-
如果您希望您的问题与 stackoverflow 相关,您应该显示一些源代码。我不明白您在考虑哪种算法,但找到最大值是线性复杂度
-
其实算法中只有一个条件,就是当你改变变量而不是在迭代中花费时间。
-
考虑伪代码: max = array[0] ; for(i=0;i
-
对于 1,3,4,你不改变 max 变量两次吗? 1->3 和 3->4?
-
取自某个有限集合的值吗?像 [1,M] 区间?与替换?没有?你不能生成没有边界的均匀分布的随机数。
标签: java c++ algorithm big-o time-complexity