O(log n)的解释?

这个问题在这里已经有了答案:

  • O(log n)是什么意思? 32个答案

  • 你说你的最后一个例子是O(n2),但是n是什么? 这就是你应该问自己的问题。 它通常是循环运行的矢量的大小。

    简单的情况将是:

    std::vector<int> MyVec_A = {1, 2, 3, 4, 5};
    std::vector<int> MyVec_B = {1, 2, 3, 4, 5};
    for(int i = MyVec_A; i--;)
    {
      for(int x = MyVec_B; x--;)
      {
        // Do Stuff that are of negligible complexity
      }
    }
    

    现在可以自信地说,这个例子的复杂性是:O(n2),其中nMyVec_A (或等价地MyVec_B )的大小。

    现在,在您的具体示例中,向量的长度不同,因此您需要更改所拥有的内容。 假设MyVec_A大小为n ,“MyVec_B的has size m”,那么这个双循环的时间复杂度为:

    O(n * m个)

    我希望很明显,当向量的大小相同时,如我的例子那样,那么n = m ,复杂度变为O(n * m)= O(n * n)= O(n2)。


    对数复杂度的hello世界是二分查找方法。

    给定一个整数数组,你被要求找到一个来自用户输入的数字。 您可以线性搜索整个数组(O(n)复杂度,其中n是数组大小),或者,如果数组已排序,则可以使用Binary搜索算法在O(logn)中找到元素。 我甚至有一个二进制搜索的例子(C ++)。


    顺便说一句,学会提出一个问题(或者将问题与问题紧密联系起来)。

    链接地址: http://www.djcxy.com/p/6817.html

    上一篇: explanation of O(log n)?

    下一篇: Understanding a linear runtime implementation of anagram detection