演算法基礎 一

2021-10-07 16:48:54 字數 1178 閱讀 1205

一些有用的演算法

數值演算法,比如隨機化、分解因式、處理質數、數值積分

熟練操作常見的資料結構的方法,比如堆、樹、平衡樹、b數

排序和搜尋

網路演算法,比如最短路徑、生成樹、拓撲排列和流計算

一些常規的問題解決技巧

暴力或者窮舉搜尋

分治法回溯法

遞迴分支界限

貪心演算法和爬山法

最小花費演算法

縮小範圍

啟發式演算法

就我個人而言,演算法只是一種樂趣,它們就像填字遊戲或者數獨一樣。我喜歡組成乙個複雜的演算法,倒一些資料進去,然後看到乙個美麗的三維圖形、一條匹配一系列點的曲線,或者一些其他優雅的答案出現。我喜歡這種感覺。

---------------------羅德·史蒂芬斯

1.1 演算法和資料結構

1.2

演算法的特點:正確性,可維護性,效率

1.3大o符號

大o符號使用函式來描述資料規模增長到很大時演算法的最壞效能是如何與問題規模相關的(這有時稱為程式的漸進性能)。這個函式寫在大寫字母o後面的括號裡。

計算演算法的大o符號有5個基本的規則:

如果乙個演算法對於乙個數學函式f執行一系列的步驟f(n)次,他需要o(f(n))步

如果乙個演算法對於函式f執行了乙個需要o(f(n))步的操作,然後對於函式g執行了第二個需要o(g(n))步的操作,這個演算法的總體複雜度為o(f(n)+g(n))。

如果乙個演算法的複雜度是o(f(n)+g(n)),並且對於足夠大的n,函式f(n)遠大於g(n),這個演算法的效能可以被簡化為o(f(n))。

如果乙個演算法執行了乙個需要o(f(n))步的操作,對於操作中的每一步執行了另外的o(g(n))步,這個演算法的總體複雜度為o(f(n)*g(n))。

忽略常數的倍數。如果c是乙個常數,o(cf(n))等同於o(f(n))。並且o(f(cn))等同於o(f(n))。

「大o符號只是為了讓你了解演算法的理論效能」

1.4常見的執行時間的函式

演算法基礎(一) 基礎

學習了那麼久,一直沒有好好寫寫演算法。下面我簡單描述一下演算法方面知識。在已證明演算法正確性的前提下,評價演算法的好壞主要是關注演算法在時間和 空間上效能的優劣。演算法時間效能 的分析是通過計算 演算法時間複雜度 實現的,其關鍵就是計算演算法的執行時間。乙個演算法的執行時間,就是演算法中每條語句的執...

演算法基礎(一)

博主這幾天面試總會被問到演算法相關知識,關鍵博主面試的是西安測試崗位,現在測試門檻都這麼高了嗎。各種手撕演算法 那就先從最基本開始看吧 一 時間複雜度計算 時間複雜度 定性描述該演算法的執行時間 這種只執行一次的,時間複雜度為o 1 這種執行n次的,時間複雜度為o n 當然如果前面是執行一次的,後面...

基礎演算法(一)

口訣 選泡插,堆歸快希桶計基,恩方恩老恩恩一三,對恩加k恩乘k,不穩穩穩不穩穩,不穩不穩穩穩穩。最簡單但是最沒用的排序演算法,也有優化空間。先區域性後整體 先粗糙後精細 public class selectionsort selectionsort arr 選擇排序 selectionsortwi...