選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

資料結構和演算法 (DSA) 簡介

資料結構是關於如何以不同結構儲存資料。

演算法是關於如何解決不同問題,通常是透過搜尋和操作資料結構。

關於資料結構和演算法 (DSA) 的理論幫助我們有效地利用大量資料來解決問題。

什麼是資料結構?

資料結構是儲存資料的一種方式。

我們根據擁有什麼資料以及想要用它做什麼,以不同的方式組織資料。

Family Tree
家譜

首先,讓我們考慮一個不考慮計算機的例子,只是為了理解這個概念。

如果我們想儲存關於我們親屬的資料,我們會使用家譜作為資料結構。我們選擇家譜作為資料結構,因為我們擁有關於我們親屬的資訊以及他們如何相互關聯,並且我們想要一個概覽,以便我們可以輕鬆找到某個家庭成員,比如好幾代前的祖先。

在你面前清晰地展示了這樣一個家譜資料結構,很容易就能看出,例如,我母親的母親是誰——就是“艾瑪”,對嗎?但如果沒有這個資料結構提供的從子女到父母的連結,就很難確定這些個體是如何關聯的。

資料結構使我們能夠有效地管理大量資料,用於大型資料庫和網際網路索引服務等用途。

資料結構是建立快速強大演算法的必備要素。它們有助於管理和組織資料,降低複雜性,並提高效率。

在計算機科學中,有兩種不同的資料結構。

基本資料結構是程式語言提供的用於表示單個值的基本資料結構,例如整數、浮點數、字元和布林值。

抽象資料結構是使用基本資料型別構建的更高階的資料結構,並提供更復雜和專業的運算。一些常見的抽象資料結構示例包括陣列、連結串列、棧、佇列、樹和圖。


什麼是演算法?

演算法是用於解決給定問題或實現特定目標的循序漸進的指令集。

Pommes Frites Recipe
薯條食譜

寫在紙上的烹飪食譜就是演算法的一個例子,目標是製作某種晚餐。製作特定晚餐所需的步驟被精確地描述了。

當我們談論計算機科學中的演算法時,這些循序漸進的指令是用程式語言編寫的,並且演算法使用的是資料結構,而不是食物配料。

演算法是計算機程式設計的基礎,因為它們提供了執行任務的循序漸進的指令。一個高效的演算法可以幫助我們找到我們正在尋找的解決方案,並將一個慢速程式轉換成一個更快速的程式。

透過學習演算法,開發人員可以編寫出更好的程式。

演算法示例

  • 查詢 GPS 導航系統中速度最快的路線
  • 導航飛機或汽車(巡航控制)
  • 查詢使用者搜尋的內容(搜尋引擎)
  • 排序,例如按評分對電影進行排序

本教程中我們將要介紹的演算法是為了解決特定問題而設計的,並且經常用於處理特定的資料結構。例如,“氣泡排序”演算法是為了對值進行排序而設計的,並且用於處理陣列。


資料結構與演算法結合

資料結構和演算法 (DSA) 是相輔相成的。如果不能有效地使用演算法來搜尋或操作資料結構,那麼資料結構就沒有多大價值;而本教程中的演算法如果沒有資料結構來操作,價值也不大。

DSA 是關於尋找高效的方式來儲存和檢索資料,執行資料操作,並解決特定問題。

透過理解 DSA,你可以

  • 決定哪種資料結構或演算法最適合給定情況。
  • 編寫執行更快或記憶體佔用更少的程式。
  • 理解如何處理複雜問題並以系統的方式解決它們。

資料結構和演算法在哪裡需要?

資料結構和演算法 (DSA) 幾乎被用於所有軟體系統,從作業系統到 Web 應用程式。

  • 用於管理大量資料,例如在社交網路或搜尋引擎中。
  • 用於排程任務,以決定計算機應該首先執行哪個任務。
  • 用於規劃路線,例如在 GPS 系統中查詢從 A 到 B 的最短路徑。
  • 用於最佳化流程,例如安排任務以便它們能夠儘快完成。
  • 用於解決複雜問題:從找到打包卡車的最佳方法到讓計算機從資料中“學習”。

DSA 在軟體世界的幾乎所有領域都至關重要。

  • 作業系統
  • 資料庫系統
  • Web 應用程式
  • 機器學習
  • 影片遊戲
  • 加密系統
  • 資料分析
  • 搜尋引擎

理論和術語

在本教程的後續內容中,我們將需要新的理論概念和術語(新詞),以便更好地理解我們將要處理的資料結構和演算法。

這些新詞和概念將在需要時得到適當的介紹和解釋,但這裡有一些關鍵術語的列表,只是為了概覽即將到來的內容。

術語 描述
演算法 一組循序漸進的指令,用於解決特定問題。
資料結構 一種組織資料以便高效使用的方法。常見的資料結構包括陣列、連結串列和二叉樹。
時間複雜度 衡量演算法執行所需時間的度量,取決於演算法正在處理的資料量。
空間複雜度 衡量演算法所使用的記憶體量的度量,取決於演算法正在處理的資料量。
大 O 符號 一種數學表示法,用於描述當自變數趨近於特定值或無窮大時函式的極限行為。在本教程中用於描述演算法的時間複雜度。
遞迴 一種函式呼叫自身的程式設計技術。
分而治之 一種透過將複雜問題分解為更小、更易於管理子問題,然後解決這些子問題併合並解決方案來解決複雜問題的方法。在使用此方法來編寫演算法時,通常會使用遞迴。
蠻力 一種簡單直接的演算法工作方式,透過嘗試所有可能的解決方案,然後選擇最佳解決方案。

從哪裡開始?

在本教程中,你將首先學習一種資料結構及其匹配的演算法,然後再學習下一個資料結構。

在本教程的後面,概念會變得更復雜,因此最好從一開始就按步驟進行教程來學習 DSA。

正如在前一頁提到的,在學習本教程之前,你應該至少熟悉一種最常見的程式語言,例如 JavaScriptCPython

在下一頁,我們將介紹兩種不同的演算法,它們使用僅有的兩個整數變數來打印出前 100 個斐波那契數。一種演算法使用迴圈,另一種演算法使用一種稱為遞迴的方法。

點選“下一頁”按鈕繼續。



×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援