在Big-O表示法中找出我的程序的算法复杂性

时间:2015-04-09 22:40:43

标签: c++ binary big-o time-complexity

我创建了这个程序,它将在用户输入的订单列表上进行二进制搜索,并输出他们想要在该列表中搜索的所需值。我的问题是我必须为我的代码的每个部分找到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;
}

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)的复杂性。