数据结构与算法分析-第2章
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法分析-第2章
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
<?xml version="1.0" encoding="utf-8"?> 數(shù)據(jù)結(jié)構(gòu)與算法分析-第2章
數(shù)據(jù)結(jié)構(gòu)與算法分析-第2章
Table of Contents
- 1. 第2章-算法分析
- 1.1. 數(shù)學(xué)基礎(chǔ)
- 1.2. 運(yùn)行時間
- 1.2.1. 最大自序列和問題求解
- 1.2.2. 運(yùn)行時間中的對數(shù)
1 第2章-算法分析
1.1 數(shù)學(xué)基礎(chǔ)
- 四個定義
- 如果存在正整數(shù) \(c\) 和 \(n_0\) 使得當(dāng) \(N\ge n_0\) 時 \(T(N) \le cf(N)\) , 則記為 \(T(N) = O(f(N))\).上界的定義,大O記法.\(T(N)\) 的增長率小于等于 \(f(N)\) 的增長率.
- 如果存在正整數(shù) \(c\) 和 \(n_0\) 使得當(dāng) \(N\ge n_0\) 時 \(T(N) \ge cg(N)\) , 則記為 \(T(N) = \Omega(f(N))\).下界的定義,\(T(N)\) 的增長率大于等于 \(g(N)\) 的增長率.
- \(T(N)=\Theta(h(N))\) 當(dāng)且僅當(dāng) \(T(N)=O(h(N))\) 且 \(T(N) = \Omega(h(N))\).\(T(N)\) 的增長率等于 \(h(N)\) 的增長率.
- 如果 \(T(N)=O(p(N))\) 且 \(T(N)\neq\Theta(p(N))\) ,則 \(T(N)=o(p(N))\) .小o記法. \(T(N)\) 的增長率小于 \(p(N)\) 的增長率.大O包含增長率相同的可能性.
- 法則1: 如果 \(T_1(N)=O(f(N))\) 且 \(T_2(N) = O(g(N))\) ,那么
- \(T_1(N) + T_2(N) = max(O(f(N)), O(g(N)))\)
- \(T_1(N) * T_2(N) = O(f(N) * g(N))\)
- 法則2: 如果 \(T(N)\) 是一個k次多項(xiàng)式,則 \(T(N) = \Theta(N^k)\).
- 法則3: 對于任意常數(shù)k, \(\log^kN=O(N)\). 它告訴我們對數(shù)增長得非常緩慢.
- 典型的增長率
| c | 常數(shù) |
| logN | 對數(shù)級 |
| log2N | 對數(shù)平方根 |
| N | 線性級 |
| NlogN | ? |
| N2 | 平方級 |
| N3 | 立方級 |
| 2N | 指數(shù)級 |
- 可以通過計算極限 \(\lim_{n\to\infty}\frac{f(N)}{g(N)}\) 來確定兩個函數(shù) \(f(N)\) 和 \(g(N)\) 的相對增長率.
- 洛必達(dá)法則: 若 \(\lim_{n\to\infty}f(N) = \infty\) 且 \(\lim_{n\to\infty}g(N) = \infty\) ,則 \(\lim_{n\to\infty}\frac{f(N)}{g(N)} = \lim_{n\to\infty}\frac{f'(N)}{g'(N)}\), \(f'(N)\) 和 \(g'(N)\) 分別是 \(f(N)\) 和 \(g(N)\) 的導(dǎo)數(shù).
- 極限是 \(0\) : 說明 \(f(N)=o(g(N))\)
- 極限是 \(c\neq0\) : 說明 \(f(N)=\Theta(g(N))\)
- 極限是 \(\infty\) : 說明 \(g(N) = o(f(N))\), \(f(N)=O(g(N))\).
- 極限擺動: 二者無關(guān).
1.2 運(yùn)行時間
- 一般法則
- 嵌套的for循環(huán)內(nèi)部的一條語句總的運(yùn)行時間為該語句的運(yùn)行時間乘以該組所有的for循環(huán)的大小的乘積.
- 順序語句將各個語句的運(yùn)行時間求和即可.
- 斐波那契函數(shù)遞歸求法最壞情況的增長率是 \(\frac{5}{3}^n\)
1.2.1 最大自序列和問題求解
- 算法1: 時間復(fù)雜度為 \(O(N^3)\)
- 算法2: 時間復(fù)雜度為 \(O(N^2)\)
- 算法3: 時間復(fù)雜度為 \(O(NlogN)\)
- 算法4: 時間復(fù)雜度為 \(O(N)\)
1.2.2 運(yùn)行時間中的對數(shù)
- 對數(shù)最常出現(xiàn)的規(guī)律的一般法則:
- 如果一個算法用常數(shù)時間 \(O(1)\) 將問題的大小削減為其一部分(通常是 \(\frac{1}{2}\) ), 那么該算法就是 \(O(\log{N})\) .
- 另一方面,使用常數(shù)時間只是把問題減少一個時間常數(shù)(如將問題減少 \(1\) ), 那么該算法就是 \(O(N)\) 的.
- 對分查找: 時間復(fù)雜度為 \(O(N)\)
- 最大公因數(shù)的歐幾里得算法: 時間復(fù)雜度為 \(O(\log{N})\)
- 定理: 如果 \(M > N\) ,則 \(M mod N < \frac{M}{2}\)
- 冪運(yùn)算: 時間復(fù)雜度為 \(O(\log{N})\)
Date: 2018-11-11 16:45
Created: 2018-11-11 日 22:24
Validate
轉(zhuǎn)載于:https://www.cnblogs.com/devinkin/p/9942539.html
總結(jié)
以上是生活随笔為你收集整理的数据结构与算法分析-第2章的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在mac上命令行里面如何打开文本编辑器?
- 下一篇: 小论Java类变量的隐私泄露