บทที่ 2 การวิเคราะห์อัลกอริทึม

Post on 03-Jan-2016

39 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

บทที่ 2 การวิเคราะห์อัลกอริทึม. หัวข้อ. การวิเคราะห์อัลกอริทึม แบบทดลอง และ แบบคณิตวิเคราะห์ การนับจำนวนการทำงานของคำสั่งพื้นฐาน อัตราการเติบโตของฟังก์ชัน สัญกรณ์ เชิงเส้นกำกับ การวิเคราะห์การทำงาน แบบลำดับ, แบบเลือกทำ, แบบวงวน, แบบเรียกซ้ำ. ขั้นตอนการออกแบบอัลกอริทึม. - PowerPoint PPT Presentation

TRANSCRIPT

บทท�� 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

top related