Page 41 - โครงสร้างข้อมูลและขั้นตอนวิธี
P. 41
การวัดประสิทธิภาพและความซับซ้อนของขั้นตอนวิธี 2-31
1) การเวยี นเกดิ ทมี่ กี ารเรยี กใชแ้ บบการวนลปู ธรรมดา เชน่ การค�ำน วณคา่ แฟกทอเรยี ล ดงั ขน้ั ตอนวธิ ตี อ่ ไปน้ี
Procedure Factorial(n)
1 BEGIN
2 IF n ≤ 1 DO
3 RETURN 1
4 ELSE
5 RETURN n * Factorial(n — 1)
6 END
การวิเคราะห์ขั้นตอนวิธีนี้จะง่ายและเห็นได้ชัดเจนว่า ข้ันตอนวิธีนี้ใช้เวลาเป็น O(n) เน่ืองจากค่าของตัวแปร
n จะถ ูกลดล งเร่ือยๆ ทีละ 1 เมื่อมีก ารเรียกก ารท�ำงานซ ้�ำ จนกระท ้ัง n มีค ่าเท่ากับ 1 จึงหยุดการท �ำงาน ดังน ้ัน ข้ันตอน
วิธีน ้ีจ ึงมีก ารป ระมวลผลการค ูณท ั้งหมดป ระมาณท ่ีอ ันดับ n เท่านั้น
2) การเวียนเกิดที่มีก ารเรียกใช้แบบไม่ใช่ก าร วนลูปธ รรมดา แต่เป็นการเรียกใช้ห ลายค รั้ง เป็นการอ อกแบบ
ข้ันตอนวิธีช้ันสูง เช่น การแบ่งแยกและเอาชนะ (divide and conquer) การค้นหาแบบทวิภาค (binary search)
รวมถึงการเวียนเกิดของฟังก์ชันฟิโบนักซี (fibonacci) แต่ละข้ันตอนวิธีท่ีใช้การเวียนเกิดแบบน้ีอาจท�ำให้เวลาใน
ก ารประมวลผลด ีข ้ึนหรือแย่ล งได้
ตวั อย่างท ี่ 2.19 จงห าฟ ังก์ชันเวลา T(n) ของโปรแกรมต่อไปนี้ พร้อมท ้ังประมาณบ ๊ิกโอของ T(n)
Procedure Max(A1, A2, …, An)
1 BEGIN
2 max :i=:=A11
3 FOR to n DO
4 BEGIN
5 IF mmaxax<:=AiATi HEN
6
7 END
8 DISPLAY max
9 END
วธิ ีท�ำ
บรรทัดท ่ี 2 และ 8 มีก ารเรียกใช้ตัวด�ำเนินการเพียงหนึ่งต ัวในแต่ละบ รรทัด คดิ เปน็ 2 หนว่ ยเวลา
บรรทัดท ่ี 3 เป็นล ูป for ที่ซ่อนการท�ำงานไว้ ซ่ึงใช้เวลาท ั้งหมด 2n + 2 หน่วยเวลา
บรรทัดท ี่ 5 และ 6 มกี ารเปรยี บเทยี บและการใหค้ า่ เปน็ 2 หนว่ ยเวลา ในลปู for ท�ำใหม้ กี ารป ระมวลผล
บรรทัดที่ 5 ท้ังหมด n คร้ัง และบรรทัดที่ 6 ทั้งหมดมากท่ีสุดประมาณ n คร้ัง
เช่นกัน ถ้าเง่ือนไขในบรรทัดท่ี 5 เป็นจริงเสมอ ดังนั้น ในส่วนน้ีจะใช้เวลา
2n หน่วยเวลา
ดังน ั้น รวมทั้งหมดจ ะใช้เวลา T(n) = 2 + (2n + 2) + 2n = 4n + 4 = O(n)