關於程式的運算時間複雜度的一點思考

2021-07-23 11:14:54 字數 1349 閱讀 1160

一般考察演算法的複雜度,我們常用到時間複雜度,和空間複雜度來定義。其中時間,其實就是計算機執行這個演算法執行的指令次數,是乙個計算量的概念;而空間複雜度是指執行這個演算法所需的記憶體空間,即暫存器的資源。

這篇部落格主要**一下自己關於時間複雜度的一些思考。

對比上述四個例子,可以發現,程式的時間複雜度和基本操作被執行的次數有關。這裡很重要的一點是:基本操作。其實for迴圈,每次執行,都有兩個基本操作,比較和++,所以即使for語句裡沒有任何操作,也會有兩個基本操作。for迴圈裡,如果有類似的基本操作,程式的執行時間不會改變太多。但是一旦迴圈裡有比較複雜的操作,如pow操作,這個操作就成為基本操作,也是for迴圈裡最耗費時間的。但看這個語句,其實看不出它有多複雜,但是從執行結果來看,它使程式執行時間提高了二十多倍,可見pow操作的執行時間遠遠大於賦值、比較等操作的時間。其本質我估計是單個pow操作所需要的彙編指令個數遠遠大於賦值、比較等操作需要的彙編指令個數。

對比這三個,有以下思考:但看執行次數,這三個和上面的執行次數是一樣的,但是執行時間是上面的1.5倍,即使執行的基本操作一樣。那為何執行時間是上面的1.5倍呢,我估計是因為當for迴圈裡的迴圈次數比較大時,每次比較或者++運算會耗費更多時間。

另外,當迴圈裡的總數寫成n* n和4e8,執行時間是不一樣的,這個很容易理解,因為每次比較,都要先計算一下n*n,這個計算本身就引入了乙個比較大的基本操作,所以執行時間會多點。

當for迴圈裡的基本操作從2個變成12個時,整體執行時間也從3秒變成18秒,可見迴圈執行次數和基本操作決定了整個時間複雜度。

以上是我的思考,有不對的,歡迎指正。

關於程式的運算時間複雜度的一點思考

一般考察演算法的複雜度,我們常用到時間複雜度,和空間複雜度來定義。其中時間,其實就是計算機執行這個演算法執行的指令次數,是乙個計算量的概念 而空間複雜度是指執行這個演算法所需的記憶體空間,即暫存器的資源。對比上述四個例子,可以發現,程式的時間複雜度和基本操作被執行的次數有關。這裡很重要的一點是 基本...

關於時間複雜度的一點簡單總結

演算法的複雜度分為時間複雜度和空間複雜度,今天在這裡主要講一下時間複雜度。時間複雜度,簡單來說,就是通過程式語句的執行次數來估計程式執行時間的乙個函式,用o表示。在相同硬體和軟體的情況下 可以把它認為就是花費時間的函式的數量級。簡單來說,就是為了提高計算機工作的效率,因為現實生活中,通常處理的是大量...

演算法時間複雜度的一點點理解

1.時間頻度用t n 表示,表示當乙個程式,其中某個變數n,他的值是n時,執行的語句 命令的次數。比如t n 3 時間複雜度用o f n 表示,f n 是乙個輔助函式,隨著n值增大,與t n 比值接近常數的函式。比如f n 此時,時間複雜度可以用o 2.在計算時間複雜度時,比如t n 3。3.常見的...