演算法學習系列之 1 常用演算法設計方法

2022-03-28 21:09:43 字數 1084 閱讀 3849

0 可計算理論與常見面試演算法分類

可計算理論又被稱為演算法理論。

1 什麼是可計算的? 什麼又是不可計算的?

這涉及到乙個非常著名的問題:npc np和p 問題。

1 關於演算法設計方法

2 「五大常用演算法」

網上流產著一種「五大常用演算法」的說法,它們分別是:  

分治法(d&c devide&conquer)、

貪心(greed)、

動態規劃(dp)、

分支界限

回溯法(典型應用就是八皇后演算法)。

而在資料結構與演算法分析c語言描述 (data structures and algorithm analysis in c:second edition)一書中,列出了5種常用的演算法設計方法,它們分別是:

分治法、

貪心、

動態規劃、

隨機演算法

回溯法。

演算法導論一書中,出現了上述演算法設計方法中的以下幾種:(分支界限和回溯法沒有提及)

分治法(二分法)

典型代表為二分查詢法(折半查詢法),其缺點是要求待查表為有序表,且插入刪除困難。 其查詢時間複雜度為o(logn)

貪心

dp

結論:

通過取交集可以發現,作為碼農的我們,要重點掌握分治、dp、貪心和回溯。又根據我的面試經歷, 其中前三種分治、dp和貪心是重中之重。 比dp和貪心更困難的演算法一般很少考到。

演算法學習之查詢1

首先考慮的是基本的資料結構 第一類 查詢有無 set 元素 a 是否存在,通常用set 集合 set只儲存鍵,而不需要對應其相應的值。set中的鍵不允許重複 第二類 查詢對應關係 鍵值對應 dict 元素 a 出現了幾次 dict 字典 dict中的鍵不允許重複 第三類 改變對映關係 map 通過將...

演算法學習 1

插入排序是學習演算法時最先學到的乙個演算法,很簡單,也許看一遍就會理解,從而覺得自己掌握這個基本的演算法。但是很多人可能會像我一樣,過了一段時間,提筆來寫一下插入排序的偽 就很難寫出書本上如此優雅的偽 insertion sort a for j 2 to a.length key a j inse...

演算法學習 1

劍指offer演算法題 題目描述 給你一根長度為n的繩子,請把繩子剪成整數長的m段 m n都是整數,n 1並且m 1,m n 每段繩子的長度記為k 1 k m 請問k 1 x xk m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。...