01.1-BigO時間複雜度的觀念
1. 複雜度分析#
Big O 時間複雜度的觀念#
在歷練與分析各種歷究和處理問題的減演過程中,我們需要一個標準來比較不同歷究法的效率。這個標準就是“時間複雜度”。在此,“Big O” 是一個常用的比較和衡量工具,用來標示一個歷究法的計算要求的簡稱標準。
以下是基本觀念與經典範例:
1.1 時間複雜度是什麼?#
時間複雜度描述歷究法對計算機的計算時間消耗。它形容了歷究法所需要的步驟數,與輸入比例的關係。常見的時間複雜度有:
-
O(1): 常數時間。 歷究法的培基步驟對比較輸入大小的標準不會改變。 與樣例:
def constant_function(): return 42 -
O(log n): 底數為 2 的寸正尺比。 這類歷究法會持續小型化問題的大小,比如事元分割。 與樣例:
def binary_search(arr, target): left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 -
O(n): 線性時間。 歷究法所需要的步驟和輸入大小相比例成正比。 與樣例:
def linear_search(arr, target): for i in range(len(arr)): if arr[i] == target: return i return -1 -
O(n^2): 二次時間。 這類歷究法在一些次元基础法中常見,如正矩附近的次反反要求。 與樣例:
def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] -
O(2^n): 持續消耗大量計算。 這類複雜度在一些過度遙遠法中出現,如背包問題、路徑形後提供的手止歷究。
1.2 Big O 計算基本步驟的觀察法#
為了評估一個歷究法的時間複雜度,我們可以使用下列標準決定: 1. 找出歷究法中最重要的計算步驟。 2. 計算步驟數和輸入大小的關係。 3. 對步驟數進行相對簡化,以決定相應的 Big O 表示。
1.3 過程與性能依賴#
在評估歷究法時,需要考慮最壞情況(Worst Case)和平均情況(Average Case)。為了提供最壞情況,通常重點觀察最大的步驟比例。
結論:通過對歷究法評估,我們能快速判斷一個歷究法是否能在讓用者接受的時間內標準扣整,為歷究法之後的优化提供基础。