從零開始學演算法:8. 召喚神龍
作者:tiankonguse | 更新日期:
人人都需要有邏輯能力,人人都需要有分析能力。
這篇文章你看不懂。
一、背景
大家好,我是tiankonguse。
由於某些原因,經常有人想學習演算法但之前又沒有相關經驗,不知道從何做起。
我思考了許久,計劃寫一個系列來分享如何入門學習演算法。
之前已經分享了ofollow,noindex" target="_blank">認識演算法 》、《瞭解套路長啥樣 》、《排序演算法 》、《二分查詢 》、《萬能陣列 》、《連結串列 》、《跳錶 》七篇文章,這是第八篇,也是從零開始學演算法專題的最後一篇《召喚神龍》。
一、基礎知識
不知你是否還記得, 3月14日,我發表了這個專題的第一篇文章《認識演算法》。
其中提到了計算機和程式語言的兩個特點:
特點1:計算機是萬能的,她可以做到你告訴她的任何事情。
特點2:計算機是低能的,你必須按照計算機的規則並清清楚楚的告訴她如何一步步做。
你想控制萬能的計算機,你需要有強大的思維能力、邏輯能力、分析能力。
你想控制低能的計算機,你需要有細心、耐心、良好的程式碼規範、統一程式碼風格。
是的,當你有強大的思維能力、邏輯能力、分析能力時,再加上細心、耐心、良好的程式碼規範,任何演算法與資料結構,在你面前都可以變得那麼渺小。
談笑間,你就可以看出其本質;
彈指間,你就可以實現其程式碼。
但是,要做到這些都不容易,一切都需要多思考、多練習。
二、回顧
這個系列分享了七篇文章,型別各不相同,目的也不盡相同。
第一篇是讓你認識演算法與資料結構,通過輸入和輸出鍛鍊其耐心,學會細心,並告訴你分析能力很重要。
第二篇想要告訴你這個世界很大,每種問題根據自身的特點,有其對應的結局方案。
我們要做的就是學會基本的知識,提高思維能力分析能力,遇到新問題時使用自己的分析問題能力來想出一個可行的辦法,並解決問題。
第三篇文章介紹了入門級的排序,想要告訴你同一個問題,有很多種方法的,關鍵在於我們的思維是怎麼樣的。
這樣看,可以冒泡、那樣看可以選擇或插入。
而對於歸併、快排或堆排序,則告訴你如果你的認知有限,這些方法是根本不可能想出來的。
怎麼提高問題,多去交流,去解決各種問題,隨著升級打怪我們的認知也就提高了,很多在其他地方的思想就會討論在這裡了。
第四篇二分查詢則說明,表面上明明是一個問題,仔細一看,確實一堆問題。
我們需要細心,需要有清晰的思路,有明確的定義,此時,問題不管怎麼千變萬化,在我們看來都是一個問題。
這是看到的一個問題與初學者看到的一個問題完全不是一個概念了。
第五篇萬能陣列,重點在於資料結構了。
使用相同的資料結構,我們可以做不同的事情,但是對應的成本也是不一樣的。
第六篇連結串列,主要表達了這個世界並不想我們看到的那樣:連續、清晰、明確。
我們只能看到眼前的一步,至於再往後的一步路,很多人就看不清了。
我們需要看清其本質,抓住其位置,才能精確的找到後面的一步步路。
第七篇跳錶和之前完全不一樣了,錯綜複雜的世界展現在我們面前,大家都看花了眼。
此時只有清晰的大腦,正確的邏輯,才能看清這一切背後的本質。
原來跳錶就是一個多叉樹,可以用來做任何事情。
不僅僅支援有序,還可以亂序,還可以動態的調整樹的高度,從而使得這個多叉樹保持平衡。
不過世界這麼複雜,沒人看到這一步,時代在發展,這一步遲早會到來,並被人們接受。
三、征途
演算法與資料結構其實就是一種數理邏輯,定義一些名詞與規則,通過執行規則得出結果。
對於數理邏輯,天生就長了一副抽象的臉,大部分人看不清裡,總是迷迷糊糊的。
根據這些數理邏輯的型別,進行了分類劃分,比如基礎型別、圖論、數學、字串、博弈等。
這些型別由於是強行劃分的,有時候屬於多個分類也屬正常。
剛開始,你只能從簡單的基礎型別來認識它們,也就是這個主題《從零開始學演算法》。
在這裡面有哪些演算法或資料結構不重要,重要的是要鍛鍊自己的邏輯能力、分析能力。
後面的路肯定還很遠,短視的我只計劃了下一個系列,是樹相關的內容,需要有更強的邏輯能力你才能看懂。
四、最後
人人都需要有邏輯能力,人人都需要有分析能力。
這樣面對任何事情,都會很從容的去面對,然後按照自己的理解去做出最正確的選擇。
人人都喜歡聽故事,故事聽多了,人就慢慢沒有邏輯了,不會分析了,總是被故事引導,以故事的結論當做自己的結論,這樣是很可怕的。 怎麼辦,學習演算法可以稍微提高一點自己的邏輯能力、分析能力。
本文首發於公眾號:天空的程式碼世界,微信號:tiankonguse-code。