我正在尝试找出最佳案例时间复杂度,同时检查给定数组是否未排序。
我认为,这是检查数组是排序还是未排序的最快方法,这个时间复杂度应为O(n)。
L = list()
for (i in 1:ncol(data)){
tmp = rep(data[i, 1], data[i, 2])
mean = mean(tmp)
stdef = sd(tmp)
L[[i]] = cbind(mean, stdef)
}
Mx = do.call(rbind, L)
Mx
或者我错了?
答案 0 :(得分:3)
是的,这需要O(n)
,而且是as fast as it gets。
此外,你需要改变这个:
for (i = 0; i < a.length; i++)
到此:
for (i = 0; i < a.length - 1; i++)
因为您访问a[i + 1
并且您不想超出界限。此外,您的退货声明应该互换。
答案 1 :(得分:0)
用于检查数组是否未排序的算法的平均和最坏情况复杂度为O(N)
。但是最佳情况下的复杂度是O(1)
。
最好的情况是当数组的前两个元素出现故障时。这是在第一次循环迭代中检测到的,并且与N
无关,它花费的时间是恒定的。