Linux C 演算法分析初步

2021-07-09 04:16:09 字數 1411 閱讀 9138

提到演算法,必須提到資料結構,我們要知道乙個著名公式:

資料結構 + 演算法 = 程式

我們先看看下面這張圖:

演算法是什麼?演算法是乙個有窮規則(或語句、指令)的有續集和。他確定了解決某一問題的乙個運算序列,簡單的說,就是解決某一問題的步驟描述

一、演算法的特性

1)有窮性——演算法執行的步驟(或規則)是有限的;

2)確定性——每個計算步驟無二義性;

3)可行性——每個計算步驟嫩鞏固在有限的時間內完成;

4)輸入——演算法有乙個或多個外部輸入;

5)輸出——演算法有乙個或多個輸出;

二、如何評價乙個演算法的好壞

1)消耗時間的多少;

2)消耗儲存空間的多少;

3)演算法的設計是否容易理解,是否容易程式設計實現,方便除錯和維護;

三、時間複雜度

時間複雜度的概念:

1)問題的規模:輸入資料量的大小,用n來表示;

2)演算法的時間複雜度:演算法消耗時間,它是問題規模的函式 t (n)。

1、語句的頻度

語句的頻度定義為可執行語句在演算法(或程式)中重複執行的次數。若某語句執行一次的時間為t ,執行次數為f,則該語句所耗時間的估計為 t * f 。

以下面程式為例,求兩個n階方陣乘積:

void matrixm(a,b,c)

}

2、演算法的時間複雜度演算法的時間複雜度定義為演算法中可執行語句的頻度之和,記為t(n)。t(n) 是演算法所需時間的一種估計,其中n為問題的規模(或大小、體積)。如上面的例子中,問題的規模n為矩陣的階,該演算法的時間複雜度為:

t(n) = (n+1)+n(n+1)+n*n+n*n(n+1)+n*n*n = 2*n*n*n + 3*n*n +2*n +1

當n趨於無窮大時,lim(t(n)/(n*n*n) =2,故t(n)與n*n*n為同階無窮大,或者說t(n) 與 n*n*n成正比、t(n)的量級為n*n*n,記為t(n) = o(n*n*n);

問題規模n的某個函式f(n),

t(n) = o (f(n))

它表示歲問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同。

Linux C程式設計Makefile編寫初步

假設我們有下面這樣的乙個程式,源 如下 main.c include mytool1.h include mytool2.h int main int argc,char argv mytool1.h ifndef mytool 1 h define mytool 1 h void mytool1 ...

linux c 演算法總結

1 排序演算法 快速排序 合併排序 堆排序選擇排序 基數排序 氣泡排序 插入排序 希爾排序 鍊錶排序 2 資料結構 線性佇列 線性堆疊 單向鍊錶 雙向鍊錶 迴圈單向鍊錶 排序二叉樹 插入,刪除上 中 下 儲存和載入 雜湊表 雜湊二叉樹 3 圖 圖結構圖建立 圖的新增 刪除 圖的儲存 prim演算法 ...

linux c排序演算法

基本思想 比較相鄰的兩個數,如果前者比後者大,則進行交換。每一輪排序結束,選出乙個未排序中最大的數放到陣列後面。include include intmain printf please input eight number for i 0 i 8 i for i 0 i 8 i for j 7 j...