演算法基礎1

2021-09-12 19:11:48 字數 1306 閱讀 3561

概念:

資料結構

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)

在資料結構與演算法中提到了很多的演算法,如折半查詢,快速查詢,歸併排序等等,熟悉這些演算法不能說讓我們計算能力提公升,但其中的邏輯思維與解決問題的方式卻值得我們去 本來打算把一些常用的演算法整合起來一次發完,但是 量有點大,我大概瀏覽都頭昏,所以決定分兩部分分享給大家。關於這些演算法的邏輯我基本都標...