回覆列表
  • 1 # 機器之心Pro

    理解演算法是一項很有價值的技能,就像在知識的其他領域,技能表徵的是一種思維方式,而不僅僅是記憶。你想要學習一個演算法,並立刻理解其內在原理。下面的基礎性演算法是作為軟體演算法工程師所必需具備的:

    二進位制搜尋。二進位制搜尋是一個非常非常重要的概念。從凸最佳化到資料庫,它的身影幾乎無處不在。如果你需要在大量的東西中找到一個特定的價值,並弄清楚你需要去的方向是什麼,那麼使用二進位制搜尋來實現一個 MASSIVE 加速。

    矩陣運算。記住矩陣運算遠比你想象的要快。優秀的人提出了令人難以置信的非直觀演算法,使得矩陣乘以O(n ^ 2.something)而不是O(n ^ 3),就像你所期望的那樣。在實踐中,這些演算法不一定被使用,但BLAS和MPI庫確實提供了令人難以置信的快速矩陣乘法。每當你可以在矩陣運算中表達一堆計算時,你就贏了。

    線性迴歸。簡單、優美、實用。

    快取。僅僅是使用快取,這算是演算法嗎?但這是你所有問題的原因和解決方案。

    併發工作佇列(concurrent work queue)的想法。

    知道遇到問題何時丟出雜湊表。

    貪婪演算法。如果你的問題可以用一個做決策的演算法解決,並且最終這個演算法依然是最佳的,那麼你就無需進一步觀察了。Prim、用於最小生成樹(Minimal Spanning Tree/MST)的 Kruscal 和小數揹包問題(Fractional Knapsack problem)就是例項。

    圖與搜尋演算法。除了MST、寬度優先搜尋(Breadth First Search/BFS)、深度優先搜尋(Depth First Search/DFS)Dijkstra 和可能的 A* 之外。如果你覺得你想要在這方面進一步深入下去,那麼看看(用於密集圖的)Bellman-Ford、Branch and Bound、迭代深化、Minimax 和 AB 搜尋吧。

    模擬退火。這是一個非常容易,非常強大的隨機最佳化演算法。它解決了NP-hard問題。

  • 2 # NoSuchBean

    個人淺見,演算法類大概掌握:查詢,排序,遞迴,複雜度即可,高階演算法不具有普遍性,一是工作中遇到的普遍性,二是個人天賦。我更推薦資料結構的掌握,陣列,字串,樹,佇列,連結串列,堆,棧,圖,雜湊。演算法精研的很高深,直接做演算法工程師好了

  • 中秋節和大豐收的關聯?
  • 胃癌與遺傳基因有關嗎?