Download - บทที่ 2 การวิเคราะห์อัลกอริทึม
บทท�� 2 การวิเคราะห์�อั�ลกอัรท�ม
2 ห์�วิข้�อั
การวิเคราะห์�อั�ลกอัรท�ม แบบทดลอัง และแบบคณิตวิเคราะห์�
การนั�บจำ�านัวินัการท�างานัข้อังค�าสั่��งพื้ !นัฐานั อั�ตราการเตบโตข้อังฟั%งก�ชั�นั สั่�ญกรณิ�เชังเสั่�นัก�าก�บ การวิเคราะห์�การท�างานั
แบบล�าด�บ, แบบเล อักท�า, แบบวิงวินั, แบบเร�ยกซ้ำ�!า
3 ข้�!นัตอันัการอัอักแบบอั�ลกอัรท�ม
4 จำ*ดประสั่งค�ข้อังการวิเคราะห์�อั�ลกอัรท�ม
เพื้ �อัศึ�กษาประสั่ทธิภาพื้ข้อังอั�ลกอัรท�ม เวิลาการท�างานั ปรมาณิห์นั0วิยควิามจำ�าท��ใชั�ในัการท�างานั
5 ประเภทการวิเคราะห์�อั�ลกอัรท�ม
Mathematical Analysis Experimental Analysis
แปลงเป2นัโค�ด สั่��งท�างานัก�บข้�อัม3ลทดสั่อับ จำ�บเวิลาการท�างานั บ�นัท�กผล วิเคราะห์�ควิามสั่�มพื้�นัธิ�ระห์วิ0างเวิลาการท�างานัก�บ
ปรมาณิข้�อัม3ล ม�กเป2นัร3ปแบบฟั%งก�ชั�นัทางคณิตศึาสั่ตร�
6 SelectionSort
selectionSort(d[1..n]){
for (k = n; k > 1; k--) {
maxI=1
for (i = 2; i <= k; i++)
if (d[i] > d[maxI]) maxI = i
d[k]d[maxI]
}
}
7 Selection Sort ( ภาษา C)
void selectionSort(int d[], int n) {
int k, i;
for (k = n - 1; k > 0; k--) {
int maxI =1;
for (i = 0; i <= k; i++)
if (d[i]> d[maxI]) maxI = i;
int t = d[k];
d[k] = d[maxI];
d[maxI] = t;
}
}
8
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
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 (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;
}
9 Selection Sort ( ภาษาJava)
10
public class TestSelectionSort {
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 i = 0; i <n;i++) d[i] = i; {
long start = System.currentTimeMillis();
selectionSort(d);
sum += System currentTimeMillis() - start;
}
System.out.printf("%d \t %f \n", (double)sum/repeat);
}
}
11
public class TestSelectionSort {
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 i = 0; i <n;i++) d[i] = i; {
long start = System.currentTimeMillis();
selectionSort(d);
sum += System currentTimeMillis() - start;
}
System.out.printf("%d \t %f \n", (double)sum/repeat);
}
}
for (int i = 0; i < 10000; i++)selectionSort(new int[1]);
12 สั่��งท�างานั พื้ร�อัมบ�นัท�กผล ภาษา C : ใชั�GNU-C Compiler (3.4.2) ภาษา Java : ใชั� Java 6 (build 1.6.0_14-b08)
Interpreted-only mode (option –Xint ตอันัท�างานั)
Compilation to native code ( บ�งค�บ compile
ด�วิยการเร�ยกเมท5อัดวิ�!า ๆ สั่�ก 10 000 คร�!ง) Intel Core 2 Duo
P8400 2.26GhzRam 3GBWindows XP
13 เปร�ยบเท�ยบเวิลาการท�างานั
22.1×10−6 𝑛
2
2 .38×10− 6 𝑛
2
1 .54×10− 6𝑛
2
14 ใชั�จำ�านัวินัการท�างานัข้อังค�าสั่��งแทนัเวิลา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--) {
int 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;
}
}
counter += 3;
int t = d[k]; d[k] = d[maxI]; d[maxI] = t;
}
}
15 เข้�ยนัโปรแกรมทดลอังนั�บค�าสั่��งpublic class TestSelectionSort {
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 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);
}
}
16 นั�บจำ�านัวินัการท�างานัข้อังค�าสั่��ง
17 นั�บเฉพื้าะค�าสั่��งต�วิแทนัstatic intcounter= 0;
static voidselectionSort(int[] d) {
for (int k = d.length-1; k > 0; k--) {
int 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;
}
}
18 นั�บท*กค�าสั่��ง VS. นั�บค�าสั่��งต�วิแทนั
19 Mathematical Analysis
ไม0ต�อังเข้�ยนัเป2นัโปรแกรม ไม0ต�อังสั่��งท�างานัจำรง ไม0ต�อังวิาดกราฟั วิเคราะห์�จำากอั�ลกอัรท�ม จำะได�
เป2นัฟั%งก�ชั��นั
1∑𝑖=2
𝑘
❑
20 นั�บท*กค�าสั่��ง VS. นั�บค�าสั่��งต�วิแทนั
21 ค�าสั่��งต�วิแทนัต�อังเป2นัค�าสั่��งพื้ !นัฐานั ค�าสั่��งพื้ !นัฐานั ค อัค�าสั่��งท��
ใชั�เวิลาการท�างานัไม0เกนัค0าคงท��ค0าห์นั��ง ใชั�เวิลาการท�างานัไม0แปรตามข้นัาดข้อัง
input เชั0นั + - * / if เปร�ยบเท�ยบ return
break …
22 การวิเคราะห์�อั�ลกอัรท�ม เวิลาการท�างานั แปรตามจำ�านัวินัการท�างานัข้อังค�าสั่��ง
จำ�านัวินัการท�างานัข้อังค�าสั่��ง แปรตามจำ�านัวินัการท�างานัข้อังค�าสั่��งต�วิแทนั
เพื้ �อัควิามง0าย เราวิเคราะห์�อั�ลกอัรท�มเชังเวิลาด�วิยการห์าควิามสั่�มพื้�นัธิ�ข้อัง จำ�านัวินัการท�างานัข้อังค�าสั่��งต�วิแทนั ปรมาณิข้�อัม3ล
23 วิ�ดปรมาณิข้�อัม3ลข้าเข้�า พื้จำารณิาวิ0า ข้นัาดข้อัง input แปรตามค0าอัะไรข้อัง
input ต�วิอัย0าง: sort(d[1…n])
Input เป2นัอัาเรย�จำ�านัวินั n ชั0อัง แต0ละจำ�านัวินัม�ค0าจำ�าก�ด ด�งนั�!นั n แทนัปรมาณิข้�อัม3ล
ต�วิอัย0าง:shortestPath( V, E, w, s ) Input เป2นักราฟัถ่0วิงนั�!าห์นั�ก ข้นัาดข้อังกราฟั แปรตามจำ�านัวินัปมและจำ�านัวินัเสั่�นัเชั �อัม ด�!งนั�!นั |V|+|E| แทนัปรมาณิข้อังข้�อัม3ล
24 เปร�ยบเท�ยบผลการวิเคราะห์�
25 เปร�ยบเท�ยบเวิลาการท�างานั
26 เปร�ยบเท�ยบอั�ตราการเตบโต
27
28 อั�ตราการเตบโต
29
30
31
32
33
34 ทบทวินัสั่3ตรคณิตศึาสั่ตร�
35
36
37
38
39
40 อั�ตราการเต�บโตขอังฟั�งก�ชั�น
41 f(n) vs. g(n)
ใครโตเร5วิกวิ0าก�นั ให์�ด3ท��พื้ฤตกรรม ตอันัท��ค0า n เยอัะๆ วิ0าใครนั�าห์นั�า
ใคร
ค อั ค0าคงต�วิท��ไม0ใชั0 0
𝒇 (𝒏 )≺𝒈 (𝒏 )
𝒇 (𝒏 )≻𝒈 (𝒏 )𝒇 (𝒏 )≍𝒈 (𝒏 )
𝒇 (𝒏 ) โตไม่�เร�วกว�า𝒈 (𝒏)
𝒇 (𝒏 ) โตไม่�ชั�ากว�า𝒈 (𝒏 )
𝒇 (𝒏 )≼𝒈 (𝒏 )
𝒇 (𝒏 )≽𝒈 (𝒏 )
42 ต�วิอัย0าง
=
=
=
สั่ร*ปได�วิ0า
43
=
=
=
=
สั่ร*ปได�วิ0า โตเท0าก�บ
44 L'Hôpital's rule
ถ่�า และ เป2นัฟั%งก�ชั�นัท��ห์าอันั*พื้�นัธิ�ได� โดยท��
, และห์าค0าข้อัง
จำะได�วิ0า
45
46 เร�ยงล�าด�บฟั%งก�ชั�นัตามการเตบโต
𝑛 !
47
48 สั่�ญกรณิ�เชังเสั่�นัก�าก�บ
49 สั่�ญกรณิ�เชังเสั่�นัก�าก�บ(Asymptotic Notations)
• little-o
• little – omega
• Big – O
• Big – Omega
• Big - Theta
50 little-o
51 little – omega
52 Big - Theta
53 Big – O
54 Big – Omega
55 สั่ร*ป
56 Big – O : ข้อับเข้ตบนั
57 Big-Omega : ข้อับเข้ตล0าง
58 Big – Theta : ข้อับเข้ตกระชั�บ
59 จำ*ดประสั่งค�การใชั�สั่�ญกรณิ�เชังเสั่�นัก�าก�บ
เข้�าใจำพื้ฤตกรรมเม �อัพื้ารามเตอัร�ม�ค0ามาก
วิเคราะห์�ได�ง0าย
จำ�ดกล*0มฟั%งก�ชั�นัตาอั�ตราการเตบโต
60 วิเคราะห์�ด�วิย จำงแสั่ดงวิ0า
61
หาอัน�พั�นธ์�
62 ต�วิอัย0าง
63 การเข้�ยนัฟั%งก�ชั�นัในัร3ปข้อัง ผลบวิกข้อังพื้จำนั�ห์ลายพื้จำนั� เล อักพื้จำนั�ท��โตเร5วิสั่*ด ข้�อัสั่�งเกต
เชั0นั
64 อั�ตราการเตบโต
65 การวิเคราะห์�อั�ลกอัรท�ม
การท�างานัแบบล�าด�บ เล อักท�า ท�าซ้ำ�!าเป2นัวิงวินั ท�าซ้ำ�!าแบบเร�ยกซ้ำ�!า
66 การท�างานัแบบล�าด�บ
67
68
69
70 การเล อักท�า
71 การท�างานัแบบวิงวินั
72
73
74
75
76 ต�วิอัย0าง Insertion Sort
77 ต�วิอัย0าง while
78
79 การท�างานัแบบเร�ยกซ้ำ�!า
80 ต�วิอัย0าง การค�นัห์าแบบทวิภาค
81 t(m) = t(n/2) +
82 ต�วิอัย0าง: Tower of Hanoi
83 dki
84 ต�นัไม�แทนัภาระจำรงข้อังการเร�ยกซ้ำ�!า
85 ข้นัาดข้�อัม3ล ก�บ ภาระจำรง
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108