C语言里。。 里时间复杂性的问题..

来源:百度知道 编辑:UC知道 时间:2024/05/23 20:07:21
时间复杂性里貌似有用O()这样的表示.. 是不是还分好几种比如O(lg)什么的..麻烦大家能详细解释一下每种么..?比如冒泡排序..是用的哪一种..?怎么算出来的..我记的有种可以算它时间的公式呢.. 求解...

数学里学过极限吧?设f(n)=n^3+n^2+n;g(n)=n^2+n,那么当n趋近于正无穷时,g/f为0,阴为n无限大时,f的值只与n^3有关,g的值只与n^2有关。
那么如果一个算法的时间复杂度为n^3+n^2+8*n^1是,那么我们近似的可以说他的复杂度为n^3(对于不同种类的算法)。
冒泡排序的时间复杂度为n^2,因为大致的结构是两个嵌套的for循环,算时间复杂度还是要靠数学逻辑推理,书上说的公式是糊弄小孩的,不用管。比如说二分法,通过不断地切割来达到目的,那么第一次是找n/2,第二次找n/4。。。。。这样下去,很容易看出是O(lgn)的复杂度

大O表示法描绘的是一个算法的渐进上界!
比如说O(n)是指函数的变化趋势是一个线性的量,在坐标轴里面表示总存在一个函数f(x)=kx使得描述我们算法的曲线位于这个f(x)之下,当然取f(x)=x^2也是对的,然而我们求的是一个最小的f(x)
要理解时间复杂度必须先弄清程序步这个概念
一个程序步是一个有效的程序片段,比如说一个加法运算
乘法运算
而所谓的时间复杂度就是求我们程序步的步数
冒泡排序里面是两个for循环嵌套,所以说最内层for循环里面的语句被执行了n*n次