數學與演算法 摘自水木

2021-05-31 22:46:50 字數 996 閱讀 6880

演算法研究的本質特點之一是面向具體問題,有問題才有了對應的演算法。 

而數學的特點之一是系統性和完整性,不是為了某個具體的問題才去研究什麼,反而經常是早已把某個問題研究透徹了才發現它的應用。 

知識學習有3個階段,第一階段只是知道字面的意思, 

第二階段是理解,第三階段是領悟。 

前兩個階段只是被動學習別人創造的東西,第三個階段是你可以創造類似的東西。 

舉點例子吧。比如排序方法有很多,冒泡插入快排等等。理解了本質之後就會發現這些排 

序都是基於兩兩比較的排序,早期的排序方法其實就**於生活中的現象,所以取得名字 

都很生活化,例如「冒泡」和「插入」。而到了後期,比如快排,堆排序,這些方法很明顯源 

於理論的指導。比如基於兩兩比較的排序複雜度是不可能小於nlogn的這個證明。而桶排 

序什麼的就是基於非兩兩比較方法的排序。 

比如圖的鄰接矩陣表示法,這個表示法十分的簡單顯然。但基於這個表示法就引伸出十字 

鍊錶這樣的新的方法。 

比如各種搜尋,廣度優先、深度優先就是最簡單最顯然的搜尋方法(俗稱窮舉)。啟發搜 

索,a*,a+,貪心,這些都是基於最簡單方法的剪支。動態規劃則是在某些情況下,運 

用cache去避免重複的計算,從而達到剪支的速度,但又沒有剪支之後減少搜尋空間導致 

不一定能得到最優節的缺點。 

所以,如果你能達到領悟的高度,就會發現演算法本身也是逐層演進的,雖然這個過程並不 

是包含嚴謹的數學推倒,所以並不是這麼的顯然。 

先去讀一下可計算型和計算複雜性,那裡面的東西比較精煉,有演算法的數學本質。 

快排是技巧級別的東西。。。堆排序和快排之間的關係是應用級別的東西。 

我也有這種困惑。 

比如排序,可以證明複雜度最好是多少? 

但是乙個演算法的提出,卻不是推倒出來的。 

比如快排,還有一些圖演算法,感覺這些東西想出來完全靠一些天才的靈光一閃。

演算法就不是嚴密推演出來的,個人感覺只是牛人的天才想法總結在一起而已 

數學與演算法

求和運算的例子 我們需要求解1,2 3,n 1,2,3,n 1,2,3,n個數的和。常用解法 def sum n n ret sum 0for i in range 1 n 1 ret sum ret sum i return ret sum我們知道在數學中1,2 3,n 1,2,3,n 1,2,3...

(轉貼)數學與演算法隨想

函式是無窮維的向量。平面幾何裡一大堆定義 定理 等式 不等式,在函式空間裡都是適用的。比如著名的施瓦茲 柯西不等式,不過是平面三角裡 cos t 1 的推廣而已。微積分是解決 見微知著 管中窺豹 的問題。通過研究區域性的簡單問題,把握全域性性的複雜問題。其間的橋梁就是牛 萊公式。在外微分形式下,奧高...

割點和橋演算法 摘自《演算法藝術與資訊學競賽》

最近在做圓桌騎士的問題,在乙個無向圖中求出雙連通分量,判斷各雙連通分量中是否含有奇圈,求出不能構成奇圈的節點的個數。思路大概明確了,但是寫的時候老是出現問題,所以專題又看了一下雙連通分量的演算法,看來看去,還是劉汝佳的最經典,索性直接手打出來,方便以後再看 void dfs 節點編號k,k的父親節點...