Algorithm n/2时间复杂性值得吗?

Algorithm n/2时间复杂性值得吗?,algorithm,time-complexity,Algorithm,Time Complexity,假设我的任务是将两个给定点之间的所有奇数整数推到一个数组中。大多数人想到的第一件事就是通过mod check从点a迭代到点b,以推进到数组中。 如果有足够大的数据集,下面的内容实际上是一种优势还是完全没有必要 findOddNums(start, end){ let output = [] let iter = start if(start%2 > 0) { output.push(start) iter+=2 }else iter++ while(i

假设我的任务是将两个给定点之间的所有奇数整数推到一个数组中。大多数人想到的第一件事就是通过mod check从点a迭代到点b,以推进到数组中。 如果有足够大的数据集,下面的内容实际上是一种优势还是完全没有必要

findOddNums(start, end){
  let output = []
  let iter = start
  if(start%2 > 0) {
    output.push(start)
    iter+=2
  }else iter++

  while(iter<=end){
    output.push(iter)
    iter+=2
  }
  return output
}
findOddNums(开始、结束){
让输出=[]
让iter=启动
如果(开始%2>0){
输出推送(启动)
iter+=2
}else iter++

而(iter从技术上讲,它将是O(d/2),其中d是端点之间的距离(结束-开始)。为什么是d/2?因为在一个范围(+-1)中偶数和奇数一样多,所以你从你找到的第一个奇数开始,然后从那里以2的步骤迭代。所以O(n/2)不好,O(d/2)是的,是的,是的,处理每一个项目比处理每一个项目要少得多。请考虑这个代码:

for (int x = start; x <= end; ++x)
{
    if (x % 2 != 0)
    {
        // do whatever
    }
}

for(int x=start;x不太可能,但基准是………..O(N/2)=O(N)as N->infinity…没有“N/2时间复杂度”这样的东西。
O(…)
是一个包含多个函数的集合。
O(N)
的集合与
O(N/2)的集合相同
。两者都包含在同一个集合中,即线性函数集合。通常人们仅用
O(n)来表示该集合
。每次你问自己某个东西在实践中是否真的更快,你都必须测量它。没有办法。如果你对项目以及CPU和编译器优化等所有影响知之甚少,很难估计运行时间。你必须测量它。如果你将“每一个奇数”改为“每一个1模3的数”然后是“1 mod 4”,然后……最终你会得到一个使循环更快的模。因此,在库中可能值得这样做。
O(d/2)
通常用
O(d)
表示,这是一组线性函数。没错,我指的是大θ,但我的键盘上没有大θ:)是的。但那没关系。它仍然是一组线性函数。
Theta(d)
那么。哈哈,好吧,你赢了。让我继续一点:
d
线性依赖于
n
,所以它仍然是
O(n)
:)
start = (start + 1) - (start % 2);
for (int x = start; x <= end; x += 2)
{
    // do whatever
}