概念:
資料結構
data structure
儲存資料的不同方式
計算機作為一門工程學科,容易理解,做出東西來,比死板的背概念要重要的多。
什麼是演算法?
針對同乙個問題,不同的解決方法
比如從1到100求和,可以從1到100累加,也可以1+100 乘以50
如何測算演算法的優劣?
時間測算
完成同樣的結果,用的時間越短,演算法越好。
空間測算
如果解決問題需要額外的空間,也就是不包括儲存資料的空間,佔的空間越少,這個演算法越好。
演算法耗時的通常計算方法。
在學術上如何來表述乙個演算法的優劣呢?
big o
用來標記時間的複雜程度
什麼是時間複雜度?
計算機解決乙個問題,執行的時間,隨著問題規模的擴大,時間是怎麼變化的。
訪問陣列某個位置的值,隨著規模的擴大,所用的時間是怎麼變化的。
由於陣列訪問某個位置,只需要計算偏移量就行了,查詢第10個和查詢第1000個,都是計算偏移量需要花的時間。
我們把這種問題的時間複雜度 表示為o(1)
計算時間複雜度的時候,我們只計算隨著規模的擴大,所需要的時間,不考慮必要的操作,比如迴圈,賦初始值。
訪問鍊錶某個位置的值
如果我們訪問鍊錶的第乙個,那麼時間複雜度還是o(1)
但是我們說時間複雜度,一般是講「最差」的情況
如果訪問第乙個需要1s,那麼訪問第10個需要10s,我們把這種問題的時間複雜度表示為o(n)
就是說,當問題的規模擴大的時候,消耗的時間是線性的擴大。
時間複雜度就是時間針對於問題規模的變化,而進行變化的規律
求陣列平均數的時間複雜度
演算法是先累加求和,然後除以陣列長度
隨著陣列的增大,需要累加的數會增多,所以時間複雜度為o(n)
作業
排序演算法
(課程在馬士兵微博)
1演算法基礎
什麼是 stl?stl standard template library 是 c 標準模板庫,裡面提供了大量模板。佇列 先進先出 載入庫 include queue 申明 queue type name queue中元素在記憶體中不一定連續。q.push x 向佇列 q 末尾加入元素 x o 1 ...
演算法基礎 遞迴(1)
遞迴的基本概念乙個函式呼叫其自身,就是遞迴。例1 求n 的遞迴函式 int factorial int n 遞迴的作用 替代多重迴圈 解決本來就是用遞迴型式定義的問題 將問題分解為規模更小的子問題進行求解 例2 漢諾塔問題 void hanoi int n,char src,char mid,cha...
基礎演算法整合(1)
在資料結構與演算法中提到了很多的演算法,如折半查詢,快速查詢,歸併排序等等,熟悉這些演算法不能說讓我們計算能力提公升,但其中的邏輯思維與解決問題的方式卻值得我們去 本來打算把一些常用的演算法整合起來一次發完,但是 量有點大,我大概瀏覽都頭昏,所以決定分兩部分分享給大家。關於這些演算法的邏輯我基本都標...