時間 空間複雜度分析

2021-08-17 08:17:47 字數 1916 閱讀 5205

算時間複雜度時常常算的是最壞執行次數

如有常數項,可忽略不計  eg:某程式最壞執行次數為2n 時間複雜度為o(n) 將2省略

遞迴演算法時間複雜度=遞迴次數*每次執行操作次數

<2>空間複雜度指演算法執行建立變數的個數 包括臨時變數

如有常數項,可忽略不計  eg:某程式演算法執行時建立的變數為2n個 空間複雜度為o(n) 將2省略

遞迴演算法空間複雜度=深度(呼叫函式的次數)*每次開闢的空間

1、二分查詢演算法的遞迴

int search_recursiong(int *arr, int lift, int right, int num)

else if (arr[mid] < num)

else

} printf("input is error!\n");

return 0;

}int main()

; int num = 0;

printf("請輸入要查詢的值:");

scanf("%d", &num);

int lift = 0;

int right = (sizeof(arr) / sizeof(arr[0])) - 1;

search_recursiong(arr, lift, right, num);

system("pause");

return 0;

}

時間複雜度:一共有n個數 每次遞迴去除一半 執行次數為x  n=2^x    -------->x=log2(n)------->   o(log2(n))

空間複雜度:一共遞迴log2(n)次  每次遞迴開闢空間為常數            ------------------------------->   o(log2(n))

2、二分查詢非遞迴

void search_notrecursion(int *arr,int sz,int num)

else if (arr[mid] < num)

else

} printf("該數不存在!\n");

}int main()

; int sz = sizeof(arr) / sizeof(arr[0]);

int num = 0;

printf("請輸入要查詢的值:");

scanf("%d", &num);

search_recursion(arr, sz, num);

system("pause");

return 0;

}

時間複雜度:迴圈了log2(n)次  所以時間複雜度為o(log2(n))

空間複雜度:o(1)

3、斐波那契數列遞迴

斐波那契數列第n項:

int fibonacci_recursiong(int n)

}

時間複雜度:o(2^n)

空間複雜度:o(n)

斐波那契數列前n項:

int fibonacci_recursiong(long front,long behind,int num)//ps:預設輸入前num個數大於2

printf("\n");

return 0;

}int main()

時間複雜度:o(n)

空間複雜度:o(n^2)

4、斐波那契數列非遞迴

void fibonacci_notrecursiong(int i,int j,int num)//ps:預設輸入前num個數大於2

printf("\n");

}int main()

時間複雜度:o(n)

空間複雜度:o(1)

複雜度分析 時間複雜度 空間複雜度

執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...

複雜度分析 時間複雜度分析和空間複雜度分析

其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...

複雜度分析(上)時間複雜度 空間複雜度

為了肉眼 實時 快速地來分析出 的複雜度,我們需要乙個不用具體的測試資料來測試,就可以粗略地估計演算法的執行效率的方法。時間複雜度 空間複雜度 表示演算法的執行時間與資料規模之間的增長關係。每行 對應的 cpu 執行的個數 執行的時間都不一樣,但是,我們這裡只是粗略估計,所以可以假設每行 執行的時間...