为什么要来学习算法?写在英雄的5月集训月末
一、引言
“12月,當我站在滑雪場的山頂,風又大又冷,坡又陡又彎,問自己,今天為什么要來滑雪?”
5月,這一天的算法又長又抽象,對應的題目又多又困難,那為什么要來學習算法、刷題呢?
因為興趣,這是自我決定論中的第一步。
它的契機可能是為了面試,但它的目的絕不止于面試。而一件值得堅持的事,有時也需要緣分,讓我們遇到能指引我們的人、能一起抱團的人。
二、找尋引導
有一個B站UP,他說話逗比,他實力過硬,他是ACM全國金牌,他年過30歲出來將算法的金針度于你。
他的B站名為:英雄哪里出來。我稱他為英雄。
三、刷題能切實增強工作能力
力扣等Online Judge的“拒絕”其實反映了工作中最常見的錯誤
Compile Error 編譯錯
公司里面總有人把編譯錯誤的代碼提上來,固然現代git倉庫帶有鉤子做檢查,但自己不應小心么?別人拉完代碼,掛了,很丟人的。
Runtime Error 運行錯
a) 真RE / panic
工作中常見,不是說整體套一個recover就完事兒了。應該認真想清楚為什么算法會panic。
b) Out of Memory 內存超限
學了算法和數據結構你才對內存有“稍微深入一點的認知”。時空平衡,是程序員永遠的話題。
Wrong Answer 結果錯
工作中達成目標的路徑有很多,有時有最優解、有時有次優解;但WA則是說,不滿足目標,可能是邊界問題、也可能是對工作目標理解有問題,這個反饋可能來自你的QA、PM、經理,那么虛心接受。
Output?Limit Exceeded?輸出過多
是不是想起了,寫文件、寫日志,把磁盤打爆的時刻?
Time Limit Exceeded 超時
我們都是先解決問題再考慮性能優化,工作中,500 QPS可能打不死你的服務。但有一天做了一個活動,瞬時QPS來了2w,你發現:php fpm不夠了,上下游瘋狂超時,DB load飆升了,消息隊列堵了,哪哪哪兒不對。
可能就是因為一個算法的性能不足。所以,是不是要重視TLE起來呢?
// 示例 func twoSum(nums []int, target int) []int {var i intvar a [][]int// for i<10 {for { // TLEi /= i // RE: panici++fmt.Println("i:", i) // OLEa = append(a, make([]int, i)) // RE: OOM}return []int{i} // WA }四、如何面對“困難”知識的學習?
降階
降階很重要,和循序漸進是一個意思;也就是說,今天“圖”我看不懂,那么是先去把“深搜”看了。
好了,是不是今天不僅要學“圖”,還要學“深搜”,要學的東西反而變多了?不然,無法達到我們今天可能必須要解決一個“圖”的問題之目的。
先解決問題,再考慮優化
我再給你講一個和降階不一樣的:“今天學一半,即先把低處的果子摘了”。
力扣307,年輕人的第一個線段樹俗話說,沒有觀測就沒有優化。
307. 區域和檢索 - 數組可修改?這題目要用線段樹,不用就是1228ms,用了就是508ms。
今天先把題解了,但我不需要學容量不確定線段樹的插入、Lazy-tag。
五、逆水行舟,不進則退,慢進也退
未來還需加油,按計劃推進:基礎算法、專業算法、工程實踐、架構框架、領域設計。
六、一起學習,變得更強
如果你需要進英雄的星球,參加6月的集訓,請用我推薦碼。進入星球后截圖告訴我。
1. 發你一個79.8元我的分成紅包以茲鼓勵。
2. 拉你進英雄的星球核心群。
3. 給你做一個“社牛”歡迎:)
?
總結
以上是生活随笔為你收集整理的为什么要来学习算法?写在英雄的5月集训月末的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦三国测试服显示连接服务器失败,《梦三国
- 下一篇: php txt投票功能,php查询操作实