1.1 什麼是算法
算法 是一系列 明確步驟或指令的有序序列,用於完成特定任務或解決具體問題。每個步驟都應該是清晰和不含糊的,執行算法應在有限時間內達到明確的結果。
為什麼需要算法:
- 解決問題:算法讓我們可以有系統地解決不同的問題,從簡單的數學運算到複雜的計算問題。
- 自動化流程:算法對於軟件中的任務自動化是必須的,這樣計算機就可以無需人為干預重複執行動作。
- 資源優化:設計良好的算法可以有效使用資源,比如執行時間和記憶體。
- 重複性與可靠性:算法提供了結果的重複性和可預測性,這對於開發可靠的軟件非常重要。
範例:
- 日常任務:例如,早晨的例行公事:醒來、刷牙、做早餐等。
- 數學運算:找出兩個數的最大公約數的算法。
- 電腦程式:排序算法(例如冒泡排序)和搜索算法(例如二分搜尋)。
1.2 什麼是資料結構
資料結構 是 組織和存儲數據的方式,以便可以有效地使用和處理數據。不同的數據結構適合不同類型的任務和操作。
為什麼需要資料結構:
- 高效數據管理:資料結構允許對數據進行快速有效的存取、修改和刪除。
- 優化算法:不同的資料結構適合不同的算法,正確選擇資料結構可以大幅提升算法的效率。
- 編程便利性:使用合適的資料結構可以讓代碼更易於理解、維護和擴展。
- 解決特定問題:某些資料結構是為了解決特定問題而設計的,比如哈希表用於快速搜索或樹狀結構用於層次數據。
範例:
- 陣列:同類型元素的集合,可以通過索引存取。
- 鏈結串列:包含多個元素的集合,每個元素都含有指向下一個元素的指標。
- 堆疊:遵循
LIFO (Last In, First Out)原則的元素集合。 - 佇列:遵循
FIFO (First In, First Out)原則的元素集合。
1.3 算法和資料結構在編程中的重要性
重要! 即使你正在編寫一個簡單的網站或移動應用,你也在使用複雜的算法和資料結構。應用程式在操作系統上運行,網站在瀏覽器內部運行,為了讓這些東西快速可靠地運行,使用了標準化的算法和資料結構。
算法的重要性:
- 編程的基本原則:算法是任何程序的基礎,它決定數據如何被處理以達到所需的結果。
- 效率和性能:優化的算法可以確保程序更快執行和資源的有效使用。
- 解決複雜問題:算法可以解決複雜的計算問題,這些問題是無法手動解決的。
- 普遍性:許多算法可以應用到不同領域,比如排序、搜索、數據壓縮和加密。
資料結構的重要性:
- 數據組織:資料結構允許有效地組織和管理資料,這對於創建高效的程序很重要。
- 支持算法:不同的資料結構對不同的算法是最優的,選擇正確的資料結構可以大大提高程序的性能。
- 可擴展性:設計良好的資料結構允許程序輕鬆地擴展和修改。
1.4 簡單算法範例
查找陣列中的最大值算法:
這個算法會在給定的數字陣列中找到最大的值。
步驟算法:
- 將陣列的第一個元素設為最大值。
- 遍歷陣列中所有其他元素:
- 如果當前元素大於當前最大值,則更新最大值。
- 查看完所有元素後,返回找到的最大值。
Python實現:
def find_max(arr):
# 假設第一個元素是最大值
max_val = arr[0]
# 遍歷所有陣列中的元素
for num in arr:
# 如果當前元素大於 max_val,則更新 max_val
if num > max_val:
max_val = num
# 返回找到的最大值
return max_val
# 使用範例:
# numbers = [4, 2, 9, 7, 5, 1]
# result = find_max(numbers)
# 輸出: 9
冒泡排序算法:
這個算法通過依次比較和交換相鄰元素來排序陣列,如果它們的順序不對。
步驟算法:
- 從陣列的第一個元素開始。
- 將當前元素與下一個元素進行比較。
- 如果當前元素大於下一個元素,則交換這兩個元素。
- 移到下一個元素,重複步驟2-3,直到到達陣列結尾。
- 重複步驟1-4,直到在一次陣列遍歷中沒有執行任何元素交換。
Python實現:
def bubble_sort(arr):
n = len(arr)
# 遍歷所有的陣列元素
for i in range(n):
# 最後的i個元素已經排序
for j in range(0, n - i - 1):
# 比較相鄰元素
if arr[j] > arr[j + 1]:
# 如果它們的順序不對,交換
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
# 使用範例:
# numbers = [64, 34, 25, 12, 22, 11, 90]
# sorted_numbers = bubble_sort(numbers)
# 輸出: [11, 12, 22, 25, 34, 64, 90]
GO TO FULL VERSION