0x01 開坑:簡介
現(xiàn)今對數(shù)據(jù)處理的都是大量贩虾,大集合平道,所以簡介一些離散數(shù)學(xué)
例如:
問題一
設(shè)一組N哥數(shù)而要確定其中第K個最大者募强,我們稱之為選擇問題寞宫,只要學(xué)過編程的所以這種解決的“直觀方法”很多
方法一:比如冒泡萧福,遞減順序,然后返回位置K上的元素辈赋。
方法二:把K個元素讀入數(shù)組并遞減排序鲫忍,然后將剩下的元素再逐個讀入膏燕,當(dāng)新元素被讀到時,如果他小于數(shù)組的第K個元素則忽略悟民,否則將他放在數(shù)組中的正確位置坝辫,同時將原數(shù)組中的最后一個元素擠出數(shù)組。當(dāng)算法終止時射亏,位于第K個位置上的元素作為答案返回
這兩種都算法都非常簡單近忙,算法那個更好,或者是兩個算法夠好嗎智润?例如使用3000萬個元素的隨機文件和k=15000000進(jìn)行模擬指出银锻,兩個算法在合理的時間內(nèi)均不能結(jié)束計算;每種算法都需要計算機若干天才能算完(不過最終結(jié)果還是能夠算出來的).
問題二
解決字謎(word puzzle)游戲做鹰。輸入由一些字母構(gòu)成的二維數(shù)組和一個單詞表組成击纬。目標(biāo)是找出字謎中的所有單詞。如下表格
NULL | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | t | h | i | s |
2 | w | a | t | s |
3 | o | a | h | g |
4 | f | g | d | t |
可以組成的單詞可以是 this,two,fat和that
現(xiàn)在有兩種算法可以滿足這個問題钾麸。
方法一:對單詞表中的每個單詞更振,我們檢查每個有序三元組(行,列饭尝,方向)肯腕,驗證是否有單詞的存在。這需要大量嵌套的for循環(huán)钥平,但他基本上是直觀的算法
方法二:對于每一個尚未越出迷板邊緣的有序四元組(行实撒,列,方向涉瘾,字符數(shù))知态,我們可以檢測是否所指的單詞再單詞表中。這也導(dǎo)致使用大量嵌套的for循環(huán)立叛。如果任意單詞中的最大字符數(shù)已知负敏,那么該算法有可能節(jié)省一些時間。
上述的兩種方法秘蛇,解決上面哪一種題還好解其做,如果要解決行列都有16個字符,上面就兩種算法就要花費相當(dāng)可觀的時間了赁还,但還是有方法能快速解決妖泄。
上述兩個問題都是都能簡單的體現(xiàn)在大量或大集合的運行時間問題,如果我們能夠估算程序的運行時間艘策,尤其是在蹈胡,如何在尚未編碼的情況下比較兩個程序的運行時間。我們還將顯著的節(jié)約成本,以及集中精力的優(yōu)化代碼段审残。
0x02 指數(shù)
0x03 對數(shù)
在計算機科學(xué)中梭域,除非有特別的聲明斑举,所有的對數(shù)都是以2為底的搅轿。
定義1
定理1
證明:
設(shè)
此時由對數(shù)定義
聯(lián)合上面三個則得到
定理2
證明:
方法同上
由定義得
下面的的公式都可以推導(dǎo)
0x04 級數(shù)
級數(shù)又分幾何級數(shù)和算數(shù)級數(shù)
幾何級數(shù):從第二項起,每一項是前一項的多少次方
算術(shù)級數(shù):從第二項起赎懦,每一項均由前一項加一個常數(shù)所構(gòu)成的序列雀鹃。
幾何級數(shù)
常用的兩個公式為
其中公式2如果0<A<1則
公式推導(dǎo)
設(shè)S為總和
同樣的方法可以計算
算數(shù)級數(shù)
例如:
轉(zhuǎn)換成一
轉(zhuǎn)換成二
答案相同喲
但励两,現(xiàn)在下面說的兩個公式就不常見了
當(dāng)K=-1時黎茎,公式2不成立。此時我們需要下面的公式当悔,這個公式在計算機科學(xué)中使用要遠(yuǎn)比在數(shù)學(xué)其他科學(xué)中用的頻繁傅瞻。
調(diào)和數(shù)的和又叫做調(diào)和和
下面近似中誤差趨向于
稱為歐拉常數(shù)
一下兩個公式一般的代數(shù)運算:
0x05 模運算
如果N整除A-B,那么我們就說A與B模N同余盲憎,記為
無論A還是B被N除去嗅骄,所有余數(shù)都是相同的。類似
如同等式的情形
N常常為素數(shù)饼疙,對此溺森,我們有3個重要的定理:
定理一:
如果N是素數(shù),那么
定理二:
如果N是素數(shù)
定理三:
如果N是素數(shù)
0x06 證明方法
證明數(shù)據(jù)結(jié)構(gòu)分析結(jié)論的最常用的方法是歸納法和反證法(偶爾不得已也是用脅迫式證明(proof by intimidation)窑眯。證明一個定理不成立的最好方法是舉出一個反例
歸納法證明
歸納法進(jìn)行證明有兩個標(biāo)準(zhǔn)的部分
- 證明基準(zhǔn)情形(base case)
- 就是確定定理對于某個(某些)小的(通常是退化的)值的正確性
- 歸納假設(shè)(inductive hypothesis)
- 它指的是假設(shè)定理對直到某個有限數(shù)K的所有情況都是成立的屏积。然后使用這個假設(shè)證明定理對下一個值(通常是k+1)也是成立的至此定理得證(k是在有限的情況下)
舉例證明:斐波那契數(shù)列
定理:
0x07 總結(jié)
已經(jīng)很久沒有復(fù)習(xí)數(shù)學(xué)了更胖,這一次復(fù)習(xí)已經(jīng)把很多數(shù)學(xué)知識撿起來了铛铁,心累。