數(shù)據(jù)結構和算法匯總

數(shù)據(jù)結構和算法
以weiss的數(shù)據(jù)結構和算法帆阳,以及算法導論為綱荆隘,另外參考July和左程云的書籍和代碼扯躺。
https://github.com/julycoding/The-Art-Of-Programming-By-July

數(shù)據(jù)結構

數(shù)組

鏈表

http://www.cnblogs.com/wangyingli/p/5928258.html
http://www.cnblogs.com/flash610/archive/2013/05/14/3078251.html
https://blog.csdn.net/u010275850/article/details/46011951
https://blog.csdn.net/ajian005/article/details/53196224
https://blog.csdn.net/judyge/article/details/42396079
可分為:單鏈表,雙向鏈表藕畔,雙端鏈表马僻,循環(huán)鏈表。
雙向和雙端區(qū)別:https://blog.csdn.net/qq_29606255/article/details/76408285

數(shù)據(jù)結構 實現(xiàn)方式
數(shù)組/單鏈表
隊列 數(shù)組/雙端鏈表
優(yōu)先級隊列 數(shù)組/堆/有序鏈表
雙端隊列 雙向鏈表

棧Stack注服、隊列Queue

棧比較簡單:Stack韭邓,LinkedList等
隊列幾種特殊的:
https://blog.csdn.net/beautiful_face/article/details/76693412
https://blog.csdn.net/u011983531/article/details/78651466
https://www.cnblogs.com/lemon-flm/p/7877898.html
Queue的實現(xiàn)

  1. 沒有實現(xiàn)的阻塞接口的LinkedList: 實現(xiàn)了java.util.Queue接口和java.util.AbstractQueue接口
      內置的不阻塞隊列: PriorityQueue 和 ConcurrentLinkedQueue
      PriorityQueue 和 ConcurrentLinkedQueue 類在 Collection Framework 中加入兩個具體集合實現(xiàn)。
      PriorityQueue 類實質上維護了一個有序列表溶弟。加入到 Queue 中的元素根據(jù)它們的天然排序(通過其 java.util.Comparable 實現(xiàn))或者根據(jù)傳遞給構造函數(shù)的 java.util.Comparator 實現(xiàn)來定位女淑。
      ConcurrentLinkedQueue 是基于鏈接節(jié)點的、線程安全的隊列辜御。并發(fā)訪問不需要同步鸭你。因為它在隊列的尾部添加元素并從頭部刪除它們,所以只要不需要知道隊列的大 小擒权,       ConcurrentLinkedQueue 對公共集合的共享訪問就可以工作得很好袱巨。收集關于隊列大小的信息會很慢,需要遍歷隊列碳抄。

  2. 實現(xiàn)阻塞接口的:
      java.util.concurrent 中加入了 BlockingQueue 接口和五個阻塞隊列類愉老。它實質上就是一種帶有一點扭曲的 FIFO 數(shù)據(jù)結構。不是立即從隊列中添加或者刪除元素剖效,線程執(zhí)行操作阻塞嫉入,直到有空間或者元素可用。
    五個隊列所提供的各有不同:
      * ArrayBlockingQueue :一個由數(shù)組支持的有界隊列璧尸。
      * LinkedBlockingQueue :一個由鏈接節(jié)點支持的可選有界隊列咒林。
      * PriorityBlockingQueue :一個由優(yōu)先級堆支持的無界優(yōu)先級隊列。
      * DelayQueue :一個由優(yōu)先級堆支持的爷光、基于時間的調度隊列垫竞。
      * SynchronousQueue :一個利用 BlockingQueue 接口的簡單聚集(rendezvous)機制。

優(yōu)先隊列(堆)

https://www.cnblogs.com/wuchanming/p/3809496.html
可分為:二叉堆瞎颗,d-堆件甥,左式堆捌议,斜堆,二項隊列

跳表

https://www.cnblogs.com/a8457013/p/8251967.html

樹的分類
https://zh.wikipedia.org/wiki/AVL%E6%A0%91

- 二叉樹   
**二叉查找樹(BST)** 笛卡爾樹 MVP樹 Top tree T樹
- 自平衡二叉查找樹  
AA樹 **AVL樹** 左傾紅黑樹 **紅黑樹** 替罪羊樹 **伸展樹** 樹堆 加權平衡樹
- B樹    
**B+樹** B*樹 Bx樹 UB樹 2-3樹 2-3-4樹 (a,b)-樹 Dancing tree H樹
- 堆 
**二叉堆** 二項堆 斐波那契堆 左偏樹 配對堆 斜堆 Van Emde Boas tree
- Trie  
**后綴樹** 基數(shù)樹 三叉查找樹 X-快速前綴樹 Y-快速前綴樹

以上標黑的為重點關注項
AVL樹:https://zh.wikipedia.org/wiki/AVL%E6%A0%91
伸展樹Splay:
Treap樹:
SBTree樹
RBTree樹
B樹
R樹
區(qū)間樹
二叉堆
Trie樹

圖的分類
http://www.cnblogs.com/wangyingli/p/5974508.html
https://blog.csdn.net/xujingzhou/article/details/79874835

圖算法
https://blog.csdn.net/simanstar/article/details/78906825
https://blog.csdn.net/wsh6759/article/details/7008407
https://blog.csdn.net/gqtcgq/article/details/45618279

最短路徑的Floyd算法
拓撲排序
union-find算法
無環(huán)加權有向圖的最短路徑算法
關鍵路徑
計算無向圖中連通分量的Kosaraju算法
有向圖中含必經點的最短路徑問題
TSP問題
還有A*算法

散列

算法

查找算法

http://www.cnblogs.com/wangyingli/p/5994282.html

排序算法

http://www.cnblogs.com/wangyingli/p/5994256.html

分治算法

貪心算法

動態(tài)規(guī)劃

搜索算法

回溯算法,隨機化算法

方案設計

1.分治法:

將問題分成單獨的階段引有,每個階段互相不干擾很獨立瓣颅,如10米長的木棍,切成10段譬正,每段去解決每一段的問題宫补。(階段沒有關系)

2.貪心法

站在全局的角度,也是將問題堪稱分為多個階段曾我,只不過階段和階段之間有一定的遞進關系粉怕,如從5毛,1元抒巢,2毛贫贝,1毛,2元中蛉谜,去找最少的錢幣構成10塊錢稚晚。首先是站在全局的角度,先從中取其最大值型诚,為第一階段客燕,然后在從剩余的當中在找最大值,構成第二階段狰贯。也搓。。涵紊。傍妒。。如此往復摸柄,這就是貪心法拍顷。

3.動態(tài)規(guī)劃

是階段和階段之間有重復,舉例說明:求一個數(shù)組的最長遞增子序列塘幅。假設數(shù)組有10個元素,那么如何求解呢尿贫?將10個元素劃分成10個階段电媳,第一個階段,從第一個元素中求解庆亡,第二個階段在第一個階段求其解匾乓,第三個階段在第一個,第二個階段綜合的基礎上求解又谋,第四個階段在第1,2,3個階段求其解拼缝,最后娱局。。咧七。衰齐。第k個階段在第1,2....k-1個階段求其最優(yōu)解。

4.遞歸算法

個人感覺和動態(tài)規(guī)劃反著來的樣子继阻,有點像耻涛,問題規(guī)模為10,轉化為問題規(guī)模為9的問題瘟檩,抹缕,問題規(guī)模為9的問題,轉化為8.墨辛。卓研。。睹簇。奏赘。

5.回溯法和分支限界法

都屬于組合優(yōu)化問題,就是按照過程向下面去尋找最優(yōu)解带膀,在尋找最優(yōu)解的過程志珍,不斷的剪取枝條,來減少搜索情況垛叨。不行就換思路伦糯。

遞推,搜索嗽元,貪心和動態(tài)規(guī)劃的思想都是通過拆分問題敛纲,定義狀態(tài)和狀態(tài)之間的關系,從而最初階段的狀態(tài)到達最終狀態(tài)的方式解決問題剂癌。

每個階段只有一個狀態(tài)->遞推

每個階段的所有狀態(tài)都計算出來淤翔,從中選取最優(yōu)的->搜索

每個階段的最優(yōu)狀態(tài)都是由上一個階段的最優(yōu)狀態(tài)得到的->貪心

每個階段的最優(yōu)狀態(tài)可以從之前的某個階段的某個(或某些)狀態(tài)直接得到->動態(tài)規(guī)劃

一個問題會有多種狀態(tài)的定義和階段的劃分,某一種定義有后效性不代表該問題不適合用哪種方法佩谷。

貪心旁壮,動歸這類的問題本質都是對搜索的剪枝

適用于哪種方法來解決,在于你怎么看待這個世界~

https://segmentfault.com/a/1190000006022019#articleHeader11

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末谐檀,一起剝皮案震驚了整個濱河市抡谐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桐猬,老刑警劉巖麦撵,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡免胃,警方通過查閱死者的電腦和手機音五,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羔沙,“玉大人躺涝,你說我怎么就攤上這事∏说” “怎么了诞挨?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呢蛤。 經常有香客問我惶傻,道長,這世上最難降的妖魔是什么其障? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任银室,我火速辦了婚禮,結果婚禮上励翼,老公的妹妹穿的比我還像新娘蜈敢。我一直安慰自己,他們只是感情好汽抚,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布抓狭。 她就那樣靜靜地躺著,像睡著了一般造烁。 火紅的嫁衣襯著肌膚如雪否过。 梳的紋絲不亂的頭發(fā)上妆偏,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天酣倾,我揣著相機與錄音,去河邊找鬼趴泌。 笑死告组,一個胖子當著我的面吹牛煤伟,可吹牛的內容都是我干的。 我是一名探鬼主播木缝,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼便锨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了我碟?” 一聲冷哼從身側響起鸿秆,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怎囚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡恳守,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年考婴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片催烘。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡沥阱,死狀恐怖,靈堂內的尸體忽然破棺而出伊群,到底是詐尸還是另有隱情考杉,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布舰始,位于F島的核電站崇棠,受9級特大地震影響,放射性物質發(fā)生泄漏丸卷。R本人自食惡果不足惜枕稀,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谜嫉。 院中可真熱鬧萎坷,春花似錦、人聲如沸沐兰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽住闯。三九已至瓜浸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寞秃,已是汗流浹背斟叼。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留春寿,地道東北人朗涩。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像绑改,于是被迫代替她去往敵國和親谢床。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容