การวเคราะหอลกอรทมการวเคราะหอลกอรทม
หวขอหวขอ การวเคราะหอลกอรทม
แบบทดลอง และแบบคณตวเคราะห
ร ร ส ฐ การนบจานวนการทางานของคาสงพนฐาน
อตราการเตบโตของฟงกชน อตราการเตบโตของฟงกชน
สญกรณเชงเสนกากบ
การวเคราะหการทางาน แบบลาดบ แบบเลอกทา แบบวงวน แบบเรยกซา แบบลาดบ, แบบเลอกทา, แบบวงวน, แบบเรยกซา
ขนตอนการออกแบบอลกอรทมขนตอนการออกแบบอลกอรทม
เร ม
เรม
มปญหา
หาวธแกไข
ยอมรบ หมด ปรบขอกาหนดN YยอมรบN
ได ? หวง?ร นของปญหา
Y
ยอมรบได ?
จบ
Y
การวเคราะหอลกอรทมการวเคราะหอลกอรทม เพอศกษาประสทธภาพของอลกอรทม
เวลาการทางาน ปรมาณหนวยความจาทใชในการทางาน ปรมาณหนวยความจาทใชในการทางาน
จะเนนวเคราะหเฉพาะเวลาการทางาน
นรทางา
ลาการ
เวล
ปรมาณขอมล
การวเคราะหอลกอรทมการวเคราะหอลกอรทม Mathematical Analysisy
Experimental analysisป ป โป แปลงอลกอรทมเปนโปรแกรม
สงทางานกบขอมลทดสอบ จบเวลาการทางาน บนทกผล บนทกผล วเคราะหหาความสมพนธของเวลาการทางานกบปรมาณขอมลเวลาการทางานกบปรมาณขอมล
Selection SortSelection Sort
selectionSort( d[1..n] ) {for (k = n; k > 1; k--) {maxI = 1for (i = 2; i <= k; i++)if (d[i] > d[maxI]) maxI = i
d[k] d[maxI]}
}
Selection Sort (Selection Sort (ภาษา ภาษา C)C)
void selectionSort(int d[] int n) {void selectionSort(int d[], int n) {int k, i;for (k = n - 1; k > 0; k--) {for (k = n 1; k > 0; k ) {int maxI = 1;for (i = 0; i <= k; i++)for (i 0; i < k; i++)if (d[i] > d[maxI]) maxI = i;
int t = d[k]; [ ];d[k] = d[maxI];d[maxI] = t;[ ]
}}
เขยนโปรแกรมทดลองจบเวลาเขยนโปรแกรมทดลองจบเวลา#include <stdio.h>#include <stdlib.h>#include <windows.h>
int main(int argc char *argv[]) {int main(int argc, char *argv[]) {int i, k, n, repeat = 10;for( n = 0; n<=20000; n+=2000) {
int *d = malloc( n * sizeof(int) );long sum = 0;for (k=0; k<repeat; k++) {for (k=0; k<repeat; k++) {for (i=0; i<n; i++) d[i] = i; long start = GetTickCount();selectionSort(d, n);sum += GetTickCount() - start;
}}printf("%d \t %f \n", n, (float)sum/repeat);
}system("PAUSE"); return 0;
}
Selection Sort (Selection Sort (ภาษา ภาษา Java)Java)
static void selectionSort(int[] d) {static void selectionSort(int[] d) {for (int k = d.length-1; k > 0; k--) {int maxI = 1;int maxI = 1;for (int i = 0; i <= k; i++)if (d[i] > d[maxI]) maxI = i;if (d[i] > d[maxI]) maxI i;
int t = d[k];d[k] = d[maxI];[ ] [ ];d[maxI] = t;
}}}
เขยนโปรแกรมทดลองจบเวลาเขยนโปรแกรมทดลองจบเวลาpublic class TestSelectionSort {public static void main(String[] args) {public static void main(String[] args) {
int repeat = 10;for (int n = 0; n <= 20000; n += 2000) {int[] d = new int[n];long sum = 0;for (int k 0; k < repeat; k++) {for (int k = 0; k < repeat; k++) {
for (int i = 0; i < n; i++) d[i] = i;long start = System.currentTimeMillis();g yselectionSort(d);sum += System.currentTimeMillis() - start;
}}System.out.printf("%d \t %f \n",
n, (double)sum/repeat);, ( ) p )}
} for (int i = 0; i < 10000; i++)l ti S t( i t[1])selectionSort(new int[1]);
สงทางาน สงทางาน + + บนทกผลบนทกผล ภาษา C : ใช GNU-C Compiler (3.4.2)p ( )
ภาษา Java : ใช Java 6 (build 1.6.0_14-b08)i t t d l d interpreted-only mode (option –Xint ตอนทางาน) n GNU C
Java(Native)
Java (interpret)
0 0 0 0 0 0 Compilation to native code(บงคบ compile ดวยการเรยก
0 000 )
0 0 0.0 0.02000 9.4 6.3 90.64000 39 25.0 359.4
เมทอดซา ๆ สก 10,000 ครง)
Lenovo X200
4000 39 25.0 359.46000 84.4 54.6 806.28000 151.6 98.5 1425.0 Lenovo X200
Intel CoreTM 2 DuoP8400 @ 2 26GHz
10000 237.5 156.2 2231.212000 343.7 220.4 3190.614000 467 2 300 0 4359 5P8400 @ 2.26GHz
3GB RamWi d XP
14000 467.2 300.0 4359.516000 610.9 393.7 5675.018000 773.5 500.0 7160.6Windows XP 18000 773.5 500.0 7160.620000 957.8 614.0 8862.3
เปรยบเทยบเวลาการทางานเปรยบเทยบเวลาการทางาน10000
Selection SortmSec.
8000
9000Selection Sort
t n2
6000
7000
GNU C
4000
5000Java
2000
3000
4000(Native)
Java (interpret)
0
1000
2000 (interpret)
0
ปรมาณขอมล
ใชจานวนการทางานของคาสงแทนเวลาใชจานวนการทางานของคาสงแทนเวลา static int counter = 0;static void selectionSort(int[] d) {( [] ) {counter = 1 + d.length + d.length - 1;for (int k = d.length-1; k > 0; k--) {gint maxI = 1;counter += 2 + k+2 + k+1;for (int i = 0; i <= k; i++) {counter += 1;if (d[i] > d[maxI]) {maxI = i; counter += 1;
}}
3counter += 3;int t = d[k]; d[k] = d[maxI]; d[maxI] = t;
}}}
เขยนโปรแกรมทดลองนบคาสงเขยนโปรแกรมทดลองนบคาสงpublic class TestSelectionSort {public static void main(String[] args) {public static void main(String[] args) {
int repeat = 10;for (int n = 0; n <= 20000; n += 2000) {int[] d = new int[n];long sum = 0;for (int k 0; k < repeat; k++) {for (int k = 0; k < repeat; k++) {
for (int i = 0; i < n; i++) d[i] = i;counter = 0;selectionSort(d);sum += counter;
}}System.out.printf("%d \t %f \n",
n, (double)sum/repeat);, ( ) p )}
}
นบจานวนการทางานของคาสงนบจานวนการทางานของคาสง700000000
Selection Sort#operations
600000000Selection Sort
t n2
400000000
500000000
300000000counter
100000000
200000000
0
100000000
ปรมาณขอมล
นบเฉพาะคาสงตวแทนนบเฉพาะคาสงตวแทน static int counter = 0;static void selectionSort(int[] d) {for (int k = d.length-1; k > 0; k--) {gint maxI = 1;for (int i = 0; i <= k; i++) {counter += 1;if (d[i] > d[maxI]) {maxI = i;
}}int t = d[k]; d[k] = d[maxI]; d[maxI] = t;
}}}
นบทกคาสง นบทกคาสง vs. vs. นบคาสงตวแทนนบคาสงตวแทน700000000
Selection Sort600000000
Selection Sortt n2
400000000
500000000
ll i300000000
all operations
l b t
100000000
200000000only barometer operation
0
100000000
0
2000
4000
6000
8000
1000
0
1200
0
1400
0
1600
0
1800
0
2000
0
Mathematical AnalysisMathematical Analysis ไมตองเขยนเปนโปรแกรม ไมตองส งทางานจรง ไมตองวาดกราฟ วเคราะหจากอลกอรทม
selectionSort( d[1 n] ) {selectionSort( d[1..n] ) {for (k = n; k > 1; k--) {maxI = 1maxI = 1for (i = 2; i <= k; i++)if (d[i] > d[maxI]) maxI = iif (d[i] > d[maxI]) maxI i
d[k] d[maxI]}}
}k 1
n
k
1 n
k 1
1n
j2
)1(
nn22
2 nn
k 2i 2
k 2
1j 2 22
คาสงตวแทนตองเปนคาสงพนฐานคาสงตวแทนตองเปนคาสงพนฐาน คาส งพนฐาน คอคาส งทฐ
ใชเวลาการทางานไมเกนคาคงตวคาหนง ใชเวลาการทางานไมแปรตามขนาดของ input ใชเวลาการทางานไมแปรตามขนาดของ input เปนคาสงพน ๆ เชน + - * / if เปรยบเทยบ return break...
selectionSort( d[1..n] ) {for ( k = n; k > 1; k-- ) {m = maxI(d, k)m maxI(d, k)d[k] d[m]
}}}
การวเคราะหอลกอรทมการวเคราะหอลกอรทม เวลาการทางานแปรตามจานวนการทางานของคาส ง
จานวนการทางานของคาส ง แปรตามจานวนการทางานของคาส งตวแทนจานวนการทางานของคาสงตวแทน
เพอความงาย เราวเคราะหอลกอรทมเชงเวลาดวย เพอความงาย เราวเครา หอลกอรทมเชงเวลาดวย การหาความสมพนธของ จานวนการทางานของคาสงตวแทนจานวนการทางานของคาสงตวแทน กบปรมาณขอมล
จานวนการทางานของคาสงตวแทน t n2ของคาสงตวแทน(เวลาการทางาน)
ปรมาณขอมล
วดปรมาณขอมลขาเขาอยางไร วดปรมาณขอมลขาเขาอยางไร ?? ลาบาก : ถาวดจากขนาด (จานวนบต) ของ input
( ) p
งายขน : พจารณาวาขนาดของ input แปรตามคาอะไรของ inputอะไรของ input
ตวอยาง : sort( d[1..n] ) ตวอยาง : sort( d[1..n] ) input เปนอาเรยของจานวน n ชอง แตละจานวนมคาจากด (int ในจาวามคา 231 ถง 231 1) แตละจานวนมคาจากด (int ในจาวามคา –231 ถง 231 – 1) ดงนน n แทนปรมาณขอมล
ตวอยาง : shortestPath( V, E, w, s ) input เปนกราฟถวงนาหนก input เปนกราฟถวงนาหนก ขนาดของกราฟแปรตามจานวนปมและจานวนเสนเชอม
|V| + |E| ป ดงนน |V| + |E| แทนปรมาณขอมล
เปรยบเทยบผลการวเคราะหเปรยบเทยบผลการวเคราะหfor (i = 1; i <= n; i++)for (j = i+1; j <= n; j++)sum += cosine(d[i][j])*i;
)(1 ininnnnn n
)1( 22
1111 1
nnnn
iiii ij
222)(2n
nn n แบบใดเรวกวา ?2
11 11 nn
ii j
for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)(j ; j ; j )sum += j;
เปรยบเทยบเวลาการทางานเปรยบเทยบเวลาการทางานfor (i = 1; i <= n; i++)for (j = i+1; j <= n; j++)sum += cosine(d[i][j])*i;
2 nn
จานวนการทางานของคาสง : นอยกวา
22 คาสงตวแทน : ใชเวลามากกวา
สรปลาบากวาแบบใดเรวกวา
2n จานวนการทางานของคาสง : มากกวา
สรปลาบากวาแบบใดเรวกวา
n จานวนการทางานของคาสง : มากกวาคาสงตวแทน : ใชเวลานอยกวา
for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)(j ; j ; j )sum += j;
เปรยบเทยบอตราการเตบโตเปรยบเทยบอตราการเตบโต2 nn2
22nn
2nn
1020
100400
45190เท
า
เทา
เทา
4 4.224080
16006400
7803160
ทละ
2
ทละ
4
ทละ
4 44
4.114.05
160320640
25600102400409600
1272051040
204480มขนท
มขนท
มขนท
444
4.034.014 01640
1280409600
1638400204480818560เพ
ม
เพม
เพม 4
44.014.00
สรปไดวาทงคมอตราการเตบโตเทากน
เปรยบเทยบอตราการเตบโตเปรยบเทยบอตราการเตบโต2n
1000nn 10n
1020
100200
14า าา 2 4
60000
70000
10n โตชากวา n2/10004080
400800
1664
ะ 2 เท
ะ 4 เท
ะ 2 เท
22
4450000
60000 10n โตชากวา n /1000
160320640
160032006400
25610244096ข
นทละ
ขนทละ
ขนทละ 2
22
444
30000
40000
เมอ n มากพอควรn2/1000 จะมากกวา 10n640
12802560
64001280025600
40961638465536
เพมข
เพมข
เพมข
222
44410000
20000n2/1000 จะมากกวา 10n
25605120
2560051200
65536262144
22
440
10000
10 20 40 80 160 320 640 1280 256010 20 40 80 160 320 640 1280 2560
อตราการเตบโตอตราการเตบโต5E+17
4E+17
4.5E+17
n^nnn
3E+17
3.5E+17 n!
2^n2n
2E+17
2.5E+17
2 n
n^3
^2
n3
2
1E 17
1.5E+17
2E+17 n^2
n log n
n2
5E+16
1E+17 n
log n0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
อตราการเตบโตอตราการเตบโต1.4E+12
1.2E+12
!
8E+11
1E+12n!
2^n2n
3
6E+11
8E+11 n^3
n^2
n3
n2
4E+11n log n
n2E+11
n
log n
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
อตราการเตบโตอตราการเตบโต35000
30000
20000
25000 2^n
n^3
2n
n3
15000
20000 n 3
n^2
l
n2
10000
n log n
n
5000 log n
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
อตราการเตบโตอตราการเตบโต4000
3000
3500
2500
3000
n^3n3
2
2000n^2
n log n
n2
1000
1500n
logn
500
log n
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
อตราการเตบโตอตราการเตบโต250
200
150 n^2n2
100
n 2
n log n
50
100 n
log n50
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
อตราการเตบโตอตราการเตบโต20
16
18
12
14
8
10n log n
n
4
6
8log n
2
4
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
ทบทวนสตรคณตศาสตรทใชบอยทบทวนสตรคณตศาสตรทใชบอย
)1( nnn
2)1(
1
nnk
k 1k
S = n + (n-1) + + 1Sn n + (n 1) + ... + 1Sn = 1 + 2 + ... n
2S = n(n+1)2Sn = n(n+1)Sn = n(n+1)/2
)21()1(
nnk
n)21(
23
kk
ทบทวนสตรคณตศาสตรทใชบอยทบทวนสตรคณตศาสตรทใชบอย
bb lll a
baab logloglog
baba logloglog
log na = a log n
an bb na loglog bb na gg nba loglog an loglog abnloglog
n 2loglog 222
bba glog an bb loglog b
bn glog
nnn 2loglog 222
ทบทวนสตรคณตศาสตรทใชบอยทบทวนสตรคณตศาสตรทใชบอยจานวนเตม n หารดวย 2 (ปดเศษทง) กครง จงจะเทากบ 1จานวนเตม n หารดวย 2 (ปดเศษทง) กครง จงจ เทากบ 1
31 15 7 3 132 16 8 4 2 1
1kn 2k = n, log2 2k = log2 n, k = log2 n
32 16 8 4 2 1
2k 2 n, log2 2 log2 n, k log2 n
จานวน ตม หารดวย 3 (ปด ศษทง) กครง จงจะ ทากบ 1จานวนเตม n หารดวย 3 (ปดเศษทง) กครง จงจะเทากบ 1log3 nlog3 n
จานวนเตม n หารดวย 4 (ปดเศษทง) กครง จงจะเทากบ 1( )
log4 n
ทบทวนสตรคณตศาสตรทใชบอยทบทวนสตรคณตศาสตรทใชบอย11
xnnk 0 1 +1
10
x
xk
k 20 + 21 + ... + 2n = 2n+1 – 1
n
kxx )1( n
kn
k xxxk 0
)( kk 00nn
k
k
k
k xx00
1
kk 00
n
kn
j xx1
kj
xx01
1n 11 nx
ทบทวนสตรคณตศาสตรทใชบอยทบทวนสตรคณตศาสตรทใชบอย
k 1
xx
k
k
11
0| x | < 1
11
xxnn
k xk 11
10
x
xk xx
xk
110
n
k2
2 k 211
k
k
02
02
k
k 22
111
211
1
1 ตวอยาง
221 n
k 311 n
k0k 230
k
k
สรปอกครงสรปอกครงan bb loglog 11
xnnkan bb na loglog
11
0
x
xxk
k
)1( nnk
n
k 121
k x
xk
k
11
0
| x | < 1baab logloglog
babaab
logloglog
logloglog
bab
logloglog
f(n) vs. g(n)f(n) vs. g(n)
( )f n0 f(n) โตชากวา g(n) f(n) ≺ g(n)
( )lim( )n
f ng n
f(n) โตเรวกวา g(n) f(n) ≻ g(n)( )g
c f(n) โตเทากบ g(n) f(n) ≍ g(n)
c คอคาคงตวทไมใช 0
f( ) ( )f(n) ≼ g(n) f(n) ≽ g(n)
f(n) โตไมเรวกวา g(n) f(n) โตไมชากวา g(n)f(n) โตไมเรวกวา g(n) f(n) โตไมชากวา g(n)
ตวอยางตวอยาง
)(10)(2nf 2
1000)(,10)( ngnnf 10n โตชากวา n2/1000
10lim2nn
n)()(lim
ngnf
n nn
10000lim
= 0
1000nn)(ngn nn
22 10)(,52)( nngnnnf 2n2 – 5n โตเทากบ 10n210)(,52)( nngnnnf
2 52 nn
2 52 nn 152
2n 5n โตเทากบ 10n
21052lim
nnn
n
22 105
102lim
nn
nn
n 51
105
102lim
nn
l'Hôpital'sl'Hôpital's RuleRule ถา f(n) และ g(n) เปนฟงกชนทหาอนพนธได โดยทf( ) g( )
)(lim,)(lim ngnfnn nn
และหาคาของ ได)(
)(limngnf
n
)(ngn
จะไดวา )(lim)(lim nfnf จะไดวา
)(lim
)(lim
ngng nn
ตวอยางตวอยาง
( ) l ( )f log n โตชากวา n0 5( ) log ( )f n n g n n
loglim n lnlim n
log n โตชากวา n0.5
ใ limn n
1 ln n
limln10n n
สามารถแสดงใหเหนวา
1 lnlimln10 n
nn
1 1 n
(log n)100 โตชากวา n0.005
1 1lim
ln10 1 2n
nn
1 2limln10 n n
0
ตวอยางตวอยาง
l ≺ ≺ ≺ l ≺ 2 ≺ 3 ≺ 2n ≺ nlog n ≺ ≺ n ≺ n log n ≺ n2 ≺ n3 ≺ 2n ≺ nnn
n!log n5 = 5log n
n2, 10n2, 2n2 – 10n, 5n2 + 8
มอตราการเตบโตเทากนหมด
สญกรณเชงเสนกากบสญกรณเชงเสนกากบselectionSort( d[1..n] ) {f (k k > 1 k ) {for (k = n; k > 1; k--) {maxI = 1for (i 2; i < k; i++)for (i = 2; i <= k; i++)if (d[i] > d[maxI]) maxI = i
d[k] d[maxI]d[k] d[maxI]}
}}
n
k
n
1n )1( nn 2 nn
k 2i 2
1
k
k2
1
1j
j2
)1(
nn22nn
k 2 i 2 k 2 1j
= (n2 )Selection sort ใชเวลาเปน (n2 )
สญกรณเชงเสนกากบสญกรณเชงเสนกากบ
little – o little o
little – omega little omega
Big – O g
Big – Omega
Big – Theta
Asymptotic NotationsAsymptotic Notations
little little -- oo
o(g(n)) = { f(n) | f(n) ≺ g(n) } โตชากวาo(g(n)) = { f(n) | f(n) ≺ g(n) } โตชากวา
n0.98 o(n)106 o(n)10 o(n)
( )log n o(n)
little little -- omegaomega
(g(n)) = { f(n) | f(n) ≻ g(n) } โตเรวกวา(g(n)) = { f(n) | f(n) ≻ g(n) } โตเรวกวา
n1.001 (n)n2 (n)n (n)
( )2n (n)
Big Big -- ThetaTheta
(g(n)) = { f(n) | f(n) ≍ g(n) } โตเทากน(g(n)) = { f(n) | f(n) ≍ g(n) } โตเทากน
10 log n (log n)2 + log n5 (log n)2 + log n (log n)
( )ln n (log n) 12ln/lnlog2
nn2lnlnln nn
Big Big -- OO
O(g(n)) = { f(n) | f(n) ≼ g(n) } โตไมเรวกวาO(g(n)) = { f(n) | f(n) ≼ g(n) } โตไมเรวกวา
32nln 3 O(n2) ln 3 < 1.099
n2 + 7n O(n2)n + 7n O(n )2log n O(n2)
Big Big -- OmegaOmega
(g(n)) = { f(n) | f(n) ≽ g(n) } โตไมชากวา(g(n)) = { f(n) | f(n) ≽ g(n) } โตไมชากวา
10n3 + 5n (n log n)20n log n + 2n (n log n)
10n 5n (n log n)
( l )20n log n + 2n (n log n)
(n log n)nn
สญกรณเชงเสนกากบสญกรณเชงเสนกากบ
o(g(n)) = { f(n) | f(n) ≺ g(n) } โตชากวา o(g(n)) { f(n) | f(n) ≺ g(n) } โตชากวา
(g(n)) = { f(n) | f(n) ≻ g(n) } โตเรวกวา(g( )) { f( ) | f( ) g( ) }
(g(n)) = { f(n) | f(n) ≍ g(n) } โตเทากน
= O(g(n)) (g(n))
O(g(n)) = { f(n) | f(n) ≼ g(n) } โตไมเรวกวา
( ( )) ( ( )) = o(g(n)) (g(n))
(g(n)) = { f(n) | f(n) ≽ g(n) } โตไมชากวา (g(n)) = { f(n) | f(n) ≽ g(n) } โตไมชากวา
= (g(n)) (g(n))(g(n)) (g(n))
Big Big –– OO : : ขอบเขตบนขอบเขตบน O(g(n)) = { f(n) | f(n) ≼ g(n) }
O(g(n)) = { f(n) | มจานวน c > 0 และ n0 0
ททาให f(n) cg(n) เมอ n n0 }
g(n) เปนขอบเขตบนของ f(n) cg(n)
g(n)
g( ) f( )f (n)g(n)
f (n) O(g(n))
nn0
Big Big –– Omega : Omega : ขอบเขตลางขอบเขตลาง (g(n)) = { f(n) | f(n) ≽ g(n) }
(g(n)) = { f(n) | มจานวน c > 0 และ n0 0
ททาให f(n) cg(n) เมอ n n0 }
g(n) เปนขอบเขตลางของ f(n)f (n)
cg(n)g( ) f( )
f (n) (g(n))
nn0
Big Big –– ThetaTheta : : ขอบเขตกระชบขอบเขตกระชบ (g(n)) = { f(n) | f(n) ≍ g(n) }
(g(n)) = { f(n) | มจานวน c1, c2 > 0 และ n0 0
ททาให c1g(n) f(n) c2g(n) เมอ n n0 }
g(n) เปนขอบเขตกระชบของ f(n) c2g(n)f (n)
c1g(n)g( ) f( ) 2g( )
1
f (n) (g(n))
nn0
สญกรณเชงเสนกากบสญกรณเชงเสนกากบ เขาใจพฤตกรรมเมอพารามเตอรมคามากฤ 5n3 – 2n2 – nlog n +7 ( n3 )
วเคราะหไดงาย
4
1n n
n n
1 n
2 2 3 2
1i ij
i j1 1
1
i
n1
= n2 = O(n2)
จดกลมฟงกชนตามอตราการเตบโต( ) ( l ) ( ) (1), ( log n ), ( n ), ...
วเคราะหงายขนดวย วเคราะหงายขนดวย , , , ,
1
k
kn i 1 2 3 4 5 6 7 8 9 10 11 12จงแสดงวา 1
1 2
k
ini 1 2 3 4 5 6 7 8 9 10 11 12
0 0 0 0 0 0 0 0 0 6 6 6
2 2
k kn ni n
knkn ni
4/
22/
21 12 2i i
n
k
ii 11 22
kn n
4/
1
k
in
i
n
1 4
1kn 1
4
kn
1O kn
4
1 kn
ตวอยางตวอยาง
จงแสดงวา
)(O2log
hnn
จงแสดงวา )(O
20nh
hh
ll
n
hh
n
hh
hnhn 22 log
0
log
0 22 hh 00 22
hnxxxh 11 2
0 2h
hnxxxx
h
11
0
1 1h
2 O( )n n 20
1
11x
hxh
h
21 xxhxh
22/112/1
21
hh
2
2/12/1
2 0 1 xh 0 2/112 h 2/1
ตวอยาง ตวอยาง : log: log22 n!n!22
n! = n (n-1) ... 2 1 n n ... n n = nn
log2 n! log2 nn = n log2 n เมอ n 1ขอบเขตบน
n! = n (n-1) ... (n/2) (n/2-1) ... 2 1 n/2 n/2 ... n/2 1 ... 1 1ขอบเขต n/2 n/2 ... n/2 1 ... 1 1
(n/2)n/2
log n! (n/2) log (n/2)
ขอบเขตลาง
log2 n! (n/2) log2 (n/2) = (n/2) log2 n – (n/2)
0 4 l 25 0.4n log2 n เมอ n 25
0 4 l l ! l 250.4n log2 n log2 n! n log2 n เมอ n 25
log2 n! (n log n)
Harmonic Number : Harmonic Number : HHnn = = 11/k/k11
nn
88 11 dxn 1
12
12
dxxkk
88 11
nk
nk
ln11)1ln(1
213 1
4 15 1
6 17
18
12
1111 dxxkk
88
0 1 2 3 4 5 6 7 88ln118
1
k k11 8ln119ln
8
1
k k)(ln1 nk
n
12
13 1
98 11 dxk
1k1 kk
3 14 1
5 16 1
718 1
9
11 xkk
9ln18
0 1 2 3 4 5 6 7 8 99ln
1
k k
การเขยนฟงกชนในรปของ การเขยนฟงกชนในรปของ , , แบบงายๆแบบงายๆ ผลบวกของพจนหลายพจน เลอกพจนทโตเรวสด
ขอสงเกต cg(n) = (g(n)) เมอ c เปนคาคงตว cg(n) = (g(n)) เมอ c เปนคาคงตว loga n = (logb n) เพราะ loga n = (logab) logb n .
เชน ( ( )) ( )t n t n
เชน
aknk + ak-1nk-1 +...+ a0 = (nk)0.001n3 + 7000n2 – 11 = (n3) log n10 = 10(log n) = (log n) log2 n10 = 10(log2 n) = (log n) . 2( ) ( 1) / 2 ( )
n ni i n n n
1 1( ) ( ) ( )
i i
อตราการเตบโตอตราการเตบโต constant : ( 1 ) ( ) logarithmic : ( log n ) polylogarithmic : ( log c n ) c 1 polylogarithmic : ( log c n ) , c 1 sublinear : ( na ) , 0 < a < 1 linear : ( n ) quadratic : ( n2 )quad at c ( n ) polynomial : ( nc ) , c 1 exponential : ( n ) > 1 exponential : ( cn ) , c > 1
การวเคราะหอลกอรทมการวเคราะหอลกอรทมการทางานแบบลาดบ
การเลอกทา
การทางานแบบวงวน
การทางานแบบเรยกซาการทางานแบบเรยกซา
การทางานแบบลาดบการทางานแบบลาดบ
( f1(n) )1( g1(n) )
h(n)( f2(n) )
h(n)( f2( ) )
( g2(n) )
h(n) O( f1(n) + f2(n) )h( ) ( ( ) ( ) )h(n) ( g1(n) + g2(n) )
การทางานแบบลาดบการทางานแบบลาดบ
( n2 )( n )
h(n)( n )
h(n)( )
( n )
h(n) O( n2 + n) = O( n2) h( ) ( ) ( )h(n) ( n + n) = ( n )
การทางานแบบลาดบการทางานแบบลาดบ
( n2 )( n2 )
h(n)( )
h(n)( n )
h(n) O( n2 )h( ) ( 2 )h(n) ( n2 )
การทางานแบบลาดบการทางานแบบลาดบ
( n )( n )
h(n)( n2 )
h(n)( )
( 1 )
h(n) O( n2 )h( ) ( )h(n) ( n )
การเลอกทาการเลอกทา
f1(n)f1(n)
f2(n) f3(n)
max( f1(n)+ f2(n) , f1(n)+ f3(n) )
การทางานแบบวงวนการทางานแบบวงวน
for (k = 1; k <= n; k++) {for (k = 1; k <= n; k++) {P(k)
}}
P(k) ใชเวลา t(k)P(k) ใชเวลา t(k)
n
n
kt )(k 1
)(
ตวอยาง ตวอยาง : for: for
for (k = 1; k <= n; k++) {for (k = 1; k <= n; k++) {process( d, k )
}}
process(d,k) ใชเวลา ( k2 )process(d,k) ใชเวลา ( k )
n
2
nk 2
k
k1
2 )(
k
k1
2
6
)12)(1( nnn 6
)( 3n )(n
ตวอยาง ตวอยาง : for: for
for (i = 1; i <= n; i++)for (i = 1; i <= n; i++)for (j = 1; j <= n; j++) sum += d[i][j]sum + d[i][j]
n n
n
i j1 1
)1(
i
n1
)(
n
n
2
i 1
)( 2n
ตวอยาง ตวอยาง : for: for
for (i = 1; i <= n; i++)for (i = 1; i <= n; i++)for (j = 1; j <= i; j++) sum += d[i][j]sum + d[i][j]
n i
)1( n
i)(
i j1 1
)1(
i
i1
)(
n
n
ii
1
)1(nn
i 1
)( 2n
2
)(n
ตวอยาง ตวอยาง : for: for
for (i = 2; i <= m-1; i++)for (i = 2; i <= m-1; i++)for (j = 3; j <= i; j++) sum += d[i][j]sum + d[i][j]
1
)1(m i
1
)(m
i
2 3
)1(i j
2
)(i
i
1m
1
2
m
ii
)(mim 2i
22
)(1
mii
)())(( 22 mmm
ตวอยาง ตวอยาง : Insertion Sort: Insertion SortinsertionSort( d[1..n] ) {for (k = 2; k <= n; k++) {t = d[k]f (j k 1 k 1 k ) {
(n)for (j = k-1; k >= 1; k--) {if (t >= d[j]) breakd[j+1] d[j] O(k)
n
d[j+1] = d[j]}d[j+1] t
( )k 2
d[j+1] = t}
} O(n2)}
kหาทแทรก
O(n )4,1,3,2,5
เรยงลาดบแลว ขอมลทเหลอ
k 1,4,3,2,51,3,4,2,51 2 3 4 5
ดนมาทางขวา 1,2,3,4,51,2,3,4,5
ตวอยาง ตวอยาง : while: whilelog10( n ) {
0c = 0while (n > 1) {n n / 1043 nn = n / 10c++
}43 1
10 10log nn
}return c
} (log n)
i = 0 j = n
} (log n)
i = 0, j = nwhile ( i < j ) {i += 134i += 1j -= 1
} (n)3247
} ( )
ตวอยาง ตวอยาง : Binary Search: Binary SearchbinarySearch( d[1..n], x ) {
1000left = 1, right = nwhile ( left <= right ) {
1000500125mid = (left + right) / 2
if (x = d[mid]) return mid1256231if (x < d[mid])
right = mid - 1l
311571nelse
left = mid + 1}
731
1
2 2log n
}return -1;
} O(log n)10
}right – left + 1 คอจานวนขอมลในชวงทสนใจคน
O(log n)g
คาของ right – left + 1 คอ n ในรอบแรก ลดลงรอบละครง
ตวอยาง ตวอยาง : GCD: GCD
gcd(a b) { a bถา a > b gcd(a, b) {
while (b > 0) {t = a mod b
34 2121 1313 8
ถา a > b สามารถแสดงวา a mod b < a/2 t a mod b
a = bb = t
13 88 55 3
a mod b < a/2 เสมอ
}return a
5 33 22 1
แสดงวา ทางานเปน O(log n) } 2 1
1 0เปน O(log n)
ให a > b1. ถา b a/2, จะได a mod b < a/2 (เพราะ a mod b < b)2 b /2 ไ /b 2 /b2. ถา b > a/2, จะได a/b < 2 ดงนน a/b = 1
a mod b = a – b a/b = a – b /2 /2< a – a/2 = a/2
การทางานแบบเรยกซาการทางานแบบเรยกซา
recursive( ) {recursive( ... ) {if ( ... ) return ...
( )... (...)
recursive( ... )...
t (...) ++recursive( ... ) ... +
t (...)...
}( )
t (n) = t(...)+...+t(...) + (...)t (n) t(...) ... t(...) (...)
ตวอยางตวอยาง : : การคนแบบทวภาคการคนแบบทวภาคbsearch( d[1..n], x, left, right ) {if (left > right) return -1mid = (left + right) / 2if ( d[ id]) idif (x = d[mid]) return midif (x < d[mid])
t b h( d l ft id 1)return bsearch( d, x, left, mid – 1)elsereturn bsearch( d x mid + 1 right )return bsearch( d, x, mid + 1, right )
}ให m = right – left + 1 คอจานวนขอมลในชวงทตองการคนให t(m) แทนเวลาการทางานในการเรยก bsearch ทชวงขอมล( )
ทตองการคนมจานวน m ตว จะไดวาt(m) = t(m/2) + (1) t(0) = (1)t(m) = t(m/2) + (1) , t(0) = (1)
tt((mm) = ) = tt((mm//22) + ) + ((11))(( )) (( )) (( ))
)1()(
mtt m)1(
2)(
tmt
m
k
k
1
1 12
)1(22 2
mtmt
mkm k
2
1
log12
)1(22 32
mtmt (2+log2m)(1)
22 32
...
( g2 ) ( )
t(m) = (log m)
mm
t(m) (log m)กรณหาไมพบ
)1(22 1
kkmtmt
กรณทวไป binary searchกรณทวไป binary searcht(m) = O(log m)(1)
ตวอยางตวอยาง : Tower of Hanoi: Tower of Hanoi
hanoi(n, a, b, c) {hanoi(n, a, b, c) {if (n == 0) returnhanoi(n - 1, a, c, b)( , , , )print("move ", n, a, "->", c) hanoi(n - 1, b, a, c)( , , , )
}
ให t(n) แทนเวลาการทางานของ hanoi(n, a, b, c) จะไดวา
( ) 2 ( 1) (1) (0) (1)t(n) = 2t(n – 1) + (1) , t(0) = (1)
t( ) (2n)t(n) = (2n)
tt((nn) = ) = 22tt((nn--11) + ) + ((11))(( )) (( )) (( ))t(n) = 2t(n – 1) + (1)
= 2(2t(n – 2) + (1)) + (1)= 4t(n – 2) + 2(1) + (1) 4t(n 2) + 2(1) + (1)= 4(2t(n – 3) + (1)) + 2(1) + (1)= 8t(n – 3) + 4(1) + 2(1) + (1)= 23t(n – 3) + 22(1) + 21(1) + 20(1)= 2 t(n – 3) + 2 (1) + 2 (1) + 2 (1)...= 2nt(n – n) + ... + 22(1) + 21(1) + 20(1)= (2n + + 22 + 21 + 20 )(1)= (2 + ... + 2 + 2 + 2 )(1)= (2n+1 – 1) (1)= (2n)
ภาระจรง กบ การเรยกซาภาระจรง กบ การเรยกซาDQ( n ) {if (n = 0) returnfor (i=1; i<=n; i++) ภาระจรงfor (j=1; j<=n; j++)print( i )
f (i 1 i< 2 i++)for (i=1; i<=2; i++)DQ( n/2 )
}การเรยกซา
}
2t(n) = 2t(n/2) + n2 แทนภาระจรง
แทนการเรยกซา
ขนาดขอมล กบ ภาระจรงขนาดขอมล กบ ภาระจรง
t(n) = 2t(n/2) + n2 t(n) = 2t(n/2) + n2t(n) = 2t(n/2) + n2 t(n) = 2t(n/2) + n2
( )2n (n)2
n/2 n/2 (n/2)2 (n/2)2ภาระจรง
การเรยกซาทขอมลม ภาระจรง
สะสมทขอมลม
ขนาดเลกลง ๆ
t(n/2) = 2t(n/22)+(n/2)2
ขนาดของขอมลลดลง ๆขนาดของขอมลลดลง ๆt(n) = 2t(n/2) + n2( ) ( )
nขนาดของขอมลทลดลง เมอปญหาเลกลง n
n/2 n/2เมอปญหาเลกลง
n/22 n/22 n/22 n/22 log2 n
n/23 n/23 n/23 n/23 n/23 n/23 n/23 n/23
... ... ... ... ... ... ... ... (1) (1) (1) (1) (1) (1) (1) (1)
2t(n/2) = 2t(n/4) + (n/2)2
t(n/4) = 2t(n/8) + (n/4)2( ) ( ) ( ). . .
Recursion TreeRecursion Tree : : ตนไมแสดงภาระจรงตนไมแสดงภาระจรง
t(n) = 2t(n/2) + n2
(n)2
( ) ( )
n(n)2ภาระจรงททา ในแตละระดบ
(n)2/2
(n)n
n/2 n/2
( )
(n/2)2 (n/2)2
ในแตละระดบ
( )
(n)2/22n/22 n/22 n/22 n/22
( )
(n/22)2 (n/22)2 (n/22)2 (n/22)2
(n)2/23n/23 n/23 n/23 n/23 n/23 n/23 n/23 n/23(n/23)2 (n/23)2 (n/23)2 (n/23)2 (n/23)2 (n/23)2 (n/23)2 (n/23)2
... ... ... ... ... ... ... ... ...(1) (1) (1) (1) (1) (1) (1) (1)
n
kn2log 2
2 ( n2 )n
kn2log
2
21
xx
k
k
11
0 k 0 21 < 2
k 0 2xk 10
Recursion TreeRecursion Tree : : ตวอยางตวอยางt(n) = 2t(n/2) + n
n
( ) ( )
n
n
n
n/2 n/2nn/22 n/22 n/22 n/22
n/23 n/23 n/23 n/23 n/23 n/23 n/23 n/23 n
... ... ... ... ... ... ... ... ...(1) (1) (1) (1) (1) (1) (1) (1)
nnnn
2
loglog
2
( n log n )k
20
g
( g )
Recursion TreeRecursion Tree : : ตวอยางตวอยางt(n) = 2t(n/2) + 111
xnnk
( ) ( )
1 11
1
0
x
xxk
k
1 1 2
1 1 1 1 4
1 1 1 1 1 1 1 1 8
... ... ... ... ... ... ... ... ...
nk
2l10
log
(1) (1) (1) (1) (1) (1) (1) (1)
n
k
k 2log10
02222
( n )12212 22 loglog1 nn
1212212
n
Recursion TreeRecursion Tree : : ตวอยางตวอยาง
(a+b) < 1t(n) = t(0.2n) + t(0.7n) + nt(n) = t(an) + t(bn) + nn n
(a+b) < 1( ) ( ) ( )t(n) t(an) t(bn) n
an bn (a+b)n
3 2b 2b b2 2b b2 b2 b3
a2n abn abn b2n (a+b)2n
(a+b)3na3n a2bn a2bn ab2n a2bn ab2n ab2n b3n... ... ... ... ... ... ... ... ...
(a+b)3n
n
kn
k bannbaloglog
)()(
(1) (1) (1) (1) (1) (1) (1) (1)
( n )
kk
bannba00
)()(
k 1 1 <
1
xx
k
k
10
1 < )(1 ba
T(n) = T(n) = 22T(n/T(n/33)+n)+n
ภาระจรงมากกวามากกวาการเรยกซา
nnnn k
312log
= (n)nnn
k3
32130
(n)
T(n) = T(n) = 33T(n/T(n/33)+n)+n
ภาระจรงเทากบเทากบ
การเรยกซา
nnnnlog
log3
nnnk
30
log
= (n log n) (n log n)
T(n) = T(n) = 44T(n/T(n/33)+n)+n
134
34 33 log1log nkn
nn
1
34
34
3
3
log
log
n
nn
330k
33
4 4log3n 4
1
34 g3
nnn nn 4log3
34
)( 4log3n
ภาระจรงนอยกวานอยกวาการเรยกซา
Master Method Master Method ((แบบงายแบบงาย))t(n) = at(n/b) + (nd) a 1, b > 1,( ) ( ) ( )
d 0
cdc nnn if)( c = log a
dd
cdc nnnnnnn
nt if)log(if)(
)(c = logb a
ภาระจรง
cdd nnn if)( การเรยกซา
t(n) = t(n/2) + (1)t(n) = 2t(n/2) + n2
1 = n0 (log n)2 > 1 ( 2)
c = log21 = 0c = log 2 = 1t(n) = 2t(n/2) + n2
t(n) = 2t(n/2) + nn2 > n1 (n2)n = n1 (n log n)
c = log22 = 1c = log22 = 1( ) ( )
t(n) = 4t(n/2) + 1( g )
1 < n2 (n2) g2
c = log24 = 2
t(n) = 2t(n–1) + (1) t(n) = t(an) + t(bn) + n
Master MethodMaster Methodt(n) = at(n/b) + (nd) a 1, b > 1( ) ( ) ( ) ,
cdc nnn if)( c = logb a
dd
cdc nnnnnnn
nt if)log(if)(
)( cdd nnn if)(
t(n) = at(n/b) + f(n)
)()(if)log()()(if)(
)(
cc
cc
nnfnnnnfn
nt > 0
)()(if))(()()(if)log()(cnnfnf
nnfnnnt
f( /b) k f( ) k 1
a f(n/b) k f(n), k < 1, n n0
Master Method : Master Method : ตวอยางตวอยางa 1, b > 1,
lt(n) = at(n/b) + f(n) c = logb a
)()(if)( cc nnfn
( ) ( / ) f( )
> 0
)()(if))(()()(if)log(
)()(if)()(
c
cc
ffnnfnnnnfn
nt
)()(if))(( cnnfnfa f(n/b) k f(n), k < 1, n n0
t(n) = 2t(n/2) + 1 c = log22 = 1, 1 = O(n1–) (n)
t(n) = t(n/2) + 1 c = log21 = 0, 1 = (n0) (log n)
t(n) = 3t(n/2) + n2 c = log23 , n2 log23 < 1.592 2 2
)( )3(log2 n
3(n/2)2 (3/4)n2, n 0 (n2)
Master Method : Master Method : ตวอยางตวอยางa 1, b > 1,
lt(n) = at(n/b) + f(n) c = logb a
)()(if)( cc nnfn
( ) ( / ) f( )
> 0
)()(if))(()()(if)log(
)()(if)()(
c
cc
ffnnfnnnnfn
nt
)()(if))(( cnnfnfa f(n/b) k f(n), k < 1, n n0
t(n) = 3t(n/4) + n log n c = log43 < 0.793
)(log )3(log4 nnn3((n/4) log (n/4)) (3/4) n log n, n 0 (n log n) (n log n)
Master Method : Master Method : ตวอยางตวอยางa 1, b > 1,
lt(n) = at(n/b) + f(n) c = logb a
)()(if)( cc nnfn
( ) ( / ) f( )
> 0
)()(if))(()()(if)log(
)()(if)()(
c
cc
ffnnfnnnnfn
nt
)()(if))(( cnnfnfa f(n/b) k f(n), k < 1, n n0
t(n) = 2t(n/2) + n log n c = log22 = 1n log n = O(n1–)n log n = (n)n log n = (n)n log n = (n1+) log n = o(n)ใช Master method ไมได ใชวธอน
tt((nn) = ) = 22tt((nn//22) + ) + n n log log nn(( )) (( )) ggn log n n log n
n/2 log n/2 n/2 log n/2 n log n/2
n log n/4n/4 log n/4 n/4 log n/4 n/4 log n/4 n/4 log n/4
... ... ... ... ... ... ... ... ...
n n2log
nk
2log(1) (1) (1) (1) (1) (1) (1) (1)
k
knn
02 2
log
k
knnn0
22 2loglog
nnnknn
22 loglog
2log( (l )2 )
kk 00 )log...21(log 2
22 nnnn
( n(log n)2 )
( l 2 ) 2/1logloglog 222
2 nnnnn( n log2 n )
การวเคราะหอลกอรทมการวเคราะหอลกอรทม เวลาการทางานของอลกอรทม ขนกบ
ปรมาณขอมลขาเขา ป ปชาเมอปรมาณมาก เรวเมอปรมาณนอย
แตกมอลกอรทม ทใชเวลาคงตวไมขนกบปรมาณแตกมอลกอรทม ทใชเวลาคงตวไมขนกบปรมาณ
ลกษณะของขอมลขาเขาขอมลบางลกษณะ ใชเวลาทางานมากขอมลบางลกษณะ ใชเวลาทางานนอยขอมลบางลกษณะ ใชเวลาทางานนอยแตกมอลกอรทม ทลกษณะขอมลไมมผลตอเวลาการทางาน
การหาตวหมมากการหาตวหมมากhasMajority( d[1..n] ) {for (i = 1; i <= n; i++) {for (i = 1; i <= n; i++) {
c = 0;for (j = 1; j <= n; j++) if (d[i] == d[j]) c++if (c > n/2) return TRUE
}return FALSE
return FALSE}
ทางาน กรณไมม
ตวหมมาก
กรณมตวหมมากแตครงแรก
ไมใชตวหมมาก
าการท ตวหมมาก ไมใชตวหมมาก
เวลา กรณตวแรก
คอตวหมมาก
ปรมาณขอมล
เวลาการทางานขนกบลกษณะขอมลเวลาการทางานขนกบลกษณะขอมลseqSearch( d[1..n], x ) {for (k = 1; k <= n; k++) {if (d[k] = x) return k
}return -1
}
ทางาน
าการท
เวลา
พบตวแรกของอาเรย
ปรมาณขอมล
การคนแบบลาดบการคนแบบลาดบseqSearch( d[1..n], x ) {for (k = 1; k <= n; k++) {if (d[k] = x) return k
}return -1
}พบท d[1] เปรยบเทยบ 1 ครงพบท d[1] เปรยบเทยบ 1 ครง " d[2] " 2 ครง... ... ... ... ... ... ... ..." d[k] " k ครง
มขอมล n ตว ถาขอมลแตละตวมโอกาสถกคนเทา ๆ กน 1/nมขอมล n ตว, ถาขอมลแตละตวมโอกาสถกคนเทา ๆ กน 1/n
จานวนการเปรยบเทยบเฉลย =n
k1 1
nn
k1
)1(1 nn
จานวนการเปรยบเทยบเฉลย = k
kn1 2
k
kn 1
2n
Insertion Sort : Best CaseInsertion Sort : Best CaseinsertionSort( d[1..n] ) {
for (k 2 k < n k++) {for (k = 2; k <= n; k++) {t = d[k]for (j = k-1; k >= 1; k--) {for (j k 1; k > 1; k ) {
if (t >= d[j]) breakd[j+1] = d[j]j j
}d[j+1] = t
1 3 5 8 9}} j k
1 3 5 8 9
กรณเรวสด : ขอมลเรยงลาดบ ทา k >= 1 ครงเดยวn
112
nn
k= (n)
2k
Insertion Sort : Worst CaseInsertion Sort : Worst CaseinsertionSort( d[1..n] ) {
for (k 2 k < n k++) {for (k = 2; k <= n; k++) {t = d[k]for (j = k-1; k >= 1; k--) {for (j k 1; k > 1; k ) {
if (t >= d[j]) breakd[j+1] = d[j]j j
}d[j+1] = t
8 9 5 3 1}} j k
8 9 5 3 1
กรณชาสด : ขอมลเรยงกลบลาดบ ทา k >= 1 k ครงn k 1 n
n
k
k
j2
1
01 = (n2)
n
kk
2k j2 0 k 2
Insertion Sort : Average CaseInsertion Sort : Average CaseinsertionSort( d[1..n] ) {
for (k 2 k < n k++) {for (k = 2; k <= n; k++) {t = d[k]for (j = k-1; k >= 1; k--) {for (j k 1; k > 1; k ) {
if (t >= d[j]) breakd[j+1] = d[j]กรณเฉลย : ทา k >= 1 1 2 k ครงj j
}d[j+1] = t
กรณเฉลย : ทา k >= 1 1,2, ..., k ครงดวยความนาจะเปน 1/k ในแตละกรณ
n
1 2 3 4 5 ? ? ?
n}}
n
kk
k2...211 1 2 3 5 4 ? ? ?
n
k
kkk2 2
)1(1
k 21 2 4 5 3 ? ? ?
k 2
n
k )1(21
3
2)2)(1(
21 nn
= (n2)1 3 4 5 2 ? ? ?
k 22 22
432
nn (n )2 3 4 5 1 ? ? ?4
การหาตวมากสดการหาตวมากสดmax( d[1..n] ) {max = d[1] d เรยงจากนอยไปมาก max = d[1]for (k = 2; k <= n; k++)
if (d[k] > max) max = d[k]max เปลยนคา n ครง
d เรยงจากมากไปนอยreturn max}
d เรยงจากมากไปนอย max เปลยนคา 1 ครง
ถา d เกบขอมลสม : ให C(n) แทนจานวนการเปลยน max เฉลยใน d[1..n]ให C(n) แทนจานวนการเปลยน max เฉลยใน d[1..n]ให C(n,k) " " " เมอ max คอ d[k]ถา max คอ d[k] d[k+1]...d[n] ไมมผลกบ maxถา max คอ d[k] d[k 1]...d[n] ไมมผลกบ maxC(n,k) ยอมเทากบ #การเปลยน max เพอหา max ใน k-1 ตวแรก ตามดวย การเปลยน max อกครงเมอเปรยบเทยบกบ d[k] C(n,k) = C(k –1) + 1
n 1
1 k n
n1
k
knCn
nC1
),(1)(
k
kCn 1
1)1(1
การหาคามากสดการหาคามากสด
nkCnC 1)1(1)(
kn 1)()(
)1()2()1(1 nCCCn )1()2()1( nCCCn
n
)1()2()1()( nCCCnnnC )()()()(
)2()2()1()1()1()1( nCCCnnCn
)1(1)1()1()( nCnCnnnC
1)1()( nnCnnC 1)1()( nnCnnC
)1(1)( nCnC )2(11 nC)()(
n)(
1nn111
( ln n )11
nn ( ln n )
การหาคามากสด การหาคามากสด : : การเปลยน การเปลยน maxmaxmax( d[1..n] ) {max = d[1]max = d[1]for (k = 2; k <= n; k++)
if (d[k] > max) max = d[k]return max
}
max
(n )
ลยน
mนการเปล
(log n )
จานวน
d เรยงจากมากไปนอย
(log n )
(1 )ปรมาณขอมล
(1 )
สรปสรป ศกษาประสทธภาพของอลกอรทม โดยไมตอง
เขยนโปรแกรมและส งทางานจรง
หาความสมพนธระหวางเวลาการทางานกบ หาความสมพนธระหวางเวลาการทางานกบปรมาณขอมล และ ลกษณะขอมล
หาอตราการเตบโตของเวลาการทางาน
แทนเวลาดวยจานวนการทางานของคาสงตวแทน
วเคราะหไดงายขนดวยสญกรณเชงเสนกากบ วเคราะหไดงายขนดวยสญกรณเชงเสนกากบ
ใชดในการเปรยบเทยบอลกอรทม
Prof. Donald KnuthProf. Donald Knuth Father of "Analysis of Algorithms"y g
Top Related