數據結構與算法分析03-算法與算法分析

算法與算法分析

2.1定義

對特定問題求解方法和步驟的一種描述。
其實算法就是解決問題的方法和步驟。

2.2描述

自然語言:英語 中文
流程圖:傳統流程圖、NS流程圖
僞代碼:類語言
程序代碼:C語言程序,Java語言程序

2.2.1算法與程序

算法是解決一種問題的方法和步驟
程序是用程序設計語言對算法的具體實現

2.3算法與算法分析
2.3.1算法特性:

有窮性:一個算法執行的步驟和時間必須是有窮的
確定性:每一步指令要有確切的含義,不能有二義性,相同的輸入必須是相同的輸出

可行性:算法是可執行的
輸入:一個算法有零個或多個輸入
輸出:一個算法有一個或多個輸出

2.3.2算法設計的要求

正確性:
可讀性:
健壯性(魯棒性):當輸入非法數據的時候,算法能靈活的作出反應,而不是返回一個錯誤。
高效性:花費盡量少的時間和儘量低的存儲需要

2.3.3算法分析

算法效率:時間效率和空間效率

算法時間效率:程序在計算機上執行所消耗的時間。
統計方法

1,事後統計,實現算法以後進行實際測量時間和空間的開銷,對硬件環境要求大,誤差大。

2,事前統計:估算方法,執行一種操作(賦值,比較,移動等等)所需要的時間與算法中簡單操作次數的乘積。所需要的時間是由機器本身軟硬件的環境決定的。所以我們假設執行每條語句所需要的時間均爲單位時間。

語句頻度:每條語句的執行次數
算法所耗費的時間定義爲該算法中每條語句的頻度之和。爲了更加簡便的比較時間效率,我們只比較他們的數量級,這就是算法的漸進時間複雜度,簡稱時間複雜度。T(n) = O(f(n)) o表示數量級

T(n) = 2n^3 + 3n^2 + 2n + 1
當n趨近於無窮的時候T(n)與n^3 的比值趨近於2,表明當n充分大時,T(n)與n^3是同階或同級數量級,則T(n) = O(n^3)
對於一個算法,我們只需要計算次數最多的,即次冪最大的語句。

定理:若f(n)= an^m + bn^m-1 + … + n是m次多項式,那麼T(n) = O(n^m),可以直接忽略所有低次冪項和最高次冪係數,體現出增長率的含義。

計算時間複雜度的基本方法:
1.找出語句頻度最大的語句作爲基本語句
2.計算基本語句的頻度得到問題規模n的某個函數f(n)
3.取其數量級用符號O表示

時間複雜度是有嵌套最深層語句的頻度決定的

f = mn 那麼 O(f(n)) = mn 因爲他跟m和n都有關係
如果對於f跟對數有關係,那麼我們可以直接用對數表示。

複雜度還包括: 算法的最壞時間複雜度,平均時間複雜度,最好的時間複雜度

一般總是考慮在最壞情況下的時間複雜度。如果一個複雜的算法,可以將它分成幾個容易估算的部分,然後利用加法法則和乘法法則,計算算法的時間複雜度。

加法法則
T(n) = T1(n) + T2(n)
那麼分別算出T1和T2的時間複雜度,然後取兩者的最大值

乘法法則
T(n) = T1(n) * T2(n)
那麼分別算出兩者的時間複雜度,然後將時間複雜度相乘

複雜度按數量級遞增順序
常數<對數<線性<線性對數<平方<立方<指數

空間複雜度
把算法所需要開闢空間的次數,算出來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章