① 秋招筆試演算法題不會做還怎麼辦
可以通過不斷地思考,總結,歸納,不斷刷題來提高自己演算法題的水平,沒有什麼困難的,你需要盡力去學習,祝取得好成績。
如何提高學習效率
時間長並不一定有用,問題的關鍵是:你的單位時間內的學習效率有多高!看著同學們一天到晚都在學習,但為什麼效果不佳?這是一個學習中的老大難問題,也是最令家長、老師、學生感到困惑的問題。解答這個問題的鑰匙就是利用效率法則——高效利用時間,提高學習效率。
在伏爾泰的作品中曾經提到過一個謎語:「世界上有一樣東西,它是最長的也是最短的,它是最快的也是最慢的,它最不受重視但卻又最受惋惜。
沒有它,什麼事也無法完成,這樣的東西可以使你渺小的消滅,你偉大的永續不絕。善於利用時間學習中,不僅要懂得珍惜時間,更要學會運籌時間,使自己在最短的時間內,得到最大的學習效合理分配精力在學習中。
學會排除干擾在學習中,來自外界和自身的一些干擾都會影響你的學習效率,你必須要學會排除和隔離這些學習中的消極因素,將它們的負面效應降到最低你想到這樣唯一的東西是什麼了嗎?沒錯,它就是時間。
學習是在時間中進行的。無可置疑,誰能擁有更多的時間,誰就能獲得更多的知識。長久以來,人們一直在探索怎樣勒住時間的韁繩,以增強自己利用時間的能力。掌握一些高效利用時間的方法,如優化事序、最佳安排、排除干擾等方法能使你的有效學習時間比別人多很多倍。
② 搞編程的我是個演算法渣,怎麼樣能很快的提升演算法水平有什麼必要的或者非常基礎的演算法需要掌握
演算法的實現需要你對數據結構有充分的理解,我個人覺得數據結構是演算法的基礎,至少我是先熟悉數據結構再弄演算法的,這樣接受起來比較快。所以建議你
1:先花些時間掌握數據結構知識,比如數據結構基本類型;線性表、樹、圖、集合的存儲表示以及他們的應用,而要想熟練運用這些線性表、樹、圖、集合,那麼又必須要非常熟練棧和隊列,因為棧和隊列是必不可少的,如果你非常熟練運用棧和隊列,那麼你肯定能輕松搞定牽涉到線性表、樹等這些應用的。
2:掌握基本的查找演算法和排序演算法;因為有了上述數據結構的鋪墊,也較容易接受查找和排序演算法在計算機內部的組織形式,對於運用計算機思想思考問題有很大的幫助。
3:學習常用的演算法思想,如分治、貪心、動態規劃、回溯等等。學習之後自己動手找一些題目敲敲代碼,剛開始可以按照答案敲,慢慢要丟開答案自己來組織思路了。
4:要熟悉分析演算法的復雜度,因為接著要開始思考代價問題了,包括時間和空間的開銷。
其實用誰的書都無所謂,只要內容齊全了,而你自己閱讀起來接受得更好就用誰的。如果還有時間,推薦你看看朱東生趙建利等的《新編數據結構演算法 考研指導》(當時我考研用來輔助看的,裡面講解的遞歸與非遞歸之間的轉換非常好)。
5:如果有興趣可以看看《編程珠璣》和《編程之美》,有些企業招聘時會從中挑個別題目出題。
總之,我覺得數據結構是基礎,演算法是靈魂。多思考,多運用就能熟能生巧了。工科類的不多動動手那些知識是很容易生疏的。
以上觀點僅供參考,純屬個人觀點。
③ 計算機考研中數據結構演算法設計題如何在短期內提高只要不是完全寫不出來就好,不用完全正確
數據結構和演算法類的題目是考察計算機專業學生的「內力」,需要下功夫來提高。如果想速成,那麼就把書上所有考試的考點自己敲代碼敲兩三遍,應付考研應該沒問題了。
④ 演算法如何刷題
1、原題
我自己感覺原題的概率還是挺大的,特別是劍指offer的66題更是如此。千萬別小看這66題,這幾十道題裡面基本所有的演算法類型都有包括在內,常用的數據結構,操作方式,常用演算法思路都有不少的題。
如果真的能夠充分理解這幾十道題的最優解,我感覺其實已經形成基本的演算法思維了。
另外,leetcode的原題也很常見,因為LC本身題量大,在裡面出原題不是為了考倒你,而是檢驗你的刷題質量。
畢竟那些大公司面試官也不是傻子,知道你在面試前肯定會大規模刷題的。所以把刷過的題完全搞懂才是最重要的。
2、改編題
改編題就很顯而易見了。改編題大多需要從基本的演算法原理中找到處理的思維,然後結合實際題干進行性能優化,就能夠搞定。
這里要記得一點的是,正常的演算法考察不會故意刁難你(正常情況),也不會給過多的時間讓你思考和敲代碼。
所以遇到改編題不要想得太復雜,盡量要找到它的演算法思維是什麼。怎麼說呢,透過現象看本質。我總結的改編題有以下幾種思路:
1)新的數據結構,換湯不換葯。比如最常見的排序演算法的改編,原來是對數字進行排序,現在對鏈表排序等等。比較難一點的可能會遇到自定義的數據結構。但是演算法本質不會變。
2)演算法類型改編。
這里要說的就是一個比較大的范圍,比如動態規劃、貪心演算法、遞歸、回溯和分治等等。這種是從演算法大的類型上進行改編,很難用相同的套路去解題。
遇到這類題的關鍵就是要先弄明白演算法核心。比如動態規劃的狀態方程,貪心演算法的局部最優情況,遞歸回溯的邊界判斷,分治的子問題劃分等等。這種類型的確比較難把握,怎麼碩呢,每種類型的都來搞幾道感覺感覺吧。
3)添加應用題背景。
這種題目看起來不難,但是難就難在對應用題背景的理解,需要去理解題意,然後考慮合適的數據結構和處理演算法。這裡面有數學建模的思維在裡面,需要把一堆無用的信息剔除,篩選出有效的信息,然後才能選擇正確的演算法。
3、創新題
這類題考察的是你的擴展思維,如果說上面的題考查的是你的思維深度,這種題就是考察演算法的廣度。可能一看題目,完全沒見過這種類型。但是演算法本身其實不就是讓計算機代替人腦進行高重復性的計算嘛。
首先你需要想到你應該去怎麼算這個題,然後再換到計算機上,會發生什麼問題(空間時間問題,運行效率,代碼冗餘等等),之後再想通過經典的演算法原理來解決這些
1、題型分類
按照個人的習慣,喜歡按照一種類型狂刷,然後再刷另外一種類型。一般常見的演算法類型可分為:
數組、鏈表
包含基本排序演算法、二分查找、鏈表的一系列操作。
棧、隊列、堆
利用棧、隊列互相實現,堆的使用
二叉樹與圖
主要是遍歷演算法和節點的計算:
二叉樹四種遍歷方式、廣度優先遍歷(BFS)和廣度優先遍歷(DFS),節點到節點距離等等。
哈希表
使用標准庫自帶的模板或者函數就很簡單了,一般會與其它數據結構相結合來提升時間復雜度。
字元串操作
字元串的操作也很多,本質上可以看作是數組的操作。另外字元串的一些匹配和尋求字串的演算法還是非常具有思考價值的。KMP,馬拉車等等。
遞歸
重點掌握邊界判斷條件。
回溯
重點掌握邊界判斷條件。
分治
重點掌握如何劃分子問題。
動態規劃
題太多了,可從一階dp到二階dp理解不同的狀態方程。
貪心及其它
這個就很容易理解了,遇到貪心題應該要偷笑了。
2、高頻熱點多刷
這不多說了吧,Leetcode熱題HOT 100。你值得擁有。
在不知道怎麼刷的情況下,不如先刷起來。刷個題沒那麼多捷徑,只有堅持刷起來了,才會形成自己的思維方式和學習習慣。
我建議是先按照類型刷,每個類型刷十幾二十道。然後打混按照演算法熱度排序重新查漏補缺。
3、思路回顧
許多同學在一股腦刷了很多題之後,再看做過的題會發現忘了不少。可能大家都是這樣的吧。我覺得是因為在刷題的時候過於心急,理解了大概就過了,或者類型做的太雜,沒有留下印象。
我比較喜歡的方式是偶爾會重新看看曾經做過的題,就看題目然後想思路,再畫一畫步驟演進,沒時間就不細敲了。這樣可以增強一下思維記憶,之前理解過的東西,再回憶起來還是非常快的。