版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.08.16 |
前言
將數據結構和算法比作計算機的基石毫不為過,追求程序的高效是每一個軟件工程師的夢想。下面就是我對算法方面的基礎知識理論與實踐的總結。感興趣的可以看上面幾篇。
1. 算法簡單學習(一)—— 前言
2. 算法簡單學習(二)—— 一個簡單的插入排序
3. 算法簡單學習(三)—— 分治法與合并排序
4. 算法簡單學習(四)—— 冒泡排序
5. 算法簡單學習(五)—— 函數的增長
單調性
這個性質我們高中的時候就用過,其實定義可以這么說:y隨著x的增大而增大,隨x的減小而減小,這種就是單調函數,包括單調遞增和單調遞減函數。
也可以這么定義,如果m ≤ n
,則有函數f(m) ≤ f(n)
,這種就是單調遞增函數,反過來,如果m ≥ n
,則有函數 f(m) ≥ f(n)
,這種就是單調遞減函數。
下取整(floor)和上取整(ceiling)
對于任意一個實數x
,小于或等于x的最大整數表示為?x?
,也可以稱為對x進行下取整;大于或等于x的最小整數表示為?x?
,也可以稱為對x進行上取整。下面看一下取整有關的幾個性質。
- 對于任意實數x,都滿足如下等式。
x - 1 < ?x? ≤ x ≤ ?x? < x + 1
對于任意整數n,都滿足如下等式。
?n / 2? + ?n / 2? = n
對于任意整數a,b均大于0,對于任意實數n ≥ 0,都有如下關系式。
??n / a? / b? = ?n / ab?
??n / a? / b? = ?n / ab?
?a / b? ≤ (a + (b - 1)) / b
?a / b?? ≥ (a - (b - 1)) / b
這里還需要說明的是,下取整函數f(x) = ?x?
是單調遞增函數,上取整函數亦然。
取模運算
其實就是求余運算,我們在OC中可以發現只有整數之間可以求余,但是在swift
中浮點數也可以進行求余運算了。
對于任意整數a和任意正整數n,a mod n
的值即a / n
的余數。
a mod n = a - ?a / n? n
余數相等性
如果a mod n = b mod n
,則可以寫作 a Ξ b(mod n)
。
多項式
給定一個正整數d,n的d次多項式是具有如下形式的函數p(n)
:
這里常數a0,a1,... ,ad,是多項式的系數且不為0。
- 對于一個d次的漸近多項式p(n),有p(n) = Θ(nd)。
- 對任意常數a ≥ 0,函數na單調遞增,對于 a ≤ 0,函數na單調遞減。
- 若對于某個常數k有f(n) = O(nk),則稱函數f(n)有多項式界。
指數式
對于任意實數 a > 0、m、n,有下面的等式。
這里需要知道的是:任何底大于1的指數函數比任何多項式函數增長的更快。
對數
對任意a > 0, b > 0, c > 0
和n
,可以有如下關系式。
這里需要知道的是:任何正的多項式函數都比多項對數函數增長的快。
斐波那契數
這個數的遞歸定義為:
可以證明,該數列是以指數形式增長的。
多重對數函數
我們用記號lg*n
來表示多重對數,首先要區分下面的定義。
- lg (i) n 表示從參數n開始,連續應用對數函數i次。
- lg i n表示n的對數的i次方。
下面我們定義多重對數函數。
多重對數函數是一種增長很慢的函數
由上我們可以看出來,我們很少會碰到一個使lg*n > 5的輸入規模n。
后記
未完,待續~~~