何謂語句的頻度
先看看語句頻度和數據結構中時間復雜度的區別。
1)時間頻度一個算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個算法都上機測試,只需知道哪個算法花費的時間多,哪個算法花費的時間少就可以了。并且一個算法花費的時間與算法中語句的執行次數成正比例,哪個算法中語句執行次數多,它花費時間就多。一個算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。(2)時間復雜度在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度T(n)也會不斷變化。但有時我們想知道它變化時呈現什么規律。為此,我們引入時間復雜度概念。一般情況下,算法中基本操作重復執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),使得當n趨近于無窮大時,T(n)/f(n)的極限值為不等于零的常數,則稱f(n)是T(n)的同數量級函數。記作T(n)=O(f(n)),稱O(f(n)) 為算法的漸進時間復雜度,簡稱時間復雜度。在各種不同算法中,若算法中語句執行次數為一個常數,則時間復雜度為O(1),另外,在時間頻度不相同時,時間復雜度有可能相同,如T(n)=n2 3n 4與T(n)=4n2 2n 1它們的頻度不同,但時間復雜度相同,都為O(n2)。按數量級遞增排列,常見的時間復雜度有:常數階O(1),對數階O(log2n),線性階O(n),線性對數階O(nlog2n),平方階O(n2),立方階O(n3),。,k次方階O(nk),指數階O(2n)。隨著問題規模n的不斷增大,上述時間復雜度不斷增大,算法的執行效率越低。
所以語句的頻度應該是語句總數/運行時間
單位:次/單位時間。
我只清楚漸進復雜度,這個語句頻度還真沒聽說過,希望我沒有搞錯。
時間復雜度和語句頻度有什么區別?(數據結構問題)望高手指點!!
1.頻度計算:
int sum1(int n){
int p=1,sum=0,i; //頻度:1(或3,總之是個常數與n無關)
for(i=1;i<=n;i++){ //頻度:n+1
p*=i; //頻度:n
sum+=p; //頻度:n
}
return(sum); //頻度:1
}
該函的執行頻度為:3n+3(或3n+5)
2.時間復雜度計算
依據“頻度”可知該函數為n的一次方,可表示為O(n),也可表示為Θ(n);后者更準確。
3.(補充)求“時間復雜度”是目的,“頻度”僅是手段,前者要依據后者的計算。
4.(補充)求算法的“時間復雜度”是為了估計和比較不同算法處理同一問題時的效率,只“估計”即可,不必也不可能準確得出計算時間(涉及不同硬件、系統軟件和編譯系統等)
5.(補充)算法的時間復雜度計算問題涉及漸近符的使用,去看專門的算法分析書籍。其中有兩個重要規則:忽略低階,忽略系數。
6."3n+3"與"3n+5"問題,當n很大時,執行的時間與+3還是+5無關。也就是"忽略低階"。