ขั้นตอนวิธี
(Algorithm)
คือกระบวนวิธีการ(procedure)ซึ่งประกอบด้วยกลุ่มของกฎเกณฑ์ ข้อกำหนดเฉพาะที่ไม่สับสน
กำหนดถึงลำดับของวิธีการ(operations) ซึ่งให้ผลลัพธ์สำหรับปัญหาต่าง ๆ
ในรูปของขั้นตอนที่มีจำนวนจำกัด
คุณสมบัติของขั้นตอนวิธี
·
ขั้นตอนวิธีเป็นกระบวนการที่สร้างขึ้นมาจากกลุ่มของกฎเกณฑ์
·
กฎเกณฑ์ที่สร้างขั้นตอนวิธีจะต้องไม่คลุมเครือ(definiteness)
·
การประมวลผล operations
ที่กำหนดโดยกฎเกณฑ์จะต้องเป็นลำดับที่แน่นอน(effectiveness)
·
กระบวนวิธีการต้องให้ผลลัพธ์ตามที่กำหนดในปัญหา
โดยออกแบบให้อยู่ในรูปแบบทั่วไป (generality)
·
ขั้นตอนวิธีต้องอยู่ในรูปของขั้นตอนวิธีการที่มีการสิ้นสุดได้(finiteness)
Algorithm
1
Finding the maximum element in a finite sequence
procedure
max(a1, a2, …, an: integers);
max := a1
for i
:= 2 to n
if max < ai then max := ai
{ max
is the largest element }
Searching
Algorithm
Algorithm2 The linear search algorithm
procedure
linear search(x:integer, a1, a2, …, an: distinct integers)
i := 1
while
(i £ n and x ¹ ai )
i := i + 1
if i £ n then location
:= i
else
location := 0
{location
is the subscript of term that equal x, or is 0 if x is not found}
ตัวอย่าง จงค้นหาค่า 19
จากชุดข้อมูลดังต่อไปนี้
1 2 3
5 6 7 8 10
12 13 15
16 18 19
20 22
1 2 3
5 6 7 8 10 12 13
15 16 18
19 20 22
12 13 15
16 18 19
20 22
18 19 20
22
18 19
Algorithm
3 The
binary search algorithm
procedure
binary search(x : integer, a1, a2, …, an: increasing integers)
i := 1 { i is the left endpoint of
search interval }
j := 1 { j is the right endpoint of
search interval }
while
(i £ j)
begin
m := ë(I + j )/2 û
if x > am then
i := m + 1
else j := m
end
if
x = ai then
location := i
else location := 0
{location
is the subscript of term that equal to x, or is 0 if x is not found}
|
Outline
1)
การประเมินผลโปรแกรม
2)
เครื่องมือช่วยในการประเมินผลโปรแกรม
3)
ตัวอย่างการเปรียบเทียบประสิทธิภาพ
การประเมินผลโปรแกรม
t = f(n)
s = g(n)
n = Size of the problem
t = Time needed to get the
solution
s = Total memory space required by
solution
1. การประเมินผลโปรแกรม
การประเมินผลโปรแกรมว่ามีประสิทธิภาพหรือไม่
โดยไม่ขึ้นกับปัจจัยภายนอกอื่นๆ จะใช้เกณฑ์การประเมินผลที่
1.
ความเร็วในการประมวลผล
2.
เนื้อที่ที่ต้องใช้ในหน่วยความจำระหว่างที่มีการประมวลผล
การประมวลผลที่โปรแกรม
เราจะประเมินผลที่โปรแกรมได้จากการวิเคราะห์ความซับซ้อนของ Algorithm ที่ใช้ในโปรแกรมนั้น (Complexity of Algorithm) ดังนี้
ให้ M เป็น Algorithm หนึ่ง และ n เป็นจำนวนข้อมูลดังนั้น
เวลาและพื้นที่ ที่ใช้ใน Algorithm M จะเป็นตัววัดประสิทธิภาพของ Algorithm
ความซับซ้อนของ
Algorithm M จะอยู่ในรูปของฟังชันก์ f(n) ซึ่งจะให้ค่าของเวลาที่ใช้
และหรือพื้นที่ที่ต้องการใช้ชอง Algorithm ในเทอมของขนาด n ซึ่งเป็นข้อมูล อินพุต
2.
เครื่องมือช่วยในการประเมินผลโปรแกรม
O-notation
อัตราการเพิ่มของเวลาหรือพื้นที่หน่วยความจำตามจำนวนของข้อมูล
: Rate of Growth
Time
and Space Complexity
t
O[f(n)]

s
O[g(n)]

n = Size
of the problem
f(n) = Time
complexity
g(n) =
Space complexity
ใช้วิธีการแทนที่การประมวลผล
Algorithm นั้นๆ ด้วย Function ที่มีค่าประมารค่าหนึ่ง
โดยวิธีการหาว่า Function นั้นจะมีค่าประมาณเป็นเท่าใดนั้น
ให้ใช้วิธีการแทนที่ปริมาณของปัญหาที่ต้องการให้ Algorithm
ทำให้
แล้วสังเกตว่า เกิดการประมวลผลกี่ครั้ง หรือมีการใช้เนื้อที่เป็นจำนวนเท่าใด
จากนั้นทำการเปรียบเทียบฟังก์ชันที่ได้นี้กับฟังก์ชันมาตรฐานทางคณิตศาสตร์ เช่น log2n , n , nlog2n , n2 , n3 , 2n เพื่อประเมินว่า Algorithm นั้นมีประสิทธิภาพอย่างไร
|
LOC DATA ITEM
|


|
2

4


6
กรณีนี้เรียกว่า
" Worst
Case " หมายถึง
พบข้อมูลที่ขั้นตอนสุดท้ายหรือไม่พบข้อมูลเลย ดังนั้นจะได้ฟังก์ชัน f(n) = n โดย n = เทอมของจำนวนอินพุต = 6
|
LOC DATA ITEM
![]() |
|||
![]() |
|||
![]() |
|||
|
กรณีนี้เรียกว่า
" Best
Case " หมายถึง
พบข้อมูลที่ขั้นตอนแรกสุดเลย ดังนั้นจะได้ฟังก์ชัน f(n) = cโดย n = เทอมของจำนวนอินพุต = 6
c = ค่าคงที่ = 1
Complexity
เป็นฟังก์ชันของ n
|
Log n
|
n
|
nlogn
|
n2
|
n3
|
2n
|
5
10
100
1000
|
3
4
7
10
|
5
10
100
103
|
15
40
700
104
|
25
100
104
106
|
125
103
106
109
|
32
103
1030
10300
|
ตารางแสดงอัตราการเจริญเติบโตของฟังก์ชันมาตรฐานตามขนาดของ
Complexity
ในรูปของกราฟ
กราฟแสดงการเปรียบเทียบการใช้เครื่องมือวัด
ระหว่างโปรแกรม 3 โปรแกรม
ตัวอย่าง : Linear Search Algorithm
Average
Case
เป็นค่าเฉลี่ยของความน่าจะเป็นที่จะพบข้อมูล
ITEM ในตำแหน่งใด ๆ ของอาร์เรย์ DATA
คำนวณได้ดังนี้
f(n) = 1(1/n) + 2(1/n) + 3(1/n) + … + n(1/n)
= (1+2+3+…+n)(1/n)
= ((n(n+1))/2) (1/n)
= (n+1)/2
โดย n เป็นจำนวนครั้งของการเปรียบเทียบ
1/n เป็นความน่าจะเป็นที่จะพบข้อมูลในครั้งนั้น
Complexity
Worst
Case
ค่าสูงสุดของ f(n) สำหรับอินพุตที่กำหนด
Best
Case
ค่าต่ำสุดของ f(n) สำหรับอินพุตที่กำหนด
Average
Case
ค่าโดยประมาณของ f(n)
ตัวอย่าง : การเปรียบเทียบประสิทธิภาพ
*ต้องการเรียงข้อมูล
1,000,000 เรคคอร์ด
1.
Operation สำหรับการเปรียบเทียบการ
Index และ Housekeeping รวม ๆ แล้ว เช่น 20 คำสั่งพื้นฐาน
2.
ถ้าใช้คอมพิวเตอร์ที่ความเร่งนาฬิกา 200 MHz: ซึ่งหนึ่งคำสั่งพื้นฐานใช้
1 สัญญานาฬิกา นั่นคือ 1/(200*106) วินาที
3.
20 คำสั่งใช้ 20/(200*106) = 10-7 วินาที
4.
สำหรับ Bubble
Sort และ Insertion Sort เวลาที่ใช้ประมาณ n 2 ซึ่งจะประเมินโดยใช้ n 2 /2
1,000,000*1,000,000*10 -7 = 500,000*10 -6 *10 -7
= 50,000 วินาที
~= 1,000 นาที
~= 16.6 ชั่วโมง
5.
สำหรับ Quick sort และ Heap sort เวลาที่ใช้ประมาณ
nlog 2 n ซึ่งจะประเมินโดยใช้ nlog 2n /2
1,000,000*20*10 -7 = 1,000,000*10*10 -7
2
= 1 วินาที
อนึ่งสำหรับ Quick sort กรณีเลวร้ายที่สุดจะเป็น ~n 2
สรุป Complexity ที่สำคัญ
Commonly
used the terminology for
|
the
complexity of Algorithms.
|
Complexity
|
Terminology
|
O(1)
|
Constant
complexity
|
O(log n)
|
Logarithmic
complexity
|
O(n)
|
Linear
complexity
|
O(n log n)
|
n
log n complexity
|
O(nb)
|
Polynomial complexity
|
O(bn) where b > 1
|
Exponential
complexity
|
O(n!)
|
Factorial
complexity
|
ไม่มีความคิดเห็น:
แสดงความคิดเห็น