码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构之算法

时间:2015-04-12 06:58:58      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:算法   数据结构   

1.时间复杂度的 粗略计算方法:

1。用常数1取代运行时间中的所有加法常数

2.在修改后的运行次数函数中,只保留最高阶项

3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。


常数阶

例如执行1次O(1),执行12次O(12)  这样说是不对的,无论常数是多少都记为O(1)

线性阶

下面既是O(n)

int i;

for(i=0;i<n;i++)

{

/*时间复杂度*/

}

对数阶

int count=1;

while(count<2)

{

count=count*2;

}

由于每次count乘以2之后就距离n更近了,也就是说有多次2相乘后大于n,循环则结束。由2^x=n   得到x等于 以2为底n的对数   O(logn)


平方阶

int i,j;

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

{

}

}

时间复杂度O(n^2)

如果外循环的n等于m  则时间复杂度O(m*n)

int i,j;

for(i=0;i<n;i++)

{

for(j=i;j<n;j++)

{

}

}

当i=0时,内循环执行了n次,当i=1时,执行了n-1次,当i=n-1时 执行了1次 所以总的执行次数为:

n+(n-1)+(n-2)+......+1=n^2/2 + n/2  根据O的粗略求法   得到O(n^2)

int i,j;

for(i=0;i<n;i++)                执行N次

{

function(i);

}

void function(int count)         执行N次

{

int j;

for(j=count;j<n;j++)

{

}

}

所以时间复杂度O(n^2)


较复杂语句

n++;                执行1次

funcion(n);       执行N次

int i,j;

for(i=0;i<n;i++)   执行次数n^2

{

function(i);

}

for(i=0;i<n;i++)      执行n(n+1)/2

{

for(j=i;j<n;j++)

{

}

}

f(n)=1+n+n^2+n(n+1)/2=3/2n^2 + 3/2n + 1    所以时间复杂度O(n^2)


我们查找一个有n个数字的数组种的某个数字,那么最好这个数字在第一个,那么时间复杂度就是O(1),如果在最后  那就是O(n)。  这就是最坏运行时间

从概率角度讲,我们取平均运行时间


空间复杂度

S(n)=O(f(n))


本文出自 “linux_oracle” 博客,请务必保留此出处http://pankuo.blog.51cto.com/8651697/1631332

数据结构之算法

标签:算法   数据结构   

原文地址:http://pankuo.blog.51cto.com/8651697/1631332

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!