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