時間複雜度

2021-06-16 14:07:35 字數 1652 閱讀 7326

time limit: 1 sec  

memory limit: 128 mb

submit: 6  

solved: 3

在acm

裡面,計算複雜度是一項非常重要的事情,常見的複雜度格式有三種: 

1、 o(n) 

2、 o(lg(n))

3、 o(sqrt(n))

乙個演算法往往有多種解法,每種解法的複雜度有上述常見的的複雜度組合成,例如排序的兩種演算法:

1、 快速排序: 時間複雜度為o(n*lg(n))

2、 氣泡排序: 時間複雜度為o(n*n)

現在給定你乙個n,m

個演算法複雜度,請確定這些複雜度是否會超時。若複雜度計算結果大於

100000000

,則為超時

(tle)

,否則輸出計算的複雜度,輸出的結果保留兩位小數。

( lg(n)表示以

2為底數,

n為真數的值 )

第一行輸入n (1≤n

≤10000), m(1≤m

≤100), 其中n

為題目描述的數,

m為演算法複雜度的個數。

接下來m

行,每行為乙個串,每個串都包含

o()任何括號裡面的資料保證僅由

n,lg(),sqrt(),*

組成並且合法。如

sample input

所示。

對於每個串,若計算出來的複雜度大於100000000

,則輸出

tle,否則輸出該複雜度的計算次數

10000 6 o

(n*n)

o(n*n*n)

o(sqrt(n))

o(lg(n))

o(n*lg(n))

o(n*lg(n*lg(n)))

100000000.00

tle100.00

13.29

132877.12

170197.33

關於lg(n)的c

語言**可以這樣寫

log(n) / log(2)

思路:用乙個數字棧num來儲存資料,用乙個符號棧stack來儲存符號,符號只有幾種,

sqrt(

用個s來表示

,lg(用了l

來表示,

o(不用

表示,直接跳過,*,n用本身表示,當掃到這些符號棧的時候,就可以將計算得出的數壓入資料棧。當掃瞄到)時,就可以合併乙個運算或兩個資料。最後的資料棧num只有乙個數,既答案num[1]

**:

#include#include#include#includeusing namespace std;

char ss[110];

char stack[110];

double num[110];

int main()

if(stack[top-1]=='l')

else if(stack[top-1]=='s')}}

if(num[1]>100000000)

printf("tle\n");

else

printf("%.2lf\n",num[1]);

}return 0;

}

from:暑假訓練第四場

dfs時間複雜度 時間複雜度 空間複雜度

時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...

時間複雜度 空間複雜度

時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...

時間複雜度 空間複雜度

演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...