小菜一步一步學資料結構之 二 演算法和演算法分析

2021-07-09 10:19:50 字數 1371 閱讀 3858

一次數學課上,老師讓學生練習算數。於是讓他們乙個小時內算出1+2+3+4+5+6+……+100的得數。全班只有高斯用了不到20分鐘給出了答案,因為他想到了用(1+100)+(2+99)+(3+98)……+(50+51)…………一共有50個101,所以50×101就是1加到一百的得數。後來人們把這種簡便演算法稱作高斯演算法。

自然語言

流程圖

程式語言

偽碼演算法效率:用依據該演算法編制的程式在計算機上執行所消耗的時間來度量

*事後統計

*事前分析估計

事後統計:利用計算機內的計時功能,不同演算法的程式可以用一組或多組相同的統計資料,來分辨出優略。

缺點:1.必須先執行依據演算法編制的程式

2.所得時間統計量依賴於硬體、軟體等環境因素,掩蓋演算法本身的優劣

2.事前分析估計:

乙個高階語言程式在計算機上執行所消耗的時間取決於:

時間複雜度(time complexity)

設演算法中所有語句的語句頻度為t(n),f(n)是當n趨向無窮大時與t(n)為同階無窮大,則

演算法的時間複雜度t(n)=o(f(n))

其中:n為演算法計算量或成為規模(size);

f(n)是運算時間隨n增大時的增長率;

o(f(n))是演算法時間特性的量度。

演算法分析主要從 分析演算法的時間複雜度、空間複雜度這兩個方面以考察演算法的時間和空間效率。一般情況下,鑑於運算空間較為充足,故作演算法的時間複雜度作為分析的重點。演算法執行時間t(n)的數量級稱為演算法的漸近時間複雜度,t(n)=o(f(n)),它表示隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,簡稱時間複雜度。

解: 語句1的頻度是1,

設語句2的頻度是f(n),

則:2^f(n)<=n;f(n)<=log2n

取最大值f(n)=log2n,

t(n)=o(log2n )

常見的時間複雜度按照數量級遞增排序依次為:常數階o(1)、對數階o(log2 n)、線性階o(n)、線性對數階o(nlog2n)、平方階o(n^2)、立方階o(n^3)、k次方階o(n^k)、指數階o(2^n)。

愚公移山固然可敬,但發明推土機和炸藥,更加實在和聰明。希望大家在今後的學習中,好好利用演算法分析的工具,改進自己的**,讓計算機輕鬆一點,這樣你就能更勝一籌.

小菜一步一步學資料結構之 二 演算法和演算法分析

一次數學課上,老師讓學生練習算數。於是讓他們乙個小時內算出1 2 3 4 5 6 100的得數。全班只有高斯用了不到20分鐘給出了答案,因為他想到了用 1 100 2 99 3 98 50 51 一共有50個101,所以50 101就是1加到一百的得數。後來人們把這種簡便演算法稱作高斯演算法。自然語...

小菜一步一步學資料結構之 六 佇列

佇列是一種先進先出的線性表,它只允許在表的一段進行插入,而在另外一端刪除元素。佇列的順序表示 用一維陣列base m define m 100 最大佇列長度 空隊標誌 front rear 入隊 base rear x 出隊 x base front 但是這樣做存在乙個問題,如下 rear m時 r...

小菜一步一步學資料結構之 六 佇列

佇列是一種先進先出的線性表,它只允許在表的一段進行插入,而在另外一端刪除元素。佇列的順序表示 用一維陣列base m define m 100 最大佇列長度 空隊標誌 front rear 入隊 base rear x 出隊 x base front 但是這樣做存在乙個問題,如下 rear m時 r...