算法是所有程序員必備的基本功,不會算法的程序員都容易被恥笑,今天就為大家盤點出 所有程序員都需要掌握的十大算法,可以依次進行學習
一.Floyd Warshall算法
Floyd-Warshall算法,中文稱弗洛伊德算法或佛洛伊德算法,是解決任意兩點間的最短路徑的一種算法,可以正确處理有向圖或負權(但不可存在負權回路)的最短路徑問題,同時也被用于計算有向圖的傳遞閉包。
二.二分查找
也稱折半查找算法、對數查找算法,是一種在有序數組中查找某一特定元素的搜索算法。
搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果某一特定元素大于或小于中間元素,則在數組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。
如果在某一步驟數組為空,則代表找不到。這種搜索算法每一次比較都使搜索範圍縮小一半。
三.貝爾曼福特算法
貝爾曼福特算法是求解單元最短路徑問題的一種算法,由理查德貝爾曼和萊斯特福特創立的。有時候這種算法也被稱為Moore-Bellman-ford算法,因為Edward F . Moore也為這個算法的發展做出了貢獻。
它的原理是對圖進行|V|-1次松弛操作,得到所有可能的最短路徑。其優于迪克斯徹算法的方面是邊的權值可以為負數、實現簡單,缺點是時間複雜度過高,高達O(|V||E|)。但算法可以進行若幹種優化,提高了效率。
四.快速排序
快速排序是一種交換類排序,可以理解成對冒泡排序的一種改進排序,但快速排序的複雜度相對于冒泡排序的提升相當大。他的思路是,選取一個關鍵字K,将所有比K小的記錄放在K前面,比K大的數放在K後面,一趟快速排序完成,完整的快速排序就是對分出的每個新數組再進行一次快速排序,也就是一趟排序的遞歸操作。
五.貪心算法
顧名思義,貪心法,貪心算法總是做出在當前看來是最好的選擇。雖然貪心算法不是對所有問題都能得到整體最優解,但對範圍相當廣的許多問題都能産生整體最優解或是問題的次優解。因此有很好使用它的必要性。
貪心算法既是一種解題策略,也是一種解題思路。
六.拓撲排序
拓撲排序是一種把有向無環圖轉換成線性序列的排序算法,算法的輸入是一個有向無環圖,經過算法分析吧圖中的所有節點按照先後順序進行拆解,最後得到一個有順序的隊列,在前的節點靠前,越靠後的節點或有多個節點指向該節點,那這個節點再隊列中的位置就越靠後。
七.動态規劃
很多人都會覺得動态規劃很難,動态規劃的核心思想有以下兩點:
第一,任何看似很複雜很難解決的問題,其實都可以歸結為一系列子問題,無論一個問題有多複雜,隻要他有解決方案,就可以歸結為N個子問題,某種意義上,我們可以認為動态規劃是對遞歸的一種優化;
第二,我們在解決N個子問題的時候,要留心整體上有沒有做無用功,通過備忘錄的方式保存中間狀态,使得不反複去計算已經求得的中間解。
八.最小生成樹
最小生成樹問題,簡稱MST,指給定一個帶權的無向連通圖,如果選取一棵生成樹,使樹上所有邊上權的總和為最小,這叫最小生成樹。
圖有N個頂點,就一定有N-1條邊,且必須包含所有頂點,所有邊都在圖中。解決最小生成樹問題的算法主要有普利姆算法和克魯斯卡爾算法。
九.深度搜索和廣度搜索算法
又稱DFS和BFS。深度優先搜索的原理是:首先選擇一個頂點作為起始點,接着從他各個相鄰點出發進行依次訪問,直到所有與起始點有路徑相通的頂點都被訪問到。若此時有沒被訪問到的節點,則選擇一個其他頂點進行再次訪問。
廣度優先搜索的原理是:選擇一個頂點作為起始點,依次訪問該起始點的所有鄰接點,再根據鄰接點訪問他們各自的鄰接點,并保證先訪問節點的鄰接點先與後訪問節點的鄰接點被訪問。
十.樸素貝葉斯分類算法
樸素貝葉斯分類算法是一種基于貝葉斯定理的簡單概率分類算法。
貝葉斯分類的基礎是概率推理,就是在各種條件的存在不确定,僅知其出現概率的情況下,如何完成推理和決策任務。概率推理是與确定性推理相對應的。而樸素貝葉斯分類器是基于獨立假設的,即假設樣本每個特征與其他特征都不相關。
看完不要忘了點贊收藏哦,謝謝大家。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!