Algorithm 计算机速度加倍时计算O(n)

Algorithm 计算机速度加倍时计算O(n),algorithm,time-complexity,Algorithm,Time Complexity,假设O(n)的算法在速度为X的计算机上求解。 现在,在速度为2X的计算机上使用同样的算法,可以同时解决2N大小的问题 现在如果我们在速度为X的计算机上有一个O(logn)的算法 我如何计算可以在计算机上以2倍速度同时解决的问题的大小 对于o(n^2)也是如此 这不是什么家庭作业之类的问题。 只是好奇,正如我读的那本书对上面的问题2所说的,它是O(n^2),我不明白。大O符号不依赖于计算机速度,它只描述了算法的时间复杂性。你必须在数组中迭代两次的东西总是2N,如果你把它放在一台速度是原来的两

假设O(n)的算法在速度为X的计算机上求解。 现在,在速度为2X的计算机上使用同样的算法,可以同时解决2N大小的问题

  • 现在如果我们在速度为X的计算机上有一个O(logn)的算法 我如何计算可以在计算机上以2倍速度同时解决的问题的大小

  • 对于o(n^2)也是如此

  • 这不是什么家庭作业之类的问题。
    只是好奇,正如我读的那本书对上面的问题2所说的,它是O(n^2),我不明白。

    大O符号不依赖于计算机速度,它只描述了算法的时间复杂性。你必须在数组中迭代两次的东西总是2N,如果你把它放在一台速度是原来的两倍的计算机上,它的时间复杂度仍然是2N,即使实际上它完成的速度是原来的两倍。这就是表示法的美妙之处,它独立于处理器速度。

    大O表示法不依赖于计算机速度,它只描述了算法的时间复杂度。你必须在数组中迭代两次的东西总是2N,如果你把它放在一台速度是原来的两倍的计算机上,它的时间复杂度仍然是2N,即使实际上它完成的速度是原来的两倍。这就是符号的美妙之处,它独立于处理器速度。

    只有当您知道运行时的大θ,并且只有当问题规模足够大时,才可能进行此类估计

    对于2)
    2*log(n)=log(n^2)


    对于3)
    2*n^2=(n*sqrt(2))^2

    只有知道运行时的大θ,并且只有当问题规模足够大时,才可能进行此类估计

    对于2)
    2*log(n)=log(n^2)


    对于3)
    2*n^2=(n*sqrt(2))^2

    设n为当前处理的工作量,m为速度加倍时处理的工作量。请参见此处的讨论:


    设n为当前处理的工作量,m为速度加倍时处理的工作量。请参见此处的讨论:


    有些人不喜欢听,但这是正确的。BigO不关心精确的运行时间,只关心问题越大的趋势。对于较小的
    n
    ,低阶效应占主导地位。事实上,一个n的循环和一个2n的循环都是O(n)。是的,我选择了2n的东西,因为在这个例子中,他说的是计算机速度的2倍,我认为在这种情况下,仅仅输入n可能会使答案混淆,但你是绝对正确的。有些人不喜欢听,但这是正确的。BigO不关心精确的运行时间,只关心问题越大的趋势。对于较小的
    n
    ,低阶效应占主导地位。事实上,一个n的循环和一个2n的循环都是O(n)。是的,我选择了2n的东西,因为在这个例子中,他说的是2倍的计算机速度,我认为仅仅是把n放在上下文中可能会让答案混淆,但你绝对正确。
    For O(log(n)):
    
    log(m)/log(n) = 2
    log(m)=2*log(n)
    log(m)=log(n^2)  =>  m=n^2
    
    For O(n^2):
    
    m^2/n^2 = 2  =>  m = sqrt(2)*n