跳轉到

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)。為了提供最壞情況,通常重點觀察最大的步驟比例。

結論:通過對歷究法評估,我們能快速判斷一個歷究法是否能在讓用者接受的時間內標準扣整,為歷究法之後的优化提供基础。