正文之前
終于看完數學復習全書!!感動,下午我就操起了我的數據結構準備好好來愛愛她,畢竟冷落了太久了,好好寵寵才能重新贏得芳心
正文
時間復雜度是同一問題可用不同算法解決,而一個算法的質量優劣將影響到算法乃至程序的效率。算法分析的目的在于選擇合適算法和改進算法。
計算機科學中,算法的時間復雜度是一個函數,它定性描述了該算法的運行時間。這是一個關于代表算法輸入值的字符串的長度的函數。時間復雜度常用大O符號表述,不包括這個函數的低階項和首項系數。使用這種方式時,時間復雜度可被稱為是漸近的,它考察當輸入值大小趨近無窮時的情況。
#include <iostream>
#include <stdio.h>
int main()
{
int n;
int m=0,i,j;
printf("輸入一個數字n 來確定m++需要執行幾次吧~:");
scanf("%d",&n);
for (int i=1; i <=n; ++i)
{
for ( j = 1; j < 2*i; ++j)
{
m++;
}
}
printf("%d\n", m);
return 0;
}
一個算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個算法都上機測試,只需知道哪個算法花費的時間多,哪個算法花費的時間少就可以了。并且一個算法花費的時間與算法中語句的執行次數成正比例,哪個算法中語句執行次數多,它花費時間就多。
一個算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。
一般情況下,算法的基本操作重復執行的次數是模塊n的某一個函數f(n),因此,算法的時間復雜度記做:T(n)=O(f(n))。隨著模塊n的增大,算法執行的時間的增長率和f(n)的增長率成正比,所以f(n)越小,算法的時間復雜度越低,算法的效率越高。
在計算時間復雜度的時候,先找出算法的基本操作,然后根據相應的各語句確定它的執行次數,再找出T(n)的同數量級(它的同數量級有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=該數量級,若T(n)/f(n)求極限可得到一常數c,則時間復雜度T(n)=O(f(n))。
沒錯,在我例舉的這個程序中,你仔細算一下就會發現,居然是n^2 !!居然不是階數而是確定的數值,很是神奇!
我一開始也是不懂,自顧自的想要按照每一次的單獨算,最后求和即可,第一次是1,第二次是3,第三次是5,第四次是7,第五遍是9 然后最后是2n-1 好吧,我剛剛算了下,也可以算出來,但是還有更好的辦法!!!那就是,數列求和改用積分看待!!這個簡直是神器!積分法!!定積分居然還能這么用,然后稍微推開一下,發現大多數的都可以直接用積分算復雜度!簡直6到爆炸好嘛!
正文之后
上面這篇文章還是九月四五號寫的,一直沒有完善,所以沒有發出來,見諒見諒,最近忙一些瑣事,現在好好念書!后面可能不會有太多的更新,估計一周一兩篇的保底量吧!哇咔咔,希望順利!現在感覺自己還沒進入狀態,要加油了啊!!