無論你是資訊科技的從業人員,還是計算機專業的在校學生,再或者是從事相關專業的研究人員,熟練掌握一門計算機語言的重要性都不言而喻。但是不是掌握了這其中的語法規則就能寫出漂亮的程式了呢?答案當然是否定的。因為你還需要另外一樣至少同等重要的工具——演算法。演算法和語言的關係,其實很像是「道」和「術」的關係。掌握一門語言,就如同習得一門技藝,可以成為一名工匠。但要想從工匠一躍成為大師,單單停留在「術」的層面顯然不夠,更重要的是悟「道」。而演算法無疑就是計算機程式設計中的「道」。
今日,受邀做客csdn社群問答,活動主題「隱匿在資料結構背後的原理」,並與廣大網友就一下話題展開討論:
演算法與資料結構的關係資料結構的高階應用(例如在機器學習演算法或空間資料庫演算法中的應用)如何學好演算法和資料結構
本次活動受csdn和電子工業出版博文視點資訊****大力支援,待活動結束後將抽取3到5名幸運參與者,贈送《演算法之美——隱匿在資料結構背後的原理(c++版)》書籍一本。活動位址:
活動主頁內附有《演算法之美》一書的試讀樣章,神馬八皇后問題,迷宮問題,漢諾塔問題,傳染病問題等一大撥經典演算法問題正在襲來。
最後由昨天的一件事引發了我的一些思考,算是方**上的一些東西吧,跟大家分享。事情的起因是有讀者參與我的有獎捉蟲活動認為找到了書中的乙個bug,最後證明是鬧了烏龍。
由此我提出了三點看法:
1)金無足赤,人無完人。連大神knuth的書也有錯誤(據說他會給每找出他乙個錯誤的人256美分作為獎勵)。我確信《演算法之美》並不完美,但是我一直都以一種相當認真的態度來對待它。特別地,我希望可以通過有獎捉蟲的活動來不斷完善它。事實上,我已經發現了幾處錯誤,但我並沒有把它們加入到勘誤表中,就是希望給參與活動的讀者留一些機會:)
2)挑錯誤的技巧和與人分享的精神。如果你覺得書中**是錯誤的,那麼指出錯誤的正確方式應該是告訴大家什麼才是正確的,以及為什麼那個是錯的,而這個是對的。即使對於乙個錯別字而言,如果你只是說「聲名狼籍」中有錯字,我想這是不夠的。你還應該告訴大家正確的寫法是「聲名狼藉」。這樣做,第一是為了讓其他讀者能夠從你找出的錯誤中學到東西(你只說乙個東西錯了卻不告訴別人怎樣改正以及為什麼錯了,別人其實什麼都沒學到)。第二,你分析和改正錯誤的過程恰恰是你學習和提高的最重要環節(這一點我的一本譯作《**閱讀》中有更為精闢的論述)。
3)最後仍然算是乙個學習和閱讀的建議。全書的**我都已經公開發布在我的部落格上。**當然很重要,「talk is cheap. show me the code.」(語出linus torvalds)。但之於我這本書而言,它的精華絕對不在源**上,而應該是我對於演算法原理本身的講解。我甚至不希望這些冗長的**擠占了我圖書寶貴的篇幅,而將它們**到我的部落格上,讀者應該明白我的一番用心。
MySQL索引背後的資料結構及演算法原理
mysql索引背後的資料結構及演算法原理 一 定義 索引定義 索引 index 是幫助mysql高效獲取資料的資料結構。本質 索引是資料結構。二 b tree m階b tree滿足以下條件 1 每個節點至多可以擁有m棵子樹。2 根節點,只有至少有2個節點 要麼極端情況,就是一棵樹就乙個根節點,單細胞...
MySQL索引背後的資料結構及演算法原理
閱讀部落格 mysql官方對索引的定義為 索引 index 是幫助mysql高效獲取資料的資料結構。提取句子主幹,就可以得到索引的本質 索引是資料結構。我們知道,資料庫查詢是資料庫的最主要功能之一。我們都希望查詢資料的速度能盡可能的快,因此資料庫系統的設計者會從查詢演算法的角度進行優化。最基本的查詢...
MySQL索引背後的資料結構及演算法原理(五)
innodb索引實現 雖然innodb也使用b tree作為索引結構,但具體實現方式卻與myisam截然不同。第乙個重大區別是innodb的資料檔案本身就是索引檔案。從上文知道,myisam索引檔案和資料檔案是分離的,索引檔案僅儲存資料記錄的位址。而在innodb中,表資料檔案本身就是按b tree...