新手村導讀 - 10: 基礎演算法

更新於 2024/09/15閱讀時間約 2 分鐘

前言

在開始寫文章、整理之前留下的紀錄時,想起剛出社會時也有去面試演算法工程師的職位,然後被電到慘兮兮 XD,把當時面試有碰到的一些題目分享給大家,讓大家可以有點心理準備(?)

基礎題

解釋複雜度

可以分成時間複雜度與空間複雜度去解釋,在此附上簡易版本:

  • O(1):陣列讀取
  • O(n):線性搜尋
  • O(log n):二分搜尋
  • O(nlogn):合併排序
  • O(n²):選擇排序
  • O(2^n):費波那契數列

介紹五大演算法

我想這個內容在大家求學時期應該都有學過了,但當下被問還是突然講不出來。基本上除了窮舉這個不算方法的方法以外,還有貪婪演算法、動態規劃、分治法、回溯法以及分支法。

介紹排序

有蠻多公司都會考這題,會需要你介紹你所記得的排序方法以及他們的複雜度分析。由於種類蠻多的,因此將比較詳細的介紹放在參考資料第 4 點。

介紹 DP

這是一種將問題複雜度下降的方式,將原本的問題切分成小問題去解決,乍聽之下很容易但其實蠻看經驗和技術的,在 Leetcode 中也蠻多題目會需要用 DP 去解決,一樣將相關資料放在參考資料第 5、6 點。

應用題

由於這方面的文章很多 & 內容很長,因此我就不特別列出解法,不然篇幅會被拉的很長,我僅提供我碰過的題目給大家參考。

  • 實作費氏數列與複雜度分析
  • 如何解決八皇后問題
  • 利用蒙地卡羅方法求圓周率

結語

「演算法是要由內而外去思考,而非直接從題目表面去下手。」這是我之前準備面試時在某個部落格上看到的一句話,在此送給有想要當演算法工程師的各位,加油!

參考資料:

  1. https://jason-chen-1992.weebly.com/home/time-space-complexity
  2. 五大常用演算法總結 - 程式人生 (796t.com)
  3. 【Day35】[演算法]-常見的演算法策略Algorithmic Patterns - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)
  4. 【演算法】排序演算法 Sorting Algorithm - Jason Chen's Blog (weebly.com)
  5. 從LeetCode學演算法 - 9 Dynamic Programming (2) | by Chih-Yu Lin | Medium
  6. dynamic_programming_2_inclass.pdf (ntu.edu.tw)
avatar-img
2會員
23內容數
test
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
林柏宇的沙龍 的其他內容
本文介紹正規表達式的基本概念和常用符號,幫助讀者瞭解如何使用正規表達式來有效搜尋資料和程式碼。在數位時代,正規表達式成為了數據處理和程式開發中不可或缺的工具。透過示範和範例,讀者可以快速掌握正規表達式的基本語法,並應用於實際場景。
本文將介紹 RESTful API 的基本概念、特性及其在現代 Web 開發中的重要性。探討 REST 的設計理念,包括無狀態性、資源格式和 API 接口的最佳實踐,幫助工程師瞭解如何進行有效的 API 設計。
這篇文章介紹了git常用的幾個指令,包括分支合併、重製修改、修改紀錄等。另外也提到了一個好用的小工具tig。這些指令的使用方法和技巧都有詳細介紹,可以幫助讀者更好地使用git。
這篇文章介紹了基礎的 Git 指令,對於懂得使用 Git 的開發人員來說,這些指令都是非常重要且實用的。文章詳細說明瞭每個指令的功能以及如何運用,對於想要更加熟悉 Git 指令的開發人員來說,這是一篇非常實用的文章。
這篇文章將介紹工程師使用版控和git的相關知識和技能,包括版本控制的意義和git的基本指令,以及開發流程和webhook的概念。
網頁回應碼是指當網頁伺服器處理完一個請求後所回傳的狀態碼。這篇文章介紹了網頁回應碼的分類,包括1XX、2XX、3XX、4XX和5XX狀態碼,並解釋了各種狀態碼的意義和常見原因。
本文介紹正規表達式的基本概念和常用符號,幫助讀者瞭解如何使用正規表達式來有效搜尋資料和程式碼。在數位時代,正規表達式成為了數據處理和程式開發中不可或缺的工具。透過示範和範例,讀者可以快速掌握正規表達式的基本語法,並應用於實際場景。
本文將介紹 RESTful API 的基本概念、特性及其在現代 Web 開發中的重要性。探討 REST 的設計理念,包括無狀態性、資源格式和 API 接口的最佳實踐,幫助工程師瞭解如何進行有效的 API 設計。
這篇文章介紹了git常用的幾個指令,包括分支合併、重製修改、修改紀錄等。另外也提到了一個好用的小工具tig。這些指令的使用方法和技巧都有詳細介紹,可以幫助讀者更好地使用git。
這篇文章介紹了基礎的 Git 指令,對於懂得使用 Git 的開發人員來說,這些指令都是非常重要且實用的。文章詳細說明瞭每個指令的功能以及如何運用,對於想要更加熟悉 Git 指令的開發人員來說,這是一篇非常實用的文章。
這篇文章將介紹工程師使用版控和git的相關知識和技能,包括版本控制的意義和git的基本指令,以及開發流程和webhook的概念。
網頁回應碼是指當網頁伺服器處理完一個請求後所回傳的狀態碼。這篇文章介紹了網頁回應碼的分類,包括1XX、2XX、3XX、4XX和5XX狀態碼,並解釋了各種狀態碼的意義和常見原因。
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
這篇內容,將會講解什麼是運算子,以及與運算子相關的知識。包括運算子的簡介、賦值運算子、算術運算子、遞增/遞減、比較運算子、邏輯運算子。
Thumbnail
本文提供了一個關於模擬法演算法的問題,介紹了操作指令的格式及其解析。透過程式碼模擬每條指令,找出回到根目錄所需的操作次數。本文詳細說明瞭模擬法的複雜度分析,能夠幫助讀者更好地理解這個問題。
前言 在閱讀《強化式學習:打造最強 AlphaZero 通用演算法》時,對一些看似基本,但是重要且會影響到之後實作的項目概念有點疑惑,覺得應該查清楚,所以搞懂後記錄下來,寫下這篇文章(應該說是筆記?)。 正文 下面這段程式碼: model = Sequential() model.add
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
這篇內容,將會講解什麼是運算子,以及與運算子相關的知識。包括運算子的簡介、賦值運算子、算術運算子、遞增/遞減、比較運算子、邏輯運算子。
Thumbnail
本文提供了一個關於模擬法演算法的問題,介紹了操作指令的格式及其解析。透過程式碼模擬每條指令,找出回到根目錄所需的操作次數。本文詳細說明瞭模擬法的複雜度分析,能夠幫助讀者更好地理解這個問題。
前言 在閱讀《強化式學習:打造最強 AlphaZero 通用演算法》時,對一些看似基本,但是重要且會影響到之後實作的項目概念有點疑惑,覺得應該查清楚,所以搞懂後記錄下來,寫下這篇文章(應該說是筆記?)。 正文 下面這段程式碼: model = Sequential() model.add
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。