O(log n)的解释?
这个问题在这里已经有了答案:
你说你的最后一个例子是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),其中n
是MyVec_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下一篇: Understanding a linear runtime implementation of anagram detection