當前位置:首頁 » 操作系統 » 演算法題刷不動

演算法題刷不動

發布時間: 2023-05-28 06:17:58

⑴ 做為一個初學者,如何才能學好演算法呢,感覺自己很菜

凡事都講究動機,你學習演算法的目的是什麼呢?目的不同,學法不同側重不同。
如果你是准備跳槽,以面試為目的,可以先從cracking the coding interview入手,題目是按照鏈表,樹圖,遞歸這種章節安排的,每章都有題目,難度適中,第一遍自己寫不出來很正常,畫圖分析,然後再做第二遍,第二遍就快很多,理解也深刻了,實在理解不了的演算法,沒辦法,背吧,說不定到後面不知什麼時候就理解了,所謂讀書百遍,其意自現,演算法也一樣。
如果你是半路出家的程序員,看書覺得看不下去,可以試著看看視頻,現在網路這么發達,網上有很多免費的精品視頻,比如潭州教育老師的數據結構以及清華鄧俊輝老師的數據結構都是特別好的課程。
最後一種就是你對演算法理論和精髓確實感興趣,且有一定的數學功底,你可以嘗試研究下《演算法導論》,甚至《計算機程序設計藝術》(反正我是看不下去)。
其實,無論出於哪種目學習演算法,其實最重要的一點就是:多編程實踐,多思考,這是廢話,但這也是真理。

⑵ 演算法怎麼就這么難

推薦書籍:數據結構與演算法分析:C語言描述
可以多看書多做題哦,或者關注我們的v信宮仲號《ACM演算法日常》,有很多演算法學習的資料~

⑶ 演算法如何刷題

1、原題
我自己感覺原題的概率還是挺大的,特別是劍指offer的66題更是如此。千萬別小看這66題,這幾十道題裡面基本所有的演算法類型都有包括在內,常用的數據結構,操作方式,常用演算法思路都有不少的題。

如果真的能夠充分理解這幾十道題的最優解,我感覺其實已經形成基本的演算法思維了。

另外,leetcode的原題也很常見,因為LC本身題量大,在裡面出原題不是為了考倒你,而是檢驗你的刷題質量。

畢竟那些大公司面試官也不是傻子,知道你在面試前肯定會大規模刷題的。所以把刷過的題完全搞懂才是最重要的。

2、改編題
改編題就很顯而易見了。改編題大多需要從基本的演算法原理中找到處理的思維,然後結合實際題干進行性能優化,就能夠搞定。

這里要記得一點的是,正常的演算法考察不會故意刁難你(正常情況),也不會給過多的時間讓你思考和敲代碼。

所以遇到改編題不要想得太復雜,盡量要找到它的演算法思維是什麼。怎麼說呢,透過現象看本質。我總結的改編題有以下幾種思路:

1)新的數據結構,換湯不換葯。比如最常見的排序演算法的改編,原來是對數字進行排序,現在對鏈表排序等等。比較難一點的可能會遇到自定義的數據結構。但是演算法本質不會變。

2)演算法類型改編。

這里要說的就是一個比較大的范圍,比如動態規劃、貪心演算法、遞歸、回溯和分治等等。這種是從演算法大的類型上進行改編,很難用相同的套路去解題。

遇到這類題的關鍵就是要先弄明白演算法核心。比如動態規劃的狀態方程,貪心演算法的局部最優情況,遞歸回溯的邊界判斷,分治的子問題劃分等等。這種類型的確比較難把握,怎麼碩呢,每種類型的都來搞幾道感覺感覺吧。

3)添加應用題背景。

這種題目看起來不難,但是難就難在對應用題背景的理解,需要去理解題意,然後考慮合適的數據結構和處理演算法。這裡面有數學建模的思維在裡面,需要把一堆無用的信息剔除,篩選出有效的信息,然後才能選擇正確的演算法。

3、創新題
這類題考察的是你的擴展思維,如果說上面的題考查的是你的思維深度,這種題就是考察演算法的廣度。可能一看題目,完全沒見過這種類型。但是演算法本身其實不就是讓計算機代替人腦進行高重復性的計算嘛。

首先你需要想到你應該去怎麼算這個題,然後再換到計算機上,會發生什麼問題(空間時間問題,運行效率,代碼冗餘等等),之後再想通過經典的演算法原理來解決這些

1、題型分類
按照個人的習慣,喜歡按照一種類型狂刷,然後再刷另外一種類型。一般常見的演算法類型可分為:

數組、鏈表

包含基本排序演算法、二分查找、鏈表的一系列操作。

棧、隊列、堆

利用棧、隊列互相實現,堆的使用

二叉樹與圖

主要是遍歷演算法和節點的計算:
二叉樹四種遍歷方式、廣度優先遍歷(BFS)和廣度優先遍歷(DFS),節點到節點距離等等。

哈希表

使用標准庫自帶的模板或者函數就很簡單了,一般會與其它數據結構相結合來提升時間復雜度。

字元串操作

字元串的操作也很多,本質上可以看作是數組的操作。另外字元串的一些匹配和尋求字串的演算法還是非常具有思考價值的。KMP,馬拉車等等。

遞歸

重點掌握邊界判斷條件。

回溯

重點掌握邊界判斷條件。

分治

重點掌握如何劃分子問題。

動態規劃

題太多了,可從一階dp到二階dp理解不同的狀態方程。

貪心及其它

這個就很容易理解了,遇到貪心題應該要偷笑了。

2、高頻熱點多刷
這不多說了吧,Leetcode熱題HOT 100。你值得擁有。

在不知道怎麼刷的情況下,不如先刷起來。刷個題沒那麼多捷徑,只有堅持刷起來了,才會形成自己的思維方式和學習習慣。

我建議是先按照類型刷,每個類型刷十幾二十道。然後打混按照演算法熱度排序重新查漏補缺。

3、思路回顧
許多同學在一股腦刷了很多題之後,再看做過的題會發現忘了不少。可能大家都是這樣的吧。我覺得是因為在刷題的時候過於心急,理解了大概就過了,或者類型做的太雜,沒有留下印象。

我比較喜歡的方式是偶爾會重新看看曾經做過的題,就看題目然後想思路,再畫一畫步驟演進,沒時間就不細敲了。這樣可以增強一下思維記憶,之前理解過的東西,再回憶起來還是非常快的。

⑷ 我目前在自學演算法,但是我感覺很吃力啊。有時候一個稍微復雜的演算法,想很久都不能明白。希望前輩們給點建

復雜演算法難理解是肯定的
比如波利亞計數定理,就算我寫出程序了也沒有完全理解
其實弗洛伊德最短路演算法也挺難理解的
可以自己先試著解答題目,然後再去看演算法
或者debug,單步調試看看演算法是怎麼工作的

⑸ 秋招筆試演算法題不會做還怎麼辦

可以通過不斷地思考,總結,歸納,不斷刷題來提高自己演算法題的水平,沒有什麼困難的,你需要盡力去學習,祝取得好成績。

如何提高學習效率

時間長並不一定有用,問題的關鍵是:你的單位時間內的學習效率有多高!看著同學們一天到晚都在學習,但為什麼效果不佳?這是一個學習中的老大難問題,也是最令家長、老師、學生感到困惑的問題。解答這個問題的鑰匙就是利用效率法則——高效利用時間,提高學習效率。

在伏爾泰的作品中曾經提到過一個謎語:「世界上有一樣東西,它是最長的也是最短的,它是最快的也是最慢的,它最不受重視但卻又最受惋惜。

沒有它,什麼事也無法完成,這樣的東西可以使你渺小的消滅,你偉大的永續不絕。善於利用時間學習中,不僅要懂得珍惜時間,更要學會運籌時間,使自己在最短的時間內,得到最大的學習效合理分配精力在學習中。

學會排除干擾在學習中,來自外界和自身的一些干擾都會影響你的學習效率,你必須要學會排除和隔離這些學習中的消極因素,將它們的負面效應降到最低你想到這樣唯一的東西是什麼了嗎?沒錯,它就是時間。

學習是在時間中進行的。無可置疑,誰能擁有更多的時間,誰就能獲得更多的知識。長久以來,人們一直在探索怎樣勒住時間的韁繩,以增強自己利用時間的能力。掌握一些高效利用時間的方法,如優化事序、最佳安排、排除干擾等方法能使你的有效學習時間比別人多很多倍。



⑹ 數據結構,只會做選擇填空題,演算法編寫題不會寫怎麼辦,誰有方法讓我三個月內學會寫演算法題

大哥,你這是在開玩笑吧,計算機領域中三大難學科之一,哪有那麼容易學會,演算法最好是經常敲代碼,多翻書,估計3個月內最多能掌握鏈表,棧,隊列和串,個人感覺圖,樹,遞歸這三個數據結構要有逆天的大腦和邏輯思維才寫得出來

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:640
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:368
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:86
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:310
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:794
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:346
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:213
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:816
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:367
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:594