看標題感覺這一章很重要,但其實教材也就十幾頁就結束了,主要內容還是上,下限,以及學會計算程式執行時間,也沒涉及到敲**,其他的了解一下就行了吧
正文:1.演算法的增長率是指當輸入的值增長時,演算法代價的增長速率。表示式為cn(c為常數)的增長率稱為線性增長率或者線性時間代價。含有n2次方的高次項,稱為二次增長率,該曲線屬於指數增長率。n方 n logn比較 (注:資料結構中log一般預設以2為底)
2.最佳情況(如第乙個元素恰恰就是所需),最差情況(如直到陣列最後乙個元素才找到所需的k)平均情況(如陣列大小為n,平均要檢查n/2個元素)。
3.如何更快的演算法?log優於線性優於指數型
4.漸進分析(asymptotic analysis):忽略係數,注意集中在最重要的一點:增長率。能夠簡化演算法分析
但也不一定一定是最好的,如對5個數排序的一種演算法,如果用來給成千上萬的數排序,演算法就可能不是很適合,儘管它的漸進分析表明該演算法效能良好。
5.上限:用來表示該演算法可能有的最高增長率。大o表示法(讀作大歐): 如果某個演算法增長率上限(在最差情況下)是f(n) <=> 最差情況下在集合o(f(n))中
給出o的定義:設t(n)表示演算法的實際執行時間,f(n)則是上限的乙個函式表示式。對於非負函式t(n),如果存在兩個正的常數c和n0,對於任意n>n0,有t(n)<=cf(n),則稱t(n)在集合o(f(n)) 中
例:t(n)=c1n平方+c2n(c1,c2為正的常數),t(n)在o(n平方)中 證明:c1n平方+c2n <= c1n平方+c2n平方 = (c1+c2)n平方,n>1時成立,再n=1時也滿足
6.下限:用來描述演算法在某類資料輸入時所需要的最少資源。 用符號ω表示(讀作歐公尺伽)
給出ω的定義:設t(n)表示演算法的實際執行時間,g(n)則是乙個函式表示式。對於非負函式t(n),如果存在兩個正的常數c和n0,對於任意n>n0,有t(n)>=cg(n),則稱t(n)在集合ω(g(n)) 中
7.θ表示法:如果乙個演算法既在o(h(n))中,又在ω(h(n))中,則稱其為θ(h(n)) (讀作西塔)
8.化簡法則:有四條法則:
i.若f(n)在o(g(n))中,且g(n)在o(h(n))中,則f(n)在o(h(n))中; (這條很少用到)
ii.若f(n)在o(kg(n))中,對於任意常數k>0成立,則f(n)在o(g(n))中;
iii.若f(n)在o(g1(n))中,且f2(n)在o(g2(n))中,則f1(n)+f2(n)在o(max(g1(n),g2(n)))中;
iiii.若f1(n)在o(g1(n))中,且f2(n)在o(g2(n))中,則f1(n)f2(n)在o(g1(n)g2(n))中;
9.函式分類:判斷兩函式比值的極限來判斷哪個增長率更快:比如給定f(n)和g(n),lim f(n)/g(n) (n趨於無窮大),若極限趨於無窮大,則f(n)增長得更快,極限趨於0,則g(n)增長得更快
10.程式執行時間的計算
這是個重點!!!給出乙個程式,學會判斷執行時間,比如含有m層for(i=0;i學到後面真就越學越難…前三章可真就是一道小菜
資料結構與演算法分析
資料結構與演算法分析可以稱得上是程式設計師必須修煉的內功心法。資料的儲存結構 資料元素在計算機中的儲存方式 資料的操作集合 對一種資料型別的資料所有操作,例如對資料的增刪改查等等!演算法分析主要分析 下面是一些常用資料結構 一 線性表 1.陣列實現 2.鍊錶 二 棧與佇列 三 樹與二叉樹 1.樹2....
資料結構與演算法分析
資料結構 大量資料的組織方法 演算法分析 演算法執行時間的估算。涉及到計算效率。設想,如果能把時間限制從16年減至不到1秒,不很神奇嗎?在很多問題中,乙個重要的觀念是 寫出乙個可以工作的程式並不夠。如果這個程式在巨大的資料集上執行,執行時間就成了重要的 問題。演算法,是為求解乙個問題需要遵循的 被清...
資料結構與演算法 3
非遞迴 o n logn 示例 mergesort 求陣列最小和問題 求陣列中 每個數左側所有比它小的數的和 的和 求降序對問題 陣列中每個數與其右側比它小的數組成的二元組 上題反過來即可 partition過程 給定乙個陣列arr,和乙個整數num,請把小於num的數放在陣列的左邊,大於num的數...