日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Facebook工程师告诉你,如何正确的阅读《算法导论》(CLRS)?

發布時間:2024/3/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Facebook工程师告诉你,如何正确的阅读《算法导论》(CLRS)? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一章

挺有趣的,不過你可以跳過。

第二章

2.1 插入排序——老實說,你應該知道所有主要的排序算法,而不僅僅是插入排序。這只是基本的知識,你永遠不知道什么時候有用。

2.2 算法分析——你可以跳過簡短的介紹,但其他的要做一個了解。

2.3 算法設計——包含歸并排序及其分析,以及分治法的概述,非常重要,值得一讀。

第三章

All of it。必須學會大O表示法和時間復雜度分析。

第四章

4.1 最大子數組問題 - 可能有點值得你花時間。對于這個問題,有比“分而治之”更好的解決方案,但這是很好的實踐,邏輯思考可以拓展你的思維方式。

4.2 Strassen的算法——我真的很喜歡這個算法,當我第一次看到它的時候,我被它的酷炫驚呆了,但是你可以在面試的時候跳過它。它不會出現。

4.3 代換法——你不會在面試中使用這種方法,但是你應該了解一下,因為它是一個基本的工具,用來找出遞歸算法的時間復雜度。

4.4 遞歸樹法-與4.3相同

4.5 掌握方法-基本知識。你應該知道并練習它,能夠在3秒內使用它。如果分析符合該表單的遞歸算法,您將在面試中使用這種方法。

4.6 主定理的證明——你可以跳過這個,不過至少去讀一遍,這樣你就能理解你在用主方法做什么。

第五章

老實說,我從來沒有讀過這一章,但我知道你需要在面試中對概率有一個基本的把握,因為很有可能他們會出現。也就是說,只要你知道與概率相關的面試問題的基本概率概念和實踐(在我推薦的準備面試的書《編程面試的要素》中有解決方案解釋方面的問題),你可能可以跳過這一章。粗略地看一下,它更像是數學而不是算法。

第六章

6.1、6.2、6.3、6.4、6.5 -堆和堆排序。

第七章

7.1、7.2、7.3 -快速排序及其隨機化版本。“需要了解”之類的概念。我還推薦7.4(我曾在一次面試中被要求對隨機算法進行高級分析),不過我想,你在面試中必須處理7.4這樣的問題的概率相當低。

第八章

排序的下界,基本知識。可能會在谷歌的面試中被問到(雖然不太可能,但我知道以前發生過這樣的情況)。

8.2 -計數排序-需要知道的細節。它以隱含的形式出現。

8.3 -基數排序-這是一個簡單的算法。

8.4 -桶排序-可以跳過。

第九章

9.1 -值得一讀。

9.2 -預期線性時間內的選擇-非常重要,因為它不像快速排序那樣是常識,但它在面試中經常出現。在一次面試中,我不得不對整個問題進行編碼。

9.3 -在最壞情況下線性時間的選擇-可以跳過。只要知道在最壞情況下線性時間是可能的,因為這可能會有所幫助。

第十章

10.1 -堆棧和隊列——基本知識,絕對非常重要。

10.2 -鏈表-與10.1相同

10.3 -實現指針和對象-如果你使用c++或Java,跳過這個。否則我就不確定了。

10.4 -有根樹的表示一值得快速閱讀。

第十一章

對于哈希,我想說的是實現并不像鏈表那樣重要,但是您應該對它有一定的了解,并且最重要的是了解搜索/插入/刪除等的(預期和最壞情況)時間復雜性。還要知道,在實際中,它們是非常重要的數據結構,而且在實際中,預期的時間復雜度才是真正重要的。

11.1 -直接尋址-理解這個概念。

11.2 -哈希表-重要。

11.3 -哈希函數-有一個關于它們的想法是值得的,但我不會在這里太深入。只要知道幾個好哈希函數和壞哈希函數的例子(以及它們為什么好/壞)。

11.4 -開放尋址法-值得了解的思想,但不太可能出現在面試中。

11.5 -完全哈希-跳過。

第十二章

12.1 -什么是二叉搜索樹?必須知道。

12.2 -查詢BST -必須知道。

12.3 -插入/刪除-與12.2相同

12.4 -隨機構建的BST -只知道定理12.4(隨機BST的期望高度為O(lgn))

第十三章

這個很簡單。了解紅黑樹是什么,以及它的最壞情況高度/插入/刪除/查找是什么。閱讀13.1和13.2,跳過其余部分。除非面試官“做錯了”,或者面試官想看看你是否可以重新推導這些案例,否則你永遠不會被要求插入/刪除rb樹(我懷疑這種情況無論如何也不會發生)。還要知道,rb樹非常節省空間,一些c++ STL容器通常構建為rb樹(例如map/set)。

第14章

可能值得略讀14.2,只為了知道您可以增強數據結構,以及為什么它可能有用。否則,做一兩個簡單的關于擴充數據結構的問題,就可以在這里做。我會跳過14.1和14.3。

第15章

DP(dynamic programming動態規劃) !必須學會!

15.1 - 鋼條切割。標準DP問題,必須知道。

15.2 -矩陣-鏈乘法-和15.1一樣,雖然我不是特別喜歡這部分的寫法(我很少這樣說CLRS)。

15.3 - DP的要素-值得一讀,以便你正確地理解DP,但我想說的是,它比知道DP是什么(通過章節介紹)和實踐它(通過這本書和面試準備書中的問題)更重要。

15.4 - 最長公共子序列 -與15.1相同

15.5 -最優二叉搜索樹-我不能證明這部分的重要性,雖然我沒有讀過這一部分,但是我做的很好。

第十六章

您一定要知道什么是貪婪算法,所以請閱讀本章的介紹。

16.1 -活動選擇問題-還沒有詳細閱讀這篇文章,但我想說,檢查一下,如果不深入的話。

貪婪策略的元素-與16.1相同

16.3 -霍夫曼編碼-我想說的是閱讀問題和算法,但這就足夠了。我見過一些面試問題,答案是霍夫曼編碼(但問題會以“偽裝”的形式出現,所以不會很明顯)。

16.4 -擬陣和貪婪的方法-我從來沒有讀過這部分,但我在面試準備過程中做了很多貪婪的問題,這些東西從來沒有出現過,所以我想說這部分與面試無關。

任務調度問題作為一個矩陣-與16.4相同。

第十七章

你們應該知道什么是均攤分析,但是我從來沒有在書上讀過,我覺得這是一個非常簡單的概念,你們google一下,然后看幾個例子,或者通過17.1節來理解它。所以:

17.1 -綜合分析-閱讀這篇文章,它解釋了重要的東西。

17.2、17.3、17.4 -跳過。

第十八章

你應該知道什么是B樹(和B+樹),我聽說過一些例子,候選人被問到一般意義上的B樹(關于他們是什么以及為什么他們很棒的高層次問題)。但除此之外,我將跳過這一章。

第十九章

斐波那契堆-nope。

第20章

van Emde Boas樹-直接跳過,看都不要看一眼。

21章

不相交集合的數據結構。

更新:我最初建議跳過這一節,但經過重新考慮,我發現它實際上比我最初認為的更重要。因此,我建議閱讀21.1和21.2節,跳過其余部分。

Union-find有點重要,我已經看到至少有一個使用它的問題,不過這個問題也可以使用DFS和連接組件來解決。盡管如此,我也認為這并不是嚴格必要的,因為出于面試的目的,在不了解本章內容的情況下,一個人可能很容易就能想出一個足夠類似的結構來解決一個需要union-find的問題。但是,我認為值得一讀,這樣,如果出現了一個問題,其預期解決方案是union-find數據結構,那么您就不會花時間在面試中提出它,而是提前了解它,這可能是一個很好的優勢。盡管如此,我可能會把它列為不那么重要的其他材料在這個列表中,甚至比其他材料,甚至沒有在CLRS(如嘗試,例如)。

好了,現在來看圖形算法。首先看一下介紹。現在,下面有很多需要學習的知識點,注意了!敲黑板!。

22章

22.1 -圖形表示-需要學習。

22.2 - BFS -需要學習。然后,解決這個問題:ACM-ICPC Live Archive—Kermit the Frog。整個“使用BFS的狀態空間搜索”是一個重要的概念,可以用來解決幾個面試問題。

22.3 - DFS -需要學習。

22.4 -拓撲排序-需要學習。

22.5 -強連接組件-比上述4個組件出現的可能性小得多,但仍然是可能的,所以:需要學習。

23章

最小生成樹——可能是最不重要的圖形算法,除了max flow(當然,我的意思是以面試為目的)。我仍然認為你應該閱讀它,因為這是一個眾所周知的問題,但絕對要優先考慮其他事情。

23.1 - MST的增長-需要學習。

23.2 - Prim和Kruskal的算法-需要學習。

24章

最短路徑算法很重要,盡管可能沒有BFS/DFS重要。

讀了介紹。總之,你應該通讀所有的介紹,但是這篇很重要(而且很長),所以值得特別注意。

24.1 Bellman-Ford -了解算法及其正確性證明。

24.2 DAGs中的最短路徑——絕對值得知道,可能會出現,甚至比Bellman-Ford還要多。

24.3 Dijkstra算法-需要學習。當然可以。我已經看到這個出現了很多次(有一些細微的變化),我甚至看到了一個*出現。 ( *代表研究生課程,需要使用更多的數學知識。)

24.4差分約束和最短路徑-跳過。

第25章

也請閱讀簡介。

25.1 -矩陣乘法-我想跳過。這可能會出現(雖然可能性很小),但在我看來,這種可能性非常低,可能不值得這么做。不過,如果你有多余的時間,不妨讀一讀。

25.2 - Floyd-Warshall -是的,值得了解該算法及其時間復雜度和工作時間(這適用于所有加權圖,除了具有負權循環的圖)。它的代碼大約有5行,所以沒有理由不知道它。不過,這種分析可能有點言過其實。

25.3 - Johnson算法- Skip。

26章

最大流量——我從來沒有在面試中聽說過這個問題,我不知道為什么會這樣,所以跳過吧。

27章 ~30章

這些東西大部分永遠不會出現,所以對我來說,告訴你該讀什么比不讀什么更容易,所以這里有一些書中選定的主題。

31章

您應該從本章學到的大部分內容都可以從編程面試的實踐中學習到(您的時間最好花在這方面),所以我建議跳過所有內容,除了第31.2節中的歐幾里德GCD算法。

32章

32.1 -樸素字符串匹配算法-快速閱讀。

我想說,你應該知道這一點,滾動哈希的概念是非常重要的,可以在許多字符串或搜索相關的面試問題有用。

附錄

一個合計

了解時間復雜度分析的重要總結。

計數和概率

如果你不知道材料,閱讀C.4,伯努利試驗可能會出現在問題中(不是明確的,但你可能會使用它們,特別是在涉及概率/拋硬幣的問題的時間分析中)。

一旦你涵蓋了所有這些,我想說的是,從編程面試中汲取一些元素,為面試中的問題做大量準備。我在這里概述了我自己的面試準備過程——這可能會有所幫助。

注意:請記住,僅憑CLRS提供的上述知識是不夠的。有許多話題不在CLRS中,但在面試中可能是相關的,其中許多是實際的(如特定于語言的問題),還有許多是理論性的,但在CLRS中沒有明確涉及。例如,前綴樹和tournament樹是重要的數據結構(前者比后者更重要),它們在CLRS中沒有專門的部分,而且已知還會詢問跳表,等等。此外,上面包含的部分是詳盡的,因為它們都是極有可能來自CLRS的主題。其中的一些你可以跳過,在面試中沒有他們的很好(例如,您可能提出的算法分離集章自己作為解決方案如果需要,和mst可能不會出現),但我有一個詳盡的清單,因為在我看來最好稍微比under-prepare準備過度,和在任何情況下,我認為所有的above-included話題可能會出現在一種或另一種形式,盡管有些可能性比另一些要小得多。

  • 原文地址

總結

以上是生活随笔為你收集整理的Facebook工程师告诉你,如何正确的阅读《算法导论》(CLRS)?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。