---
title: ãç®æ³ãæ¦è¿°
categories: æ°æ®ç»æä¸ç®æ³
tags: [ç®æ³]
keywords:
mathjax: true
top:
---
- [1. ç®æ³](#1-ç®æ³)
- [2. å¯ä»¥è§£å³åªäºç±»åçé®é¢](#2-å¯ä»¥è§£å³åªäºç±»åçé®é¢)
- [3. ç®æ³åæ](#3-ç®æ³åæ)
- [4. ç®æ³è®¾è®¡](#4-ç®æ³è®¾è®¡)
- [4.1. åæ²»(divide and conquer)](#41-åæ²»divide-and-conquer)
- [5. éå½å¼](#5-éå½å¼)
- [5.1. ä»£æ¢æ³](#51-ä»£æ¢æ³)
- [5.1.1. æ¥éª¤](#511-æ¥éª¤)
- [5.1.2. ä¾å](#512-ä¾å)
- [5.1.3. æ¾ç¼©](#513-æ¾ç¼©)
- [5.1.4. æ¹ååé](#514-æ¹ååé)
- [5.2. é彿 ](#52-é彿 )
- [5.3. ä¸»æ¹æ³(master method)](#53-ä¸»æ¹æ³master-method)
- [5.3.1. è®°å¿](#531-è®°å¿)
- [5.3.2. è¯æ](#532-è¯æ)
- [5.3.2.1. è¯æå½ n 为 b çæ£å广¶æç«](#5321-è¯æå½-n-为-b-çæ£å广¶æç«)
- [5.3.2.2. åææ©å±è³æææ£æ´æ° n 齿ç«](#5322-åææ©å±è³æææ£æ´æ°-n-齿ç«)
- [6. éæºç®æ³](#6-éæºç®æ³)
- [6.1. éæºæåæ°ç»(shuffle)](#61-éæºæåæ°ç»shuffle)
- [6.1.1. PERMUTE-BY-SORTING](#611-permute-by-sorting)
- [6.1.2. RANDOMIZE-IN-PLACE](#612-randomize-in-place)
- [7. ç»åæ¹ç¨çè¿ä¼¼ç®æ³](#7-ç»åæ¹ç¨çè¿ä¼¼ç®æ³)
- [8. æ¦çåæä¸æç¤ºå¨åéä¾å](#8-æ¦çåæä¸æç¤ºå¨åéä¾å)
- [8.1. çä¸çå](#81-çä¸çå)
- [8.2. åºå](#82-åºå)
- [9. æè¿åæ](#9-æè¿åæ)
- [9.1. èååæ(aggregate analysis)](#91-èååæaggregate-analysis)
- [9.2. æ ¸ç®æ³ (accounting method)](#92-æ ¸ç®æ³-accounting-method)
- [9.3. å¿è½æ³(potential method)](#93-å¿è½æ³potential-method)
# 1. ç®æ³
å®ä¹è¯å¥½ç计ç®è¿ç¨,åè¾å
¥,并产çè¾åº. å³ç®æ³æ¯ä¸ç³»åçè®¡ç®æ¥éª¤,å°è¾å
¥æ°æ®è½¬å为è¾åºç»æ
# 2. å¯ä»¥è§£å³åªäºç±»åçé®é¢
* å¤§æ°æ®çåå¨,以åå¼ååºè¿è¡è¿æ¹é¢æ°æ®åæçå·¥å
·
* ç½ç»æ°æ®çä¼ è¾,寻路, æç´¢
* çµååå¡å¯ç , (æ°å¼ç®æ³,æ°è®º)
* èµæºåé
,æå¤§æç
* ...
# 3. ç®æ³åæ
è¡¡éç®æ³çä¼å£

* $\omicron,O,\Omega,\Theta$
* æåæ
åµ, å¹³åæ
åµ
* å¢é¿çé级$ O(1),O(logn), O(n), O(n^k), O(a^n) $
# 4. ç®æ³è®¾è®¡
## 4.1. åæ²»(divide and conquer)
ç»æä¸æ¯éå½ç,
æ¥éª¤: åè§£,è§£å³, åå¹¶
eg å¿«æ,å½å¹¶æåº
# 5. éå½å¼
$T(n) = aT(\frac{n} {b})+f(n)$
## 5.1. ä»£æ¢æ³
### 5.1.1. æ¥éª¤
* çæµè§£çå½¢å¼
* ç¨æ°å¦å½çº³æ³æ¾åºå¸¸æ°
### 5.1.2. ä¾å
$T(n) = 2T(\frac{n} {2})+n$
çæµ$T(n) = O(nlogn)$
è¯æ $ T(n)\leqslant cnlogn$
å½çº³å¥ åº n=2,3
å½çº³å设 $T(\frac{n} {2}) \leqslant \frac{cn}{2}$
éå½
$
\begin{aligned}
T(n) &\leqslant 2c\frac{n}{2}log(\frac{n}{2}) + n \leqslant cnlog(\frac{n}{2}) \\
\end{aligned}
$
### 5.1.3. æ¾ç¼©
å¯¹äº $T(n) = 2T(\frac{cn}{2}) + 1$
妿 ç´æ¥çæµ $T(n) = O (n)$ ä¸è½è¯æ,
èä¸ä¸è¦çæµæ´é«çç $O (n^2)$
å¯ä»¥æ¾ç¼©ä¸º n-b
### 5.1.4. æ¹ååé
å¯¹äº $ T(n) = 2T(\sqrt{n})+logn $
å¯ä»¥ 令 `m = logn`, å¾å°
$T(2^m) = 2T(m^{\frac{m}{2}}) + m $
令 $S(m) = T(2^m)$
å¾å° $ S(m) = 2S(\frac{m}{2}) + m $
## 5.2. é彿
ä¾å¦ $T(n) = 3T(\frac{n}{4}) + c n^2$
ä¸å¦¨å设 n 为4çå¹, åæå¦ä¸é彿

æ¯ä¸ªç»ç¹æ¯ä»£ä»·, å°æ¯å±å èµ·æ¥å³å¯
## 5.3. ä¸»æ¹æ³(master method)
å¯¹äº $T(n) = aT(\frac{n} {b})+f(n)$
$$
\begin{aligned}
T(n)=\begin{cases}
\Theta(n^{log_b a}),\quad f(n)=O(n^{ {log_b a}-\epsilon}) \\
\Theta(n^{log_b a}logn),\quad f(n)=\Theta(n^{log_b a}) \\
\Theta(f(n)),\quad f(n)=\Omega(n^{ {log_b a}+ \epsilon}),af(\frac{n}{b})\leqslant cf(n) \\
\qquad \qquad \quad \text{å
¶ä¸å¸¸æ°c<1,åénä»»æå¤§} \\
unknown, \quad others
\end{cases}
\end{aligned}
$$
### 5.3.1. è®°å¿
ç´è§ä¸, æ¯è¾ $n^{log_b a}$ å $f(n)$, è°å¤§å°±æ¯è°,
è¿éç大æ¯å¤é¡¹å¼ä¸çæ¯è¾, 峿¯è¾æ¬¡æ°, è䏿¯æ¸è¿ä¸ç
æ¯å¦ $n$ ä¸ $nlogn$ æ¸è¿ä¸åè
大, ä½å¤é¡¹å¼ä¸æ¯ä¸è½æ¯è¾ç
### 5.3.2. è¯æ
#### 5.3.2.1. è¯æå½ n 为 b çæ£å广¶æç«
* ç¨é彿 å¯ä»¥å¾å° æ»ä»£ä»·ä¸º $\sum_{j=0}^{log_b n-1} a^j f(\frac{n}{b^j})$
* å³å®ä¸å¼çæ¸è¿ç
* ç»åå两ç¹
#### 5.3.2.2. åææ©å±è³æææ£æ´æ° n 齿ç«
ä¸»è¦æ¯åºç¨æ°å¦æå·§æ¥è§£å³ floor, ceiling 彿°çå¤çé®é¢
# 6. éæºç®æ³
## 6.1. éæºæåæ°ç»(shuffle)
### 6.1.1. PERMUTE-BY-SORTING
ç»åºåå§æ°ç», eg A={1,2,3}, éæ©éæºçä¼å
级 P={16,4,10}
åå¾åº B={2,3,1},å 为第äºä¸ª(2)ä¼å
级æå°, 为4, æ¥ç第ä¸ä¸ª,æå第1个.
ä¼å
级æ°ç»ç产ç, ä¸è¬å¨ RANDOM(1,n^3), è¿æ ·ä¼å
级åä¸ç¸åçæ¦çè³å°ä¸º 1-1/n
ç±äºè¦æåºä¼å
级æ°ç», æä»¥æ¶é´å¤æåº¦ $O(nlogn)$
妿ä¼å
级å¯ä¸, åæ¤ç®æ³å¯ä»¥ shuffle æ°ç»
åºè¯æ åæ ·æåçæ¦çæ¯ $\frac{1}{n!}$
### 6.1.2. RANDOMIZE-IN-PLACE
```python
# arr: array to be shuffled
n = len(arr)
for i in range(n):
swap(arr[i],arr[random(i,n-1)])
```
æ¶é´å¤æåº¦ $O(n)$
è¯æ
å®ä¹å¾ªç¯ä¸åå¼: 对æ¯ä¸ªå¯è½ç $A_n^{i-1}$ æå, å
¶å¨ arr[1..i-1] ä¸çæ¦ç为 $\frac{1}{A_n^{i-1}}$
åå§å: i=1 æç«
ä¿æ : å设 å¨ç¬¬ i-1 次è¿ä»£ä¹å,æç«, è¯æå¨ç¬¬ i 次è¿ä»£ä¹å, ä»ç¶æç«,
ç»æ¢: å¨ ç»æå, i=n+1, å¾å° æ¦ç为 $\frac{1}{n!}$
# 7. ç»åæ¹ç¨çè¿ä¼¼ç®æ³
* Stiring's approximation: $ n! \approx \sqrt{2\pi n}\left(\frac{n}{e}\right)^n$
* å¯¹äº $C_n^x=a$, æ $x=\frac{ln^2 a}{n}$
* å¯¹äº $C_x^n=a$, æ $x=(a*n!)^{\frac{1}{n}}+\frac{n}{2}$
# 8. æ¦çåæä¸æç¤ºå¨åéä¾å
## 8.1. çä¸çå
æç¸åçç§éæºæå° b 个çåé,é®å¨æ¯ä¸ªçåéè³å°æä¸ä¸ªçä¹å,å¹³åè³å°è¦æå¤å°ä¸ªç?
ç§°æå
¥ä¸ä¸ªç©ºç为å»ä¸, 峿±åå¾ b 次å»ä¸çæ¦ç
设æ n 次, 称第 i ä¸ªé¶æ®µå
æ¬ç¬¬ i-1 次å»ä¸å° 第 i 次å»ä¸çç, å第 i 次å»ä¸çæ¦ç为 $p_i=\frac{b-i+1}{b}$
ç¨ $n_i$表示第 i é¶æ®µçæçæ°,å $n=\sum_{i=1}^b n_i$
ä¸ $n_i$æä»å ä½åå¸, $E(n_i)=\frac{b}{b-i+1}$,
åç±ææççº¿æ§æ§,
$$
E(n)=E(\sum_{i=1}^b n_i)=\sum_{i=1}^b E(n_i)=\sum_{i=1}^b \frac{b}{b-i+1}=b\sum_{i=1}^b \frac{1}{i}=b(lnb+O(1))
$$
è¿ä¸ªé®é¢å被称为 èµ å¸æ¶éè
é®é¢(coupon collector's problem),å³éé½ b ç§ä¸åçèµ å¸,å¨éæºæ
åµä¸å¹³åéè¦ä¹° blnb å¼
## 8.2. åºå
æ n 次硬å¸, ææçå°çè¿ç»æ£é¢ç次æ°
çæ¡æ¯ $\Theta(logn)$
è®° é¿åº¦è³å°ä¸º k çæ£é¢åºåå¼å§ä¸ç¬¬ i 次æ, ç±äºç¬ç«, ææ k æ¬¡ææ·é½æ¯æ£é¢ç æ¦ç为
$P(A_{ik})=\frac{1}{2^k}$,å¯¹äº $k=2\lceil lgn\rceil$




# 9. æè¿åæ
## 9.1. èååæ(aggregate analysis)
ä¸ä¸ª n 个æä½çåºåæåæ
åµä¸è±è´¹çæ»æ¶é´ä¸º$T(n)$, å卿åæ
åµä¸, æ¯ä¸ªæä½çæè¿ä»£ä»·ä¸º $\frac{T(n)}{n}$
妿 ä¸ç push, pop æä½é½æ¯ $O(1)$, å¢å ä¸ä¸ªæ°æä½ `multipop`,
```python
def multipop(stk,k):
while not stk.empty() and k>0:
stk.pop()
k-=1
```
multipop çæ¶é´å¤æåº¦ä¸º min(stk.size,k), æåæ
åµä¸º $O(n)$, å n 个å
å« push pop multipop çæä½åçæåæ
嵿¯ $O(n^2)$, 并䏿¯è¿æ ·, 注æå°, å¿
é¡»æ 䏿å
ç´ , å pop, æä»¥ push æä½ä¸pop æä½(å
å« multipopä¸çpop), 个æ°ç¸å½, æä»¥ å®é
ä¸åºä¸º $O(n)$, æ¯ä¸ªæä½çæè¿ä»£ä»· 为$O(1)$
## 9.2. æ ¸ç®æ³ (accounting method)
对ä¸åæä½èµäºä¸åè´¹ç¨ cost (称为æè¿ä»£ä»· $c_i'$), å¯è½å¤äºæè
å°äºå
¶å®é
代价 $c_i$
å½ $c_i'>c_i$, å° $c_i'-c_i$( `credit`) åå
¥æ°æ®ç»æä¸çç¹å®å¯¹è±¡.. 对äºåç» $c_i'