算法的運(yùn)行時(shí)間是指一個(gè)算法在計(jì)算機(jī)上運(yùn)算所花費(fèi)的時(shí)間。它大致等于計(jì)算機(jī)執(zhí)行簡單操作(如賦值操作,比較操作等)所需要的時(shí)間與算法中進(jìn)行簡單操作次數(shù)的乘積。通常把算法中包含簡單操作次數(shù)的多少叫做算法的時(shí)間復(fù)雜性。它是一個(gè)算法運(yùn)行時(shí)間的相對量度,一般用數(shù)量級的形式給出。度量一個(gè)程序的執(zhí)行時(shí)間通常有兩種方法:
一種是事后統(tǒng)計(jì)的方法。因?yàn)楹芏嘤?jì)算機(jī)內(nèi)部都有計(jì)時(shí)功能,不同算法的程序可通過一組或若干組相同的統(tǒng)計(jì)數(shù)據(jù)以分辨優(yōu)劣。但這種方法有兩個(gè)缺陷:一是必須先運(yùn)行依據(jù)算法編制的程序;二是所得時(shí)間的統(tǒng)計(jì)量依賴于計(jì)算機(jī)的硬件、軟件等環(huán)境因素,有時(shí)容易掩蓋算法本身的優(yōu)劣。
另一種是事前分析估算。一種是事前分析估算的方法。一個(gè)程序在計(jì)算機(jī)上運(yùn)行時(shí)所消耗的時(shí)間取決于下列因素:
① 依據(jù)的算法選用何種策略;
② 問題的規(guī)模。例如求100以內(nèi)還是1000以內(nèi)的素?cái)?shù);
③ 書寫程序的語言。對于同一個(gè)算法,實(shí)現(xiàn)語言的級別越高,執(zhí)行效率就越低;
④ 編譯程序所產(chǎn)生的機(jī)器代碼的質(zhì)量。這個(gè)跟編譯器有關(guān);
⑤ 機(jī)器執(zhí)行指令的速度。
顯然,同一個(gè)算法用不同的語言實(shí)現(xiàn),或者用不同的編譯程序進(jìn)行編譯,或者在不同的計(jì)算機(jī)上運(yùn)行時(shí),效率均不相同。這表明使用絕對的時(shí)間單位衡量算法的效率是不合適的。撇開這些與計(jì)算機(jī)硬件、軟件有關(guān)的因素,可以認(rèn)為一個(gè)特定算法"運(yùn)行工作量"的大小,只依賴于問題的規(guī)模(通常用整數(shù)量n表示),或者說,它是問題規(guī)模的函數(shù)。
一個(gè)算法是由控制結(jié)構(gòu)(順序、分支和循環(huán)三種)和原操作(指固有數(shù)據(jù)類型的操作)構(gòu)成的,則算法時(shí)間取決于兩者的綜合效果。為了便于比較同一問題的不同算法,通常的做法是,從算法中選取一種對于所研究的問題(或算法類型)來說是基本運(yùn)算的原操作,以該基本操作重復(fù)執(zhí)行的次數(shù)作為算法的時(shí)間度量。
算法的MIPS有專門的一門學(xué)問,可以去好好參考相關(guān)的數(shù)據(jù)結(jié)構(gòu)書籍。