我对复杂性措施比较陌生,请耐心等待。
我理解以下复杂性示例:
O(n) - 线性时间
示例:
None
O(1) - 恒定时间
示例:
std::vector<int> MyV={1,4,6,2,9};
std::for_each(MyV.begin(), MyV.end(), [](int e1, int e1){return e1<e2;});
//I.e. n of operations based on the number of elements
O(n2) - 二次时间
示例:
for(int i=5; i--;)
{
//Do Stuff
}
//i.e. n of operations will be 5
以上示例是否正确?
如果没有,你能提供一些关于如何纠正这些例子的指示吗?
我也不确定对数时间O(log n),一个例子真的很有用吗?
答案 0 :(得分:0)
你说你的最后一个例子是O(n 2 ),但是什么是$form->handleRequest
???这就是你应该问自己的问题。它通常是循环运行的矢量大小。
简单的案例就是:
n
现在自信地说,这个例子的复杂性是:O(n 2 ),其中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
}
}
是n
(或MyVec_A
的大小等效地)。
现在,在您的具体示例中,矢量的长度不同,因此您需要更改所拥有的内容。假设MyVec_B
具有大小MyVec_A
和“MyVec_B n
m`,那么这个双循环将具有时间复杂度:
O(n * m个)
我希望很清楚,当矢量大小相同时,如我的例子中那样has size
,复杂度变为O(n * m)= O(n * n)= O(n < SUP> 2 )。
对数复杂度的hello世界是二元搜索方法。
给定一个整数数组,您需要找到一个来自用户输入的数字。您可以线性搜索整个数组(O(n)复杂度,其中n = m
是数组的大小),或者,如果数组是排序,您可以在O(logn),使用Binary search algorithm。我甚至有一个例子Binary Search (C++)。