久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      一個算法的執(zhí)行時間效率用什么衡量

      一個算法的執(zhí)行時間效率用什么衡量

      在忽略機器性能的基礎(chǔ)上我們用算法時間復(fù)雜度來衡量算法執(zhí)行的時間。
      1、時間頻度
      一個算法執(zhí)行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個算法都上機測試,只需知道哪個算法花費的時間多,哪個算法花費的時間少就可以了。并且一個算法花費的時間與算法中語句的執(zhí)行次數(shù)成正比例,哪個算法中語句執(zhí)行次數(shù)多,它花費時間就多。一個算法中的語句執(zhí)行次數(shù)稱為語句頻度或時間頻度。記為T(n)。
      2、時間復(fù)雜度
      在剛才提到的時間頻度中,n稱為問題的規(guī)模,當(dāng)n不斷變化時,時間頻度T(n)也會不斷變化。但有時我們想知道它變化時呈現(xiàn)什么規(guī)律。為此,我們引入時間復(fù)雜度概念。

      一般情況下,算法中基本操作重復(fù)執(zhí)行的次數(shù)是問題規(guī)模n的某個函數(shù),用T(n)表示,若有某個輔助函數(shù)f(n),使得當(dāng)n趨近于無窮大時,T(n)/f(n)的極限值為不等于零的常數(shù),則稱f(n)是T(n)的同數(shù)量級函數(shù)。記作T(n)=O(f(n)),稱O(f(n)) 為算法的漸進(jìn)時間復(fù)雜度,簡稱時間復(fù)雜度。

      在各種不同算法中,若算法中語句執(zhí)行次數(shù)為一個常數(shù),則時間復(fù)雜度為O(1),另外,在時間頻度不相同時,時間復(fù)雜度有可能相同,如T(n)=n^2+3n+4與T(n)=4n^2+2n+1它們的頻度不同,但時間復(fù)雜度相同,都為O(n^2)。
      按數(shù)量級遞增排列,常見的時間復(fù)雜度有:
      常數(shù)階O(1),對數(shù)階O(log2n)(以2為底n的對數(shù),下同),線性階O(n),
      線性對數(shù)階O(nlog2n),平方階O(n^2),立方階O(n^3),…,
      k次方階O(n^k),指數(shù)階O(2^n)。隨著問題規(guī)模n的不斷增大,上述時間復(fù)雜度不斷增大,算法的執(zhí)行效率越低。
      算法的時間性能分析
      (1)算法耗費的時間和語句頻度

      一個算法所耗費的時間=算法中每條語句的執(zhí)行時間之和

      每條語句的執(zhí)行時間=語句的執(zhí)行次數(shù)(即頻度(Frequency Count))×語句執(zhí)行一次所需時間

      算法轉(zhuǎn)換為程序后,每條語句執(zhí)行一次所需的時間取決于機器的指令性能、速度以及編譯所產(chǎn)生的代碼質(zhì)量等難以確定的因素。

      若要獨立于機器的軟、硬件系統(tǒng)來分析算法的時間耗費,則設(shè)每條語句執(zhí)行一次所需的時間均是單位時間,一個算法的時間耗費就是該算法中所有語句的頻度之和。
      求兩個n階方陣的乘積 C=A×B,其算法如下:

        # define n 100 // n 可根據(jù)需要定義,這里假定為100   void MatrixMultiply(int A[a],int B [n][n],int C[n][n])   { //右邊列為各語句的頻度   int i ,j ,k;    for(i=0; i<n;j++) n+1    for (j=0;j<n;j++) { n(n+1)    C[i][j]=0; n    for (k=0; k<n; k++) nn(n+1)    C[i][j]=C[i][j]+A[i][k]*B[k][j];n   }   }

      該算法中所有語句的頻度之和(即算法的時間耗費)為:

      T(n)=nn(n+1) (1.1)

      分析:

      語句(1)的循環(huán)控制變量i要增加到n,測試到i=n成立才會終止。故它的頻度是n+1。但是它的循環(huán)體卻只能執(zhí)行n次。語句(2)作為語句(1)循環(huán)體內(nèi)的語句應(yīng)該執(zhí)行n次,但語句(2)本身要執(zhí)行n+1次,所以語句(2)的頻度是n(n+1)。同理可得語句(3),(4)和(5)的頻度分別是n,nn(n+1)和n。

      算法MatrixMultiply的時間耗費T(n)是矩陣階數(shù)n3的函數(shù)。

      (2)問題規(guī)模和算法的時間復(fù)雜度
      算法求解問題的輸入量稱為問題的規(guī)模(Size),一般用一個整數(shù)表示。

      矩陣乘積問題的規(guī)模是矩陣的階數(shù)。

      一個圖論問題的規(guī)模則是圖中的頂點數(shù)或邊數(shù)。

      一個算法的時間復(fù)雜度(Time Complexity, 也稱時間復(fù)雜性)T(n)是該算法的時間耗費,是該算法所求解問題規(guī)模n的函數(shù)。當(dāng)問題的規(guī)模n趨向無窮大時,時間復(fù)雜度T(n)的數(shù)量級(階)稱為算法的漸進(jìn)時間復(fù)雜度。

      算法MatrixMultidy的時間復(fù)雜度T(n)如(1.1)式所示,當(dāng)n趨向無窮大時,顯然有T(n)~O(n3);

      這表明,當(dāng)n充分大時,T(n)和n3之比是一個不等于零的常數(shù)。即T(n)和n3是同階的,或者說T(n)和n3的數(shù)量級相同。記作T(n)=O(n3)是算法MatrixMultiply的漸近時間復(fù)雜度。

      (3)漸進(jìn)時間復(fù)雜度評價算法時間性能

      主要用算法時間復(fù)雜度的數(shù)量級(即算法的漸近時間復(fù)雜度)評價一個算法的時間性能。
      算法MatrixMultiply的時間復(fù)雜度一般為T(n)=O(n3),f(n)=n3是該算法中語句(5)的頻度。下面再舉例說明如何求算法的時間復(fù)雜度。

      交換i和j的內(nèi)容。

      Temp=i; i=j; j=temp;

        以上三條單個語句的頻度均為1,該程序段的執(zhí)行時間是一個與問題規(guī)模n無關(guān)的常數(shù)。算法的時間復(fù)雜度為常數(shù)階,記作T(n)=O(1)?! ?br />注意:如果算法的執(zhí)行時間不隨著問題規(guī)模n的增加而增長,即使算法中有上千條語句,其執(zhí)行時間也不過是一個較大的常數(shù)。此類算法的時間復(fù)雜度是O(1)。
      變量計數(shù)之一:

         x=0;y=0;    for(k-1;k<=n;k++)    x++;    for(i=1;i<=n;i++)    for(j=1;j<=n;j++)    y++;

      一般情況下,對步進(jìn)循環(huán)語句只需考慮循環(huán)體中語句的執(zhí)行次數(shù),忽略該語句中步長加1、終值判別、控制轉(zhuǎn)移等成分。因此,以上程序段中頻度最大的語句是(6),其頻度為f(n)=n2,所以該程序段的時間復(fù)雜度為T(n)=O(n2)。

      當(dāng)有若干個循環(huán)語句時,算法的時間復(fù)雜度是由嵌套層數(shù)最多的循環(huán)語句中最內(nèi)層語句的頻度f(n)決定的。

      變量計數(shù)之二:

      x=1; for(i=1;i<=n;i++) for(j=1;j<=i;j++) for(k=1;k<=j;k++) x++;

      該程序段中頻度最大的語句是(5),內(nèi)循環(huán)的執(zhí)行次數(shù)雖然與問題規(guī)模n沒有直接關(guān)系,但是卻與外層循環(huán)的變量取值有關(guān),而最外層循環(huán)的次數(shù)直接與n有關(guān),因此可以從內(nèi)層循環(huán)向外層分析語句(5)的執(zhí)行次數(shù):

      則該程序段的時間復(fù)雜度為T(n)=O(n3/6+低次項)=O(n3)。

      (4)算法的時間復(fù)雜度不僅僅依賴于問題的規(guī)模,還與輸入實例的初始狀態(tài)有關(guān)。

      在數(shù)值A(chǔ)[0..n-1]中查找給定值K的算法大致如下:

      i=n-1; while(i>=0&&(A[i]!=k))  i--; return i;

      此算法中的語句(3)的頻度不僅與問題規(guī)模n有關(guān),還與輸入實例中A的各元素取值及K的取值有關(guān):

      ①若A中沒有與K相等的元素,則語句(3)的頻度f(n)=n;

      ②若A的最后一個元素等于K,則語句(3)的頻度f(n)是常數(shù)0。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號