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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

文章目錄

    • 1. 準(zhǔn)備知識(shí)
      • 1. 拓展資料
      • 2. 自頂向下編寫算法
    • 2. 時(shí)間復(fù)雜度的分析
      • 1.時(shí)間復(fù)雜度種類
      • 2. 時(shí)間復(fù)雜度的分析方法
      • 3. 主定理理論,時(shí)間復(fù)雜度計(jì)算

1. 準(zhǔn)備知識(shí)

1. 拓展資料

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

    自頂向下的方式,使用方法來(lái)抽象主干邏輯

    2. 時(shí)間復(fù)雜度的分析

    1.時(shí)間復(fù)雜度種類

    時(shí)間復(fù)雜度,最常見(jiàn)是7種

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

    個(gè)人在學(xué)習(xí)中發(fā)現(xiàn),時(shí)間復(fù)雜度的分析很多時(shí)候沒(méi)有唯一的方式,首先,關(guān)于時(shí)間復(fù)雜度的理解,我認(rèn)為可以理解為隨著問(wèn)題規(guī)模的增長(zhǎng),需要的時(shí)間增長(zhǎng)的級(jí)別
    但是具體的分析方式確實(shí)有很多種類

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

  • 如果使用循環(huán)累加的話,那么n=k的話,時(shí)間復(fù)雜度也會(huì)從t編程kt,所以時(shí)間復(fù)雜度則是O(n)
  • 如果使用數(shù)學(xué)公式進(jìn)行計(jì)算的話,那么n=k和n=1的計(jì)算方式是一樣的
  • 使用遞推方式,比如斐波那契的最原始的方式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

  • 使用樹(shù)狀圖類分析,把merge sort 分析,拆成一個(gè)樹(shù),進(jìn)行分析

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

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

  • 3. 主定理理論,時(shí)間復(fù)雜度計(jì)算

    主定理最早出現(xiàn)在《算法導(dǎo)論》中,提供了分治方法帶來(lái)的遞歸表達(dá)式的漸近復(fù)雜度分析。
    規(guī)模為n的問(wèn)題通過(guò)分治,得到a個(gè)規(guī)模為n/b的問(wèn)題,每次遞歸帶來(lái)的額外計(jì)算為f(n)
    那么問(wèn)題的時(shí)間復(fù)雜度為:
    T(n) = aT(n/b)+f(n)

    設(shè)c*=logb(a)
    那么就可以得到問(wèn)題的復(fù)雜度為:

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

    舉例,二叉樹(shù)的遍歷,時(shí)間復(fù)雜度為O(n)
    對(duì)應(yīng)的

    a=2,b=2 c*=1 f(n)=O(1) T(n)=2(n/2)+O(1) 因?yàn)闈M足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))這里的關(guān)鍵就是f(n)中的n的指數(shù)等于logb(a)這個(gè)條件也被描述為 f(n)=O(n^c* * (log(n))^k)

    舉例,merge sort,時(shí)間復(fù)雜度為nlog(n)

    a=2,b=2 c*=1 f(n)=O(n),則由f(n)=O(n^c* * (log(n))^k)可以推斷出來(lái)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))

    舉例,暫無(wú)

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

    總結(jié)

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

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。