有人說,資料結構與演算法,計算機網路,與作業系統都一樣,脫離日常開發,除了面試這輩子可能都用不到呀!
有人說,我是做業務開發的,只要熟練api,熟練框架,熟練各種中介軟體,寫的**不也能「飛」起來嗎?
於是問題來了:為什麼還要學習資料結構與演算法呢?
#理由一:我想好了,還是需要學習資料結構與演算法。但是我有兩個困惑:面試的時候,千萬不要被資料結構與演算法拖了後腿
#理由二:
你真的願意做一輩子crud boy嗎
#理由三:
不想寫出開源框架,中介軟體的工程師,不是好廚子
1.如何著手學習呢?
2.有哪些內容要學習呢?
學習方法推薦:
#學習方法學習內容推薦:資料結構與演算法內容比較多,我們本著實用原則,學習經典的、常用的資料結構、與常用演算法1.從基礎開始,系統化學習
2.多動手,每一種資料結構與演算法,都自己用**實現出來
3.思路更重要:理解實現思想,不要背**
4.與日常開發結合,對應應用場景
#學習內容:到目前為止,基於線性表的資料結構我們都看完了,簡單回顧一下,它們是:陣列、鍊錶、棧、佇列。這些資料結構是其它資料結構與演算法的基礎,需要重點關注。1.資料結構的定義
2.演算法的定義
3.複雜度分析
4.常用資料結構
陣列、鍊錶、棧、佇列
雜湊表、二叉樹、堆
跳表、圖
5.常用演算法
遞迴、排序、二分查詢
搜尋、雜湊、貪心、分治
動態規劃、字串匹配
這一篇開始,我們開啟演算法的列車了,請繫好安全帶!第乙個要看的演算法是:遞迴。遞迴這兩個字你一定很熟悉,有沒有?
如果沒有的話,我們先舉乙個例子。從2023年開始到如今,知識付費發展的如火如荼。如果你也是其中的一員,比如說在xx平台購買了xx課程。大多數平台都會告訴你,將你購買的課程分享出去,假如有人通過你分享的鏈結購買了該課程,那麼平台會給你佣金返現。
既然與錢有關係,那就比較麻煩了!對於平台來說,有這麼幾個問題需要搞清楚。比如說:1.誰是一級推薦人?
2.誰是二級推薦人......?
3.誰是最終推薦人?
因為不同級的推薦人,返現佣金的比例可不一樣,千萬別返錯了,對吧。關於這種類似求推薦人的問題,有請我們今天的主角登場,它就是:遞迴。
#遞迴稍微有些複雜,我們通過兩篇來學習:簡述:1.a在某某知識付費平台購買了課程:xx2.b通過a3.c通過b1.第一篇是見面禮:
1.1.體會兩個生活中的小案例 2
.第二篇是重頭戲:
2.1.詳細分析遞迴的實現
2.2.遞迴實現的注意事項
4.以此類推下去......
5.假如以c為起點,如何求出課程:xx的最終推薦人?
6.假設資料庫中儲存的資料是這樣的:
求解:1.你肯定想到了,這個問題好簡單,經常寫如下類似這樣的**:
/**簡述:1.你與女朋友正在電影院看電影,電影已經放映* 求最終推薦人
*/public
string findrootrecommend(string userid,string xx)
//遞迴查詢
return
findrootrecommend(分享使用者id,xx);
}
2.突然,女朋友問你:我們坐在電影院的第幾排?
3.你一看,壞了:電影院一片漆黑,伸手不見五指
4.這個問題必須要回答,因為是女朋友問的,你該怎麼辦?
求解:1.別忘了,你是程式設計師,對於程式設計師來說,這個問題太簡單了
2.用遞迴:先問前一排的人,他們在第幾排?
3.前一排的人,再問他的前一排,在第幾排?
4.以此類推......
5.一直問到第一排的人,第一排不需要再問了,直接回答在第一排
6.第二排的人:在第一排的人基礎上 + 1
7.以此類推......
8.每一排都在前一排的基礎上 + 1,最後到了你們這一排,女朋友得到了滿意的答案
9.你很驕傲有沒有?用**回答,類似這樣:
publicint movies(int
n)
//遞迴向前一排詢問
return movies(n - 1) + 1;
}
資料結構與演算法系列九(遞迴詳解)
有人說,資料結構與演算法,計算機網路,與作業系統都一樣,脫離日常開發,除了面試這輩子可能都用不到呀!有人說,我是做業務開發的,只要熟練api,熟練框架,熟練各種中介軟體,寫的 不也能 飛 起來嗎?於是問題來了 為什麼還要學習資料結構與演算法呢?理由一 面試的時候,千萬不要被資料結構與演算法拖了後腿 ...
C 資料結構與演算法系列(八) 棧(Stack)
棧是乙個先入後出 filo first in last out 的有序列表 根據棧的定義可知,最先放入棧中的元素在棧底,最後放入的元素在棧頂,而刪除元素剛好相反,最後放入的元素最先刪除,最先放入的元素最後刪除 子程式的呼叫 在跳往子程式前,會先將下乙個指令的位址存入堆疊中,直到子程式執行完後再將位址...
C 資料結構與演算法系列(十三) 遞迴 迷宮問題
初始化地圖 n for int i 0 i map.length i system.console.writeline setway map,1,1 system.console.writeline n小球走過,並標識過的地圖情況 n for int i 0 i map.length i syste...