您的位置:首页 > 其它

浅谈时间复杂度及空间复杂度的计算。

2017-12-10 17:59 387 查看
算法的时间复杂度和空间复杂度统称为算法的复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。

为什么要有时间复杂度和空间复杂度?

试想如果我们要知道一个程序算法的优劣需要知道的事这个程序的运行速度和空间耗费情况,而程序的运行速度在不同的计算机上又是有区别的(因处理器的差别导致),此时,我们就需要一个统一的计量单位来计算一个程序的效率,即时间复杂度

时间复杂度和空间复杂度的表示方法都是大O渐进表示法(即O(f(n)))

f(n)是描述程序总的循环次数(时间复杂度)或者函数中创建对象的个数(空间复杂度)的函数

举个栗子

int Fib(int n)
{
int a = 0;
int b = 1;
int c = 0;
int i = 0;
if (n < 2)
{
return n;
}
for (i = 2; i <= k; i++)
{
c = a + b;
a = b;
b = c;
}
return c;
}


时间复杂度O(f(n))=O(n);
空间复杂度O(f(n))=O(1);


int Fib(int n)
{
if (n < 2)
{
return n;
}
else
{
return Fib(n - 1) + Fib(n - 2);
}
return;
}


时间复杂度O(f(n))=O(2^n);
空间复杂度O(f(n))=O(n);


int Fib(int first, int second, int n)
{
if (n==1||n == 2)
{
return 1;
}
if (n == 3)
{
return first + second;
}
return Fib(second, first + second,n-1);
}


时间复杂度O(f(n))=O(n);
空间复杂度O(f(n))=O(n);


int Find(int arr[],int left, int right, int n)
{
while (left <= right)
{
int mid = (left >> 1) + (right >> 1);
if (n == arr[mid])
{
return mid;

9da2
}
else if (n < arr[mid])
{
return Find (&arr[0], left, mid - 1,n);
}
else if (n>arr[mid])
{
return Find(&arr[0], mid+1 , right,n);
}
}
return -1;
}


时间复杂度O(f(n))=O(logn)(复杂度计算中log2(n)中底数2省略);
空间复杂度O(f(n))=O(logn);


int Find(int arr[],int size,int n)
{
int left = 0;
int right = size - 1;
while (left <= right)
{
int mid = (left>>1)+(right>>1);
if (n == arr[mid])
{
return mid;
}
else if (n < arr[mid])
{
right = mid - 1;
}
else if (n>arr[mid])
{
left = mid + 1;
}
}
return -1;
}


时间复杂度O(f(n))=O(logn)(复杂度计算中log2(n)中底数2省略);
空间复杂度O(f(n))=O(1);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: