java架构师进阶之独孤九剑:数据结构以及书籍推荐
這是整個java架構師連載系列,分為9大步驟,我們現在還在第一個步驟:程序設計和開發->數據結構與算法。
“
如果說 Java 是自動檔轎車,C 就是手動檔吉普。數據結構呢?是變速箱的工作原理,
你完全可以不知道變速箱怎樣工作,就把自動檔的車子從 A 開到 B,而且未必就比懂得的人慢。寫程序這件事,和開車一樣,經驗可以起到很大作用,但如果你不知道底層是怎么工作的,就永遠只能開車,既不會修車,也不能造車。如果你對這兩件事都不感興趣也就罷了,數據結構懂得用就好。但若你此生在編程領域還有點更高的追求,數據結構是繞不開的課題。
不想學好基礎的程序員很難進階到架構師。
為什么要學習數據結構
學習數據結構,并不僅僅是學習其中現成的那些隊列,堆棧,二叉樹,圖等經典結構, 也不僅僅是學習其中的那些快速排序、冒泡排序等算法。
更重要的是你要學習一種思想:如何把現實問題轉化為計算機語言的表示。
當你用著java里面的容器類很爽的時候,你有沒有想過,怎么ArrayList就像一個無限擴充的數組,也好像鏈表之類的。好用嗎?好用,這就是數據結構的用處,只不過你在不知不覺中使用了。
校招會發現大公司考的就是這類的題目,剛開始不會考你java的線程,容器,多態什么的特性,考的就是你的基礎,你的這些基礎扎實,學其他不是問題。
用于現實世界的存儲,我們使用的工具和建模。每種數據結構有自己的優點和缺點,想想如果Google的數據用的是數組的存儲,我們還能方便地查詢到所需要的數據嗎。
而算法,在這么多的數據中如何做到最快的插入,查找,刪除,也是在追求更快。
常用的數據結構
鏈表
鏈表是一種由節點(Node)組成的線性數據集合,每個節點通過指針指向下一個節點。它是一種由節點組成,并能用于表示序列的數據結構。
單鏈表:每個節點僅指向下一個節點,最后一個節點指向空(null)。
雙鏈表:每個節點有兩個指針p,n。p指向前一個節點,n指向下一個節點;最后一個節點指向空。
循環鏈表:每個節點指向下一個節點,最后一個節點指向第一個節點。
時間復雜度:
索引:O(n)
查找:O(n)
插入:O(1)
刪除:O(1)
棧
棧是一個元素集合,支持兩個基本操作:push用于將元素壓入棧,pop用于刪除棧頂元素。
后進先出的數據結構(Last In First Out, LIFO)
時間復雜度
索引:O(n)
查找:O(n)
插入:O(1)
刪除:O(1)
隊列
隊列是一個元素集合,支持兩種基本操作:enqueue 用于添加一個元素到隊列,dequeue 用于刪除隊列中的一個元素。
先進先出的數據結構(First In First Out, FIFO)。
時間復雜度
索引:O(n)
查找:O(n)
插入:O(1)
刪除:O(1)
樹
樹是無向、聯通的無環圖。
二叉樹
二叉樹是一個樹形數據結構,每個節點最多可以有兩個子節點,稱為左子節點和右子節點。
滿二叉樹(Full Tree):二叉樹中的每個節點有 0 或者 2 個子節點。
完美二叉樹(Perfect Binary):二叉樹中的每個節點有兩個子節點,并且所有的葉子節點的深度是一樣的。
完全二叉樹:二叉樹中除最后一層外其他各層的節點數均達到最大值,最后一層的節點都連續集中在最左邊。
二叉查找樹
二叉查找樹(BST)是一種二叉樹。其任何節點的值都大于等于左子樹中的值,小于等于右子樹中的值。
時間復雜度
索引:O(log(n))
查找:O(log(n))
插入:O(log(n))
刪除:O(log(n))
數據結構和算法書籍推薦
1.算法導論
這本書深入淺出,全面地介紹了計算機算法。對每一個算法的分析既易于理解又十分有趣,并保持了數學嚴謹性。本書的設計目標全面,適用于多種用途。涵蓋的內容有:算法在計算中的作用,概率分析和隨機算法的介紹。書中專門討論了線性規劃,介紹了動態規劃的兩個應用,隨機化和線性規劃技術的近似算法等,還有有關遞歸求解、快速排序中用到的劃分方法與期望線性時間順序統計算法,以及對貪心算法元素的討論。此書還介紹了對強連通子圖算法正確性的證明,對哈密頓回路和子集求和問題的NP完全性的證明等內容。全書提供了900多個練習題和思考題以及敘述較為詳細的實例研究。
2.大話數據結構
通篇以一種趣味方式來敘述,大量引用了各種各樣的生活知識來類比,并充分運用圖形語言來體現抽象內容,對數據結構所涉及到的一些經典算法做到逐行分析、多算法比較。與市場上的同類數據結構圖書相比,本書內容趣味易讀,算法講解細致深刻,是一本非常適合自學的讀物。
3.數據結構與算法
本書是國外數據結構與算法分析方面的經典教材,使用卓越的Java編程語言作為實現工具討論了數據結構(組織大量數據的方法)和算法分析(對算法運行時間的估計)。 隨著計算機速度的不斷增加和功能的日益強大,人們對有效編程和算法分析的要求也不斷增長。本書把算法分析與最有效率的Java程序的開發有機地結合起來,深入分析每種算法,內容全面、縝密嚴格,并細致講解精心構造程序的方法。
你可能也喜歡:
總結
以上是生活随笔為你收集整理的java架构师进阶之独孤九剑:数据结构以及书籍推荐的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源开放 | 中文相对复杂词汇识别数据集
- 下一篇: 领域应用 | 知识图谱在小米的应用与探索