正文之前
終于看完數(shù)學(xué)復(fù)習全書??!感動,下午我就操起了我的數(shù)據(jù)結(jié)構(gòu)準備好好來愛愛她,畢竟冷落了太久了,好好寵寵才能重新贏得芳心
正文
時間復(fù)雜度是同一問題可用不同算法解決,而一個算法的質(zhì)量優(yōu)劣將影響到算法乃至程序的效率。算法分析的目的在于選擇合適算法和改進算法。
計算機科學(xué)中,算法的時間復(fù)雜度是一個函數(shù),它定性描述了該算法的運行時間。這是一個關(guān)于代表算法輸入值的字符串的長度的函數(shù)。時間復(fù)雜度常用大O符號表述,不包括這個函數(shù)的低階項和首項系數(shù)。使用這種方式時,時間復(fù)雜度可被稱為是漸近的,它考察當輸入值大小趨近無窮時的情況。
#include <iostream>
#include <stdio.h>
int main()
{
int n;
int m=0,i,j;
printf("輸入一個數(shù)字n 來確定m++需要執(zhí)行幾次吧~:");
scanf("%d",&n);
for (int i=1; i <=n; ++i)
{
for ( j = 1; j < 2*i; ++j)
{
m++;
}
}
printf("%d\n", m);
return 0;
}
一個算法執(zhí)行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個算法都上機測試,只需知道哪個算法花費的時間多,哪個算法花費的時間少就可以了。并且一個算法花費的時間與算法中語句的執(zhí)行次數(shù)成正比例,哪個算法中語句執(zhí)行次數(shù)多,它花費時間就多。
一個算法中的語句執(zhí)行次數(shù)稱為語句頻度或時間頻度。記為T(n)。
一般情況下,算法的基本操作重復(fù)執(zhí)行的次數(shù)是模塊n的某一個函數(shù)f(n),因此,算法的時間復(fù)雜度記做:T(n)=O(f(n))。隨著模塊n的增大,算法執(zhí)行的時間的增長率和f(n)的增長率成正比,所以f(n)越小,算法的時間復(fù)雜度越低,算法的效率越高。
在計算時間復(fù)雜度的時候,先找出算法的基本操作,然后根據(jù)相應(yīng)的各語句確定它的執(zhí)行次數(shù),再找出T(n)的同數(shù)量級(它的同數(shù)量級有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=該數(shù)量級,若T(n)/f(n)求極限可得到一常數(shù)c,則時間復(fù)雜度T(n)=O(f(n))。

沒錯,在我例舉的這個程序中,你仔細算一下就會發(fā)現(xiàn),居然是n^2 !!居然不是階數(shù)而是確定的數(shù)值,很是神奇!

我一開始也是不懂,自顧自的想要按照每一次的單獨算,最后求和即可,第一次是1,第二次是3,第三次是5,第四次是7,第五遍是9 然后最后是2n-1 好吧,我剛剛算了下,也可以算出來,但是還有更好的辦法?。?!那就是,數(shù)列求和改用積分看待!!這個簡直是神器!積分法?。《ǚe分居然還能這么用,然后稍微推開一下,發(fā)現(xiàn)大多數(shù)的都可以直接用積分算復(fù)雜度!簡直6到爆炸好嘛!

正文之后
上面這篇文章還是九月四五號寫的,一直沒有完善,所以沒有發(fā)出來,見諒見諒,最近忙一些瑣事,現(xiàn)在好好念書!后面可能不會有太多的更新,估計一周一兩篇的保底量吧!哇咔咔,希望順利!現(xiàn)在感覺自己還沒進入狀態(tài),要加油了?。。?/p>