我有下面的伪代码,它采用给定的未排序长度数组,size
并通过查找数组中的最大值和最小值来查找范围。我只是在学习各种时间效率方法,但我认为下面的代码是Θ(n)
,因为更长的数组添加了固定数量的动作(3)。
例如,忽略和的实际分配max
(min
因为未排序的数组是任意的,并且这些分配是预先未知的),长度为 2 的数组总共只需要 5 个动作(包括最终范围计算)。长度为 4 的数组总共只使用 9 个动作,再次添加最终范围计算。长度为 12 的数组使用 25 个动作。
这一切都指向我Θ(n)
,因为它是线性关系。它是否正确?
伪代码:
// Traverse each element of the array, storing the max and min values
// Assuming int size exists that is size of array a[]
// Assuming array is a[]
min = a[0];
max = a[0];
for(i = 0; i < size; i++) {
if(min > a[i]) { // If current min is greater than val,
min = a[i]; // replace min with val
}
if(max < a[i]) { // If current max is smaller than val,
max = a[i]; // replace max with val
}
}
range = max – min; // range is largest value minus smallest