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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法时间复杂度的渐进表示法 + 分析窍门

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法时间复杂度的渐进表示法 + 分析窍门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果算法里面只有加減法,則算法時間算加減法的次數。
如果算法里面包含加法和乘法,則算法時間一般只算乘法次數,因為計算機計算加減法很快,可忽略。

問題:什么是好的算法?

一個程序的運行時間,依賴與算法的好壞和問題的輸入規模,問題的輸入規模是指輸入量的多少

算法效率

  • 最壞情況復雜度Tworst(n)T_{worst(n)}Tworst(n)?
  • 平均復雜度Tavg(n)T_{avg}(n)Tavg?(n)

Tavg(n)≤Tworst(n)T_{avg(n)}\leq T_{worst}(n) Tavg(n)?Tworst?(n)
除非特別指定,一般關心最壞情況的復雜度。

問題:怎么分析算法的復雜度?

不計循環索引的遞增和循環終止條件、變量聲明、打印結果等操作。

測定運行時間的方法:計算對運行時間由消耗的基本操作的執行次數。運行時間與這個計數成正比。

分析算法的運行時間:把基本操作的數量與輸入規模關聯起來,即基本操作的數量必須表示成輸入規模的函數

判斷一個算法的效率時,函數中的常數和其他次要項常常可以忽略,而更應該關注主項(最高階項)的階數。

只需要關注隨著處理的數據的規模的增大,算法復雜度的增長趨勢。

在進行算法分析時,語句總的執行次數T(n)T(n)T(n)是關于問題規模n的函數,進而分析T(n)T(n)T(n)隨n的變化情況并確定T(n)T(n)T(n)的數量級。算法的時間復雜度,記作:T(n)=O(f(n))T(n)=O(f(n))T(n)=O(f(n))它表示隨問題規模n的增大,算法執行時間的增長率和f(n)f(n)f(n)的增長率相同,稱作算法的漸近時間復雜度。其中f(n)f(n)f(n)是問題規模n的某個函數。

推導大O階方法

  • 用常數1取代運行時間中的所有加法常數。
  • 在修改后的運行次數函數中,只保留最高階項。
  • 如果最高階項存在且不是1,則去除與這個項相乘的常數。
  • 得到的結果就是大O階。

    時間復雜度的漸進表示法

    • T(n)=O(f(n))T(n)=O(f(n))T(n)=O(f(n))表示存在常數C>0C>0C>0n0>0n_0>0n0?>0使得當n≥n0n\geq n_0nn0?時有T(n)≤C?f(n)T(n)\leq C·f(n)T(n)C?f(n)
    • T(n)=Ω(g(n))T(n)=\Omega(g(n))T(n)=Ω(g(n))表示存在常數C>0C>0C>0n0>0n_0>0n0?>0使得當n≥n0n\geq n_0nn0?時有T(n)≥C?g(n)T(n)\geq C·g(n)T(n)C?g(n)
    • T(n)=θ(h(n))T(n)=\theta(h(n))T(n)=θ(h(n))表示同時有T(n)=O(h(n))T(n)=O(h(n))T(n)=O(h(n))T(n)=Ω(h(n))T(n)=\Omega(h(n))T(n)=Ω(h(n))成立

    O(f(n))O(f(n))O(f(n))可有無數種表達方式,一般取最小的上界
    Ω(g(n))\Omega(g(n))Ω(g(n))可有無數種表達方式,一般取最大的上界
    空間復雜度和時間復雜度同理

    時間復雜度分析小竅門

    • 若兩段算法分別有復雜度T1(n)=O(f1(n))T_1(n)=O(f_1(n))T1?(n)=O(f1?(n))T2(n)=O(f2(n))T_2(n)=O(f_2(n))T2?(n)=O(f2?(n)),則
      T1(n)+T2(n)=max(O(f1(n)),O(f(n)))T_1(n)+T_2(n)=max(O(f_1(n)), O(f(n)))T1?(n)+T2?(n)=max(O(f1?(n)),O(f(n)))
      T1(n)+T2(n)=O(f1(n)×f2(n))T_1(n)+T_2(n)=O(f_1(n)\times f_2(n))T1?(n)+T2?(n)=O(f1?(n)×f2?(n))
    • T(n)T(n)T(n)是關于n的k階多項式,則T(n)=θ(nk)T(n)=\theta(n^k)T(n)=θ(nk)
    • 一個for循環的時間復雜度等于循環次數乘以循環體代碼的復雜度
    • if-else結構的復雜度取決于if的條件判斷復雜度和兩個分枝部分的復雜度,總復雜度取三者中最大


    總結

    以上是生活随笔為你收集整理的算法时间复杂度的渐进表示法 + 分析窍门的全部內容,希望文章能夠幫你解決所遇到的問題。

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