1》演算法設計的原則
設計演算法時,通常應考慮達到以下目標:
1,正確性、2,可讀性、3,健壯性、4,高效率與低儲存量需求
1,正確性:規格說明
四個層次:
a,程式中不含語法錯誤;
b,程式對於幾組輸入資料能夠得出滿足要求的結果;
c,程式對精心選擇的、典型、苛刻切帶有刁難性的幾組輸入資料能夠得出滿足要求的結果;
d,程式對於一切合法的輸入資料都能得出滿足要求的結果;
之所以軟體要求維護:d條件是很難滿足的。是個趨勢
2,可讀性:方便人的理解; 難度的程式隱藏錯誤較多,錯誤也難以除錯。
3,健壯性:當輸入的資料非法時,演算法應當恰當地作出反映或進行相應處理,而不是產生莫名其妙的輸出結果。
4,高效率與低儲存量需求:演算法執行時間,儲存空間大小
1,演算法選用的策略
2,問題的規模
3,編寫程式的語言
4,編譯程式產生的機器**的質量
5,計算機執行指令的速度
隨著問題規模n的增長,演算法執行時間的增長率和f(n)的增長率相同,則可以記作:
t(n)=o(f(n));
稱t(n)為演算法的時間複雜度.
演算法=控制結構+原操作(固有資料型別的操作)
演算法的執行時間=原操作(i)的執行次數*原操作(i)的執行時間。
演算法的執行時間與原操作執行次數之和成比例。
for() }}
時間複雜度:o(n*n*n)
我們在看看選擇排序:
例子二:
void select_sort(int a ,int n)
}}//select_sort
基本操作:比較操作
語句頻度作為演算法的時間複雜度。
這個演算法的效率與輸入的資料無關。-----》即使輸入的資料是有序的,這雙重for迴圈的次數無關。
例子三:
void bubble_sort(int a ,int n)}}
}//bubble_sort 氣泡排序
開始氣泡資料:5 7 4 2 8 3
5 5 4
2 27 4
2 4 34
2 5
3 42 7
3 5 5
8 3 7 7 7
3 8 8 8 8
最好情況 外迴圈只需執行一次,最壞的情況o(n*n)
平均的時間複雜度: o(n*n)
四、演算法的儲存空間需求
演算法的空間複雜度
s(n)=o(g(n))
演算法的儲存量包括:
1、輸入資料所佔空間;
2、程式本身所佔空間;//可以不考慮
3、輔助變數所佔空間;
選擇排序與氣泡排序中:
輸入資料所佔的空間是相同的;那麼只需考慮輔助變數所佔空間。
學習要點:
理解演算法要素的確切含義。
掌握計算語句頻度和估算演算法時間複雜度的方法。
n*n 與 50*log2(n) 運用高中學習的知識點:觀察它們的二維 曲線
當n趨向於無窮大時 當然是50*log2(n)
資料結構與演算法 棧 02
棧 先進後出 陣列來實現棧的基本操作 author fancy date 2018 12 05 09 31 public class arraystack 壓入資料 author fancy param value public void push int value array topindex ...
資料結構 資料結構與演算法01
1 求一組整數中的最大值。演算法 基本操作是 比較兩個數的大小 模型 仔細想想 你並不知道這個整數到底是多大?整數過大你該怎麼去表示?2 足協的資料庫管理的程式 演算法 需要管理的專案?如何管理?使用者介面?模型 3 資料與資料結構 資料 所有能被輸入到計算機中,並被計算機處理的符號的集合計算機操作...
演算法與資料結構 資料結構部分
1.資料結構基本概念 資料結構的基本概念 資料 資料元素 資料結構 資料的邏輯結構 物理結構 演算法等。資料 是對資訊的一種符號表示,是所有能輸入到計算機中並被電腦程式處理的符號的總稱 資料元素 是資料的基本單位,在電腦程式中通常作為乙個整體進行考慮和處理。有時稱為 元素,節點,頂點,記錄等 資料結...