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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法训练营02-预备知识和时间复杂度分析

發布時間:2024/2/28 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法训练营02-预备知识和时间复杂度分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 準備知識
      • 1. 拓展資料
      • 2. 自頂向下編寫算法
    • 2. 時間復雜度的分析
      • 1.時間復雜度種類
      • 2. 時間復雜度的分析方法
      • 3. 主定理理論,時間復雜度計算

1. 準備知識

1. 拓展資料

  • leetcode看看同一個題目國際站的disscuss,一定要看這個
  • idea leetcode的plugin
  • code style: 空格等需要注意
  • 選單詞的快捷鍵操作
  • 2. 自頂向下編寫算法

    自頂向下的方式,使用方法來抽象主干邏輯

    2. 時間復雜度的分析

    1.時間復雜度種類

    時間復雜度,最常見是7種

  • O(1) 常數
  • O(logn) 對數
  • O(n) 線性
  • O(n^2) 平方
  • O(n^3) 立方
  • O(2^n) 指數
  • O(n!) 階乘
  • 2. 時間復雜度的分析方法

    個人在學習中發現,時間復雜度的分析很多時候沒有唯一的方式,首先,關于時間復雜度的理解,我認為可以理解為隨著問題規模的增長,需要的時間增長的級別
    但是具體的分析方式確實有很多種類

  • 簡單的分析,比如對于sum(n)的算法,直接看n=1,和n=k之間的差別

  • 如果使用循環累加的話,那么n=k的話,時間復雜度也會從t編程kt,所以時間復雜度則是O(n)
  • 如果使用數學公式進行計算的話,那么n=k和n=1的計算方式是一樣的
  • 使用遞推方式,比如斐波那契的最原始的方式f(n)=f(n-1)+f(n-2)的遞歸方式,所以T(n)=T(n-1)+T(n-2),所以T(n)=2^n*T(1),所以T(n)=2^n

  • 使用樹狀圖類分析,把merge sort 分析,拆成一個樹,進行分析

    我們只需要知道這棵樹的高度hhh,用高度hhh乘以每一層的時間消耗nnn,就可以得到總的時間復雜度O(n?h)O(n*h)O(n?h)

  • 使用主定理(master method)分析

  • 3. 主定理理論,時間復雜度計算

    主定理最早出現在《算法導論》中,提供了分治方法帶來的遞歸表達式的漸近復雜度分析。
    規模為n的問題通過分治,得到a個規模為n/b的問題,每次遞歸帶來的額外計算為f(n)
    那么問題的時間復雜度為:
    T(n) = aT(n/b)+f(n)

    設c*=logb(a)
    那么就可以得到問題的復雜度為:

  • 如果c<c*
  • f(n)=O(n^c), c<c* 則T(n)=O(n^c*)

    舉例,二叉樹的遍歷,時間復雜度為O(n)
    對應的

    a=2,b=2 c*=1 f(n)=O(1) T(n)=2(n/2)+O(1) 因為滿足c<c*則T(n)=O(n)
  • 如果c==c*
  • f(n)=O(n^c * (log(n))^k),且c==c* 則 T(n)=O(n^c* * (log(n))^(k+1))這里的關鍵就是f(n)中的n的指數等于logb(a)這個條件也被描述為 f(n)=O(n^c* * (log(n))^k)

    舉例,merge sort,時間復雜度為nlog(n)

    a=2,b=2 c*=1 f(n)=O(n),則由f(n)=O(n^c* * (log(n))^k)可以推斷出來k=0 所以 T(n)=nlog(n)

    二分查找

    a=1,b=2 c*=0 f(n)=O(1),所以c=0,k=0 c==c* T(n)=O(n^0 * log(n)^1 = O(log(n))
  • 如果 c>c*
  • f(n)=O(n^c) 且c>c* 則T(n)=O(f(n))

    舉例,暫無

    注意,主定理的使用也是萬能的,他只使用于,子問題劃分為了獨立的子問題的情況,子問題之間不能再有交叉
    在斐波那契數列中,主定理就是無法使用的

    總結

    以上是生活随笔為你收集整理的算法训练营02-预备知识和时间复杂度分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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