日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法设计与分析】03 算法及其时间复杂度

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法设计与分析】03 算法及其时间复杂度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在學習算法的時間復雜度之前,需要了解下面5條概念

  • 什么是算法的時間復雜度? 針對指定基本運算,計數算法所做的運算次數。
  • 什么是基本運算?比較、加法、乘法、置指針、交換…
  • 什么是輸入規模?輸入串的編碼長度,通常是數組元素的多少、調度問題的任務個數、圖的頂點數與邊數等。
  • 算法的基本運算次數可以表示為輸入規模的函數。
  • 給定問題和基本運算,就決定了一個算法類

文章目錄

    • 1 算法的兩種時間復雜度
      • 1.1 例子:檢索問題
        • (1)順序檢索算法
        • (2)改進順序檢索算法
    • 2 總結

1 算法的兩種時間復雜度

對于相同輸入規模的不同實例,算法的基本運算次數也不一樣,所以定義了兩種時間復雜度。

  • 最壞情況下的時間復雜度W(n):算法求解輸入規模為n的實例所需要最長的時間
  • 平均情況下的時間復雜度A(n): 在給定同樣規模為n的實例的概率分布下,算法求解這些實例所需要的平均時間。
  • 平均情況下的時間復雜度求解公式為:

    A(n)=∑I∈SPItIA(n) = \sum_{I{\in}S} P_It_IA(n)=IS?PI?tI?

    其中:S為規模為n的實例集,實例I∈SI\in SIS的概率為PI .算法對實例I執行的基本運算次數為:tI

    在某些情況下,可以假定每個輸入實例的概率相等。

    1.1 例子:檢索問題

    • 輸入:非降序排列的數組L,元素個數n,需要檢索的數x。
    • 輸出:j。如果x在數組L中,j是x首次出現的下標。否則j=0.
    • 基本運算:x與L中的元素比較。

    (1)順序檢索算法

    j=1, 將x與L[j]比較. 如果 x=L[j],則算法停止,輸出 j;如果不等,則把 j 加1,繼續x與L[j]的比較,如果 j>n,則停機并輸出0。

    實例:1 2 3 4 5
    x=4,需要比較4次
    x=2.5 ,需要比較5次

  • 最壞情況時間復雜度
  • 不同的輸入有:2n+1個,分別對應:

    • 最壞情況下時間:W(n)=n;
    • 最壞的輸入:x不在L中,或者x=L[n](還沒有接觸到數據結構中的數組,下表不是從0開始的,是從1開始的)。此時要做n次比較。
  • 平均情況的時間估計
  • 輸入實例的概率分布:假設x在L中的概率是P,且每個位置的概率相等。則由上文的公式得:

    A(n)=∑i=1nipn+(1?p)n=p(n+1)2+(1?p)nA(n) = \sum_{i=1}^n i\frac{p}{n} + (1-p)n = \frac{p(n+1)}{2}+(1-p)nA(n)=i=1n?inp?+(1?p)n=2p(n+1)?+(1?p)n

    當p=1/2時,A(n)=n+14+n2≈3n4A(n)=\frac{n+1}{4}+\frac{n}{2} \approx \frac{3n}{4}A(n)=4n+1?+2n?43n?

    注意:上述求解公式中,注意理解(1-p)n 代表如果元素不存在數組中,比較的次數是從頭到尾。即n次,不存在的概率是1-p。

    (2)改進順序檢索算法

    j=1, 將 x與L[j]比較. 如果 x=L[j],則算法停止,輸出 j;如果 x >L[j],則把 j 加1,繼續 x與 L[j]的比較;如果 x < L[j],則停機并輸出0. 如果 j >n,則停機并輸出 0。

    之所以可以優化成這樣是因為該算法的輸入是:非降序排列的數組

    實例:1 2 3 4 5
    x = 4,需要比較 4 次
    x = 2.5,需要比較 3 次

  • 最壞情況時間復雜度:W(n) = n
  • 平均情況時間復雜度
  • 輸入實例的概率分布:假設x在數組L中的每個位置與空隙的概率都相等。設在數組中的概率是p,不在數組L中的概率是1-p。則pn=1?pn+1\frac{p}{n}=\frac{1-p}{n+1}np?=n+11?p?

    則由公式,計算平均時間復雜度為:

    A(n)=∑i=1nipn+1?pn+1n=∑i=1nipn+pnnA(n) = \sum_{i=1}^n i\frac{p}{n} + \frac{1-p}{n+1}n =\sum_{i=1}^n i\frac{p}{n} + \frac{p}{n}n A(n)=i=1n?inp?+n+11?p?n=i=1n?inp?+np?n
    =p(1+n)2+p=\frac{p(1+n)}{2}+p=2p(1+n)?+p

    當p=1/2時:

    A(n)=n4+34≈n4A(n)=\frac{n}{4}+\frac{3}{4} \approx \frac{n}{4}A(n)=4n?+43?4n?

    很明顯,改進后的檢索算法,時間復雜度減小了很多。算法的性能有所提升。

    2 總結

    • 本文的學習并不是來學習檢索這個算法也不是來提升它的性能。
    • 而是根據檢索算法這個例子,來學習時間復雜度的定義,學會計算時間復雜度。
    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的【算法设计与分析】03 算法及其时间复杂度的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。