當前位置:首頁 » 操作系統 » 演算法導論程序

演算法導論程序

發布時間: 2022-03-01 19:17:21

① 除了演算法導論 計算機程序設計藝術還有哪些比較好的演算法書籍

演算法設計
數據結構與演算法分析 -- C語言描述

② 先看演算法導論還是先看數據結構原因是什麼

個人建議是先看數據結構,演算法是基於數據處理的,數據結構就是為了方便數據處理而產生的

③ 演算法導論這本書應該怎麼看

看每一節的解釋,不要看偽代碼,不要看前面看不懂的部分

④ 機器學習的演算法和普通《演算法導論》里的演算法有什麼本質上的異同

作者:董可人
鏈接:http://www.hu.com/question/24976006/answer/29682806
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

演算法導論里的演算法本質上是對有精確解的問題,如何更有效率地求得這個解。這個效率可以是計算時間更短,也可以是計算過程所需要的空間更少。

一個簡單的例子是,給定一個亂序數組,如何快速的將其按從小到大的順序重新排列,或者找到其中的中位數。這些問題都有確定且唯一的答案,一般都會有一個笨方法(窮舉或遍歷),只要一步一步來就可以解,所謂演算法只是如何精簡步驟,更快更省事地找到這個解。這些演算法處理的數據也都是結構簡潔且干凈的類型,比如數組,二叉樹,圖之類的數據結構。數據規模對於這些演算法而言,影響的是計算所需的時間和空間,不會因為規模改變而影響演算法本身的邏輯以及計算的結果。

機器學習要解決的問題一般沒有精確解,也不能用窮舉或遍歷這種步驟明確的方法找到解,而且需要強調的是「學習」這個屬性,即希望演算法本身能夠根據給定的數據或計算環境的改變而動態的發現新的規律,甚至改變演算法程序的邏輯和行為。

舉例來說,可以是把一千份文檔歸類到不同的幾個類別里。最簡單的可以是給定幾個類別,比如新聞,小說,詩歌等,演算法來根據文章內容自動劃分到對應的類別里。這里可以看出這個問題即使讓人做,也有很多模糊不能確定的地方,比如一篇法制晚報上的犯罪紀實是應該劃到新聞,還是小說呢?或者說一篇長詩比如荷馬史詩是應該歸在小說還是詩歌呢?機器學習演算法想要解決的,就是根據從文章內容里找到的規律,來自動的給出一個劃分。而不同演算法可以給出不同的解,這些解都可以是「正確」的,所以一般還需要人為設計一個評判標准來決定孰優孰劣。

也可以不事先給定類別,而是讓演算法自己去發現文章中的規律,把相似度高的文章劃分到一起。這樣不同的演算法可能給出不同數量的類別劃分,可能是三個,四個,或者五個,也都可以是「正確」的劃分。甚至什麼是「相似度」,不同演算法也可以給出不同解釋,可以是名詞動詞形容詞的詞頻及比例,也可以是句子的語法結構等。

更進一步的,你可能還希望這個演算法能夠用來判斷一份新的文檔的類別。而輸入的新文檔越多,也會進一步擴大初始數據集的規模,規模變大以後,原來數據中不明顯的規律可能就變明顯了。比如說原來一千份文檔中只有一篇議論文,可能大多演算法都無法把它單獨劃出一個類別,但當你持續輸入一百份議論文後,數據中議論文的比例就變成了101/1100,差不多10%,這時候演算法就應該劃分出單獨的議論文類別。在這個意義上,數據本身也對演算法有很大的影響,這也是和演算法導論中的演算法的一個本質區別。

技術上說,演算法導論中的演算法關注點在數據結構和計算復雜度,屬於離散數學的一個分支,不涉及微積分等高等數學概念。機器學習的演算法本身是基於概率,統計和優化(optimization)等理論和技術,從這個角度上說給人感覺更「數學」一點。

在具體的實現細節上,機器學習的演算法會大量應用演算法導論中的技術來改進計算效率。但需要強調這僅僅是對底層實現來說,在演算法本身的邏輯上,二者沒有太多聯系。換句話說,演算法導論中的技術可以幫助你寫出更快的程序來運行機器學習演算法,但是這對機器學習要解決的問題本身是沒有什麼幫助的。熟練使用二叉樹散列表,准確估算一個圖演算法的復雜度,都沒有任何可能幫助你猜到在女朋友過生日時送什麼禮物最好(使用了機器學習演算法的淘寶君卻很可能知道!)。因此不要把它們看成是搭積木拼構件的關系。

最後,如果以上解釋仍然讓你費解,那麼還有一個更通俗的解釋:演算法導論是教你如何數數,而機器學習基本上相當於星座算命。一個很機械,一個靠忽悠,差不多就是這樣吧。
具體分析見鏈接:http://www.hu.com/question/24976006

⑤ 國內大學計算機專業為什麼不把演算法導論作為教材,而竟然還學MFC

學MFC怎麼了,多實用啊,演算法你要學自己去圖書館鑽研啊,你不能逼著別人一起學啊。不是所有人都走研究系的,開發一個游戲也不是需要那麼多高端的演算法的,又不是開發系統。說實話,我猜肯定是掛科率太高所以不作為基礎課,反正我們學校是作為選修課存在的。每個人有每個人的路,事實證明,數據結構不能舍棄,演算法不能舍棄,但是演算法導論這本書,未必需要學那麼多。

⑥ 請問看完看懂《演算法導論》這本書的話月薪可以達到三千五嗎

MIT 殿堂級教科書,在中國是bat的入門條件之一,在美國基本上讀懂了flag隨便進了。。。基本上入職13w刀年薪差不多 好好學吧小兄弟

⑦ 《演算法導論》與《演算法設計》選擇哪本更好

總的來說,兩本各有所長,建議可以都涉及涉及一下,然後根據自己重點學習哪個。另外我覺得想自學演算法,我認為吧,就是看學寫無數演算法,然後就可以信手拈來的自己去寫。同時如果自學演算法,我的建議是最好是多思考多動手(可以結合現實當中的各種程序演算法,想一下他們怎麼用演算法寫出來的,就比如飯堂里刷卡算錢等等。。如何用演算法做到的。。),這樣自學就很有意義了。

⑧ 求演算法導論下載地址,如果是百度雲就不要壓縮包了謝謝各位。

建議讀中文的。分析:1.《演算法導論》是一本可謂「面面俱到」的書,其中對演算法的證明佔了很大的比重,這在一般的演算法書中並不多見,也是它嚴謹性的體現。中英文在理解上的區別也就在於如何引出這個演算法、演算法為什麼正確上。但是這些證明雖然有重要意義,但是在實用價值上一般比不上演算法本身。我自己在學習演算法的時候都是先了解演算法思想,再了解演算法執行過程,再記住代碼,然後做題,最後再來回顧導引和證明,即先知其然,再知其所以然。不能光知其然,那樣無法掌握思想,思想才是精髓;而一上來就直奔證明,又缺乏學習效率。(也可能這只是我個人的特點)就演算法執行過程本身,中英文都一樣,而且由於偽代碼本身並無區別,所以先讀中文,以掌握演算法。2.當參加國際比賽的時候,題目都是用英文描述;當對演算法的研究再上一個層次的時候,國內的譯材已經不能夠滿足學習需要了。要想進步,達到高層次的領域,實現「出色」和「領先」,就一定要大量研讀外國文獻。這要求英語必須要好。綜上,我的建議是:讀中文版《演算法導論》,掌握演算法,再看解釋,理解它,才能更好地運用。學好英語,為達到更高的層次做准備。《演算法導論》內容非常豐富,應該讀好幾遍,到時候再看英文的也不遲。

⑨ 《演算法導論》這本書是用什麼語言寫的

用偽代碼(Pseudocode)寫的。偽代碼(Pseudocode)是一種演算法描述語言,本身不能被解釋或者編譯。使用偽代碼的目的是為了使被描述的演算法可以容易地以任何一種編程語言(Pascal,C,Java,etc)實現。

⑩ 關於演算法導論

概念:

紅黑樹是一種自平衡二叉查找樹,是在計算機科學中用到的一種數據結構,典型的用途是實現關聯數組。它是在1972年由Rudolf Bayer發明的,他稱之為"對稱二叉B樹",它現代的名字是在 Leo J. Guibas 和 Robert Sedgewick 於1978年寫的一篇論文中獲得的。它是復雜的,但它的操作有著良好的最壞情況運行時間,並且在實踐中是高效的: 它可以在O(log n)時間內做查找,插入和刪除,這里的n 是樹中元素的數目。

紅黑樹是一種很有意思的平衡檢索樹。它的統計性能要好於平衡二叉樹(有些書籍根據作者姓名,Adelson-Velskii和Landis,將其稱為AVL-樹),因此,紅黑樹在很多地方都有應用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)應用了紅黑樹的變體(SGI STL中的紅黑樹有一些變化,這些修改提供了更好的性能,以及對set操作的支持)。

背景和術語:
紅黑樹是一種特定類型的二叉樹,它是在計算機科學中用來組織數據比如數字的塊的一種結構。所有數據塊都存儲在節點中。這些節點中的某一個節點總是擔當啟始位置的功能,它不是任何節點的兒子;我們稱之為根節點或根。它有最多兩個"兒子",都是它連接到的其他節點。所有這些兒子都可以有自己的兒子,以此類推。這樣根節點就有了把它連接到在樹中任何其他節點的路徑。

如果一個節點沒有兒子,我們稱之為葉子節點,因為在直覺上它是在樹的邊緣上。子樹是從特定節點可以延伸到的樹的某一部分,其自身被當作一個樹。在紅黑樹中,葉子被假定為 null 或空。

由於紅黑樹也是二叉查找樹,它們當中每一個節點都的比較值都必須大於或等於在它的左子樹中的所有節點,並且小於或等於在它的右子樹中的所有節點。這確保紅黑樹運作時能夠快速的在樹中查找給定的值。
用途和好處:
紅黑樹和AVL樹一樣都對插入時間、刪除時間和查找時間提供了最好可能的最壞情況擔保。這不只是使它們在時間敏感的應用如即時應用(real time application)中有價值,而且使它們有在提供最壞情況擔保的其他數據結構中作為建造板塊的價值;例如,在計算幾何中使用的很多數據結構都可以基於紅黑樹。

紅黑樹在函數式編程中也特別有用,在這里它們是最常用的持久數據結構之一,它們用來構造關聯數組和集合,在突變之後它們能保持為以前的版本。除了O(log n)的時間之外,紅黑樹的持久版本對每次插入或刪除需要O(log n)的空間。

紅黑樹是 2-3-4樹的一種等同。換句話說,對於每個 2-3-4 樹,都存在至少一個數據元素是同樣次序的紅黑樹。在 2-3-4 樹上的插入和刪除操作也等同於在紅黑樹中顏色翻轉和旋轉。這使得 2-3-4 樹成為理解紅黑樹背後的邏輯的重要工具,這也是很多介紹演算法的教科書在紅黑樹之前介紹 2-3-4 樹的原因,盡管 2-3-4 樹在實踐中不經常使用。
屬性:
紅黑樹是每個節點都有顏色特性的二叉查找樹,顏色的值是紅色或黑色之一。除了二叉查找樹帶有的一般要求,我們對任何有效的紅黑樹加以如下增補要求:

1.節點是紅色或黑色。

2.根是黑色。

3.每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)

4.從每個葉子到根的所有路徑都包含相同數目的黑色節點。

這些約束強制了紅黑樹的關鍵屬性: 從根到葉子的最長的可能路徑不大於最短的可能路徑的兩倍長。結果是這個樹大致上是平衡的。因為操作比如插入、刪除和查找某個值都要求與樹的高度成比例的最壞情況時間,這個在高度上的理論上限允許紅黑樹在最壞情況下都是高效的,而不同於普通的二叉查找樹。

在很多樹數據結構的表示中,一個節點有可能只有一個兒子,而葉子節點包含數據。用這種範例表示紅黑樹是可能的,但是這會改變一些屬性並使演算法復雜。為此,本文中我們使用 "null 葉子" 或"空(null)葉子",如上圖所示,它不包含數據而只充當樹在此結束的指示。這些節點在繪圖中經常被省略,導致了這些樹好像同上述原則相矛盾,而實際上不是這樣。與此有關的結論是所有節點都有兩個兒子,盡管其中的一個或兩個可能是空葉子。

操作:
在紅黑樹上只讀操作不需要對用於二叉查找樹的操作做出修改,因為它也二叉查找樹。但是,在插入和刪除之後,紅黑屬性可能變得違規。恢復紅黑屬性需要少量(O(log n))的顏色變更(這在實踐中是非常快速的)並且不超過三次樹旋轉(對於插入是兩次)。這允許插入和刪除保持為 O(log n) 次,但是它導致了非常復雜的操作。

熱點內容
短暫的訪問 發布:2024-09-23 01:29:08 瀏覽:827
安卓手機怎麼設置4位數 發布:2024-09-23 01:24:58 瀏覽:547
5g和演算法 發布:2024-09-23 01:20:40 瀏覽:506
pandas開發程序編譯 發布:2024-09-23 01:13:58 瀏覽:464
android應用被系統回收 發布:2024-09-23 01:10:36 瀏覽:446
c語言餐廳管理系統 發布:2024-09-23 01:01:35 瀏覽:93
linux系統新加網卡怎麼配置 發布:2024-09-23 01:01:34 瀏覽:893
java自我介紹一分鍾 發布:2024-09-23 00:51:34 瀏覽:672
告訴我解除密碼是多少 發布:2024-09-22 23:58:11 瀏覽:755
預演算法實施條例新 發布:2024-09-22 23:56:36 瀏覽:540