我创建了这个程序,它将在用户输入的订单列表上进行二进制搜索,并输出他们想要在该列表中搜索的所需值。我的问题是我必须为我的代码的每个部分找到Big-O表示法中的算法复杂性,然后执行它的时间复杂度,但是,我并不擅长弄清楚Big-O表示法。如果可能的话,你可以解释一下我是如何做到的,等等。这是我的代码,我已经尝试过计算某些行的算法复杂度,如果我做错了,请纠正我。
#include<iostream>
#include<vector>
using namespace std;
int binarySearch(vector<double> uservector, int, int);
int main()
{
int size; // O(1)
int i; //O(1)
int desirednum; // O(1)
cout << "How many values do you want to enter: "; // O(1)
cin >> size; // O(1)
vector<double> uservector(size);
for (i = 0; i < size; i++)
{
cout << "Enter a value: ";
cin >> uservector[i];
}
cout << "What value are you looking for: "; // O(1)
cin >> desirednum; // O(1)
int location = binarySearch(uservector, size, desirednum);
if( location > -1)
cout << "The value " << desirednum << " was found at index " << location << endl; // O(1)
else
cout << "The value was not found in the list. \n"; // O(1)
system("PAUSE");
return 0;
}
int binarySearch(vector<double> uservector, int size, int value)
{
int low, mid, high;
low = 0;
high = size - 1;
while(low <= high)
{
mid = ((low + high) / 2);
if(value == uservector[mid])
{
return
mid;
}
else if(value > uservector[mid])
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
答案 0 :(得分:0)
你在某种程度上做对了。对于其他人,你没有。
int main()
{
int size; // O(1)
int i; //O(1)
int desirednum; // O(1)
这些不是说明,而是声明。他们根本没有运行时间。
cout << "How many values do you want to enter: "; // O(1)
你根本不应该计算算法开始之前发生的事情。
cin >> size; // O(1)
vector<double> uservector(size);
for (i = 0; i < size; i++)
{
cout << "Enter a value: ";
cin >> uservector[i];
}
cout << "What value are you looking for: "; // O(1)
cin >> desirednum; // O(1)
你根本不应该计算算法开始之前发生的事情。
int location = binarySearch(uservector, size, desirednum);
if( location > -1)
cout << "The value " << desirednum << " was found at index " << location << endl; // O(1)
else
cout << "The value was not found in the list. \n"; // O(1)
system("PAUSE");
return 0;
}
好的,所以这里开始你真正想要复杂的部分。
int binarySearch(vector<double> uservector, int size, int value)
{
int low, mid, high;
low = 0;
high = size - 1;
while(low <= high)
{
mid = ((low + high) / 2);
if(value == uservector[mid])
{
return
mid;
}
else if(value > uservector[mid])
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
每次迭代,你的目标距离减半,给你一个log2(N)的复杂性。