資料結構和演算法 (DSA) 簡介
資料結構是關於如何以不同結構儲存資料。
演算法是關於如何解決不同問題,通常是透過搜尋和操作資料結構。
關於資料結構和演算法 (DSA) 的理論幫助我們有效地利用大量資料來解決問題。
什麼是資料結構?
資料結構是儲存資料的一種方式。
我們根據擁有什麼資料以及想要用它做什麼,以不同的方式組織資料。

首先,讓我們考慮一個不考慮計算機的例子,只是為了理解這個概念。
如果我們想儲存關於我們親屬的資料,我們會使用家譜作為資料結構。我們選擇家譜作為資料結構,因為我們擁有關於我們親屬的資訊以及他們如何相互關聯,並且我們想要一個概覽,以便我們可以輕鬆找到某個家庭成員,比如好幾代前的祖先。
在你面前清晰地展示了這樣一個家譜資料結構,很容易就能看出,例如,我母親的母親是誰——就是“艾瑪”,對嗎?但如果沒有這個資料結構提供的從子女到父母的連結,就很難確定這些個體是如何關聯的。
資料結構使我們能夠有效地管理大量資料,用於大型資料庫和網際網路索引服務等用途。
資料結構是建立快速強大演算法的必備要素。它們有助於管理和組織資料,降低複雜性,並提高效率。
在計算機科學中,有兩種不同的資料結構。
基本資料結構是程式語言提供的用於表示單個值的基本資料結構,例如整數、浮點數、字元和布林值。
抽象資料結構是使用基本資料型別構建的更高階的資料結構,並提供更復雜和專業的運算。一些常見的抽象資料結構示例包括陣列、連結串列、棧、佇列、樹和圖。
什麼是演算法?
演算法是用於解決給定問題或實現特定目標的循序漸進的指令集。

寫在紙上的烹飪食譜就是演算法的一個例子,目標是製作某種晚餐。製作特定晚餐所需的步驟被精確地描述了。
當我們談論計算機科學中的演算法時,這些循序漸進的指令是用程式語言編寫的,並且演算法使用的是資料結構,而不是食物配料。
演算法是計算機程式設計的基礎,因為它們提供了執行任務的循序漸進的指令。一個高效的演算法可以幫助我們找到我們正在尋找的解決方案,並將一個慢速程式轉換成一個更快速的程式。
透過學習演算法,開發人員可以編寫出更好的程式。
演算法示例
- 查詢 GPS 導航系統中速度最快的路線
- 導航飛機或汽車(巡航控制)
- 查詢使用者搜尋的內容(搜尋引擎)
- 排序,例如按評分對電影進行排序
本教程中我們將要介紹的演算法是為了解決特定問題而設計的,並且經常用於處理特定的資料結構。例如,“氣泡排序”演算法是為了對值進行排序而設計的,並且用於處理陣列。
資料結構與演算法結合
資料結構和演算法 (DSA) 是相輔相成的。如果不能有效地使用演算法來搜尋或操作資料結構,那麼資料結構就沒有多大價值;而本教程中的演算法如果沒有資料結構來操作,價值也不大。
DSA 是關於尋找高效的方式來儲存和檢索資料,執行資料操作,並解決特定問題。
透過理解 DSA,你可以
- 決定哪種資料結構或演算法最適合給定情況。
- 編寫執行更快或記憶體佔用更少的程式。
- 理解如何處理複雜問題並以系統的方式解決它們。
資料結構和演算法在哪裡需要?
資料結構和演算法 (DSA) 幾乎被用於所有軟體系統,從作業系統到 Web 應用程式。
- 用於管理大量資料,例如在社交網路或搜尋引擎中。
- 用於排程任務,以決定計算機應該首先執行哪個任務。
- 用於規劃路線,例如在 GPS 系統中查詢從 A 到 B 的最短路徑。
- 用於最佳化流程,例如安排任務以便它們能夠儘快完成。
- 用於解決複雜問題:從找到打包卡車的最佳方法到讓計算機從資料中“學習”。
DSA 在軟體世界的幾乎所有領域都至關重要。
- 作業系統
- 資料庫系統
- Web 應用程式
- 機器學習
- 影片遊戲
- 加密系統
- 資料分析
- 搜尋引擎
理論和術語
在本教程的後續內容中,我們將需要新的理論概念和術語(新詞),以便更好地理解我們將要處理的資料結構和演算法。
這些新詞和概念將在需要時得到適當的介紹和解釋,但這裡有一些關鍵術語的列表,只是為了概覽即將到來的內容。
術語 | 描述 |
---|---|
演算法 | 一組循序漸進的指令,用於解決特定問題。 |
資料結構 | 一種組織資料以便高效使用的方法。常見的資料結構包括陣列、連結串列和二叉樹。 |
時間複雜度 | 衡量演算法執行所需時間的度量,取決於演算法正在處理的資料量。 |
空間複雜度 | 衡量演算法所使用的記憶體量的度量,取決於演算法正在處理的資料量。 |
大 O 符號 | 一種數學表示法,用於描述當自變數趨近於特定值或無窮大時函式的極限行為。在本教程中用於描述演算法的時間複雜度。 |
遞迴 | 一種函式呼叫自身的程式設計技術。 |
分而治之 | 一種透過將複雜問題分解為更小、更易於管理子問題,然後解決這些子問題併合並解決方案來解決複雜問題的方法。在使用此方法來編寫演算法時,通常會使用遞迴。 |
蠻力 | 一種簡單直接的演算法工作方式,透過嘗試所有可能的解決方案,然後選擇最佳解決方案。 |
從哪裡開始?
在本教程中,你將首先學習一種資料結構及其匹配的演算法,然後再學習下一個資料結構。
在本教程的後面,概念會變得更復雜,因此最好從一開始就按步驟進行教程來學習 DSA。
正如在前一頁提到的,在學習本教程之前,你應該至少熟悉一種最常見的程式語言,例如 JavaScript、C 或 Python。
在下一頁,我們將介紹兩種不同的演算法,它們使用僅有的兩個整數變數來打印出前 100 個斐波那契數。一種演算法使用迴圈,另一種演算法使用一種稱為遞迴的方法。
點選“下一頁”按鈕繼續。