Page 54 - โครงสร้างข้อมูลและขั้นตอนวิธี
P. 54
2-44 โครงสร้างข้อมูลและขั้นตอนวิธี
แล้ว T(n) = n*(k+1)
= n*k + n
= n log n + n
= O(n log n)
ดังน้ัน ข้ันต อนว ิธีที่ 3 ใช้เวลาทั้งหมดประมาณ O(n log n)
เมอ่ื พจิ ารณารหสั เทยี มของขนั้ ตอนวธิ ีท่ี 3 นี้ จะเหน็ วา่ การเวยี นเกดิ จะถกู เรยี กใช้เพอื่ แกป้ ญั หาทมี่ ขี นาดล�ำดบั
เล็กลงกว่าล�ำดับหลักเสมอ และมีขั้นตอนการท�ำงานหลายขั้นตอน ซ่ึงอาจใช้เวลาในการเขียนข้ันตอนการค�ำนวณ
แต่ก ลับใช้เวลาในการป ระมวลผ ลท ี่เร็วข ึ้นได้ ดังน ั้น ข้ันต อนว ิธีท ี่จ ะเขียนได้ส ั้นห รือย าว ไม่ได้ห มายความว ่าจ ะเป็นข ้ัน
ตอนวิธีท่ีดีกว่าเสมอไป ดังแสดงในตารางที่ 2.3 เมื่อข้อมูลมีขนาดใหญ่เวลาที่ใช้ประมวลผลข้ันตอนวิธีท่ี 3 มี
ประสิทธิภาพและรวดเร็วก ว่า 2 ข้ันต อนวิธีแรกท่ีกล่าวไปแ ล้ว
ขั้นตอนวิธีที่ 4 เป็นข้ันตอนวิธีที่มีประสิทธิภาพดีท่ีสุดท่ีก�ำลังพิจารณาเพื่อแก้ปัญหาน้ี โดยพิจารณาปรับปรุง
มาจากขั้นตอนวิธีท่ี 2 โดยลดการใช้ลูป for ให้เหลือเพียงลูปเดียว หลักการคือ ถ้าการรวมจ�ำนวนเพิ่มเข้าไปแล้ว
มีค่าน้อยกว่าศูนย์ จะพิจารณาเริ่มต้นหาผลรวมย่อยใหม่และยังคงผลรวมย่อยที่มากที่สุดไว้เช่นเดิม จากการที่ใช้
ลูป for เพียงล ูปเดียว ท�ำให้ข ั้นต อนว ิธีนี้ใช้เวลาเป็น O(n) โดยม ีรหัสเทียม ดังน้ี
Procedure MaxSubSequenceSum(A1, A2, …, An)
1 BEGIN
2 ThisSum := 0 /* ให้ค่าเริ่มต้นของผลร วมล ำ�ดับย ่อย ThisSum เป็น 0 */
3 MaxSum := 0 /* ให้ค่าเริ่มต้นข องผลร วมมากท ี่สุด MaxSum เป็น 0 */
4 FOR j := 1 to n DO /* ลูป for เพื่อเป็นด ัชนีอ้างอิงข้อมูลแต่ละต ัวในลำ�ดับ */
5 BEGIN
6 ThisSum = ThisSum + Aj /* หาผลร วมของล ำ�ดับย่อย */
7 IF ThisSum > MaxSum THEN /* ตรวจส อบผลรวมย ่อยเพื่อห าผลรวมท ี่ม ากที่สุด */
8 MaxSum := ThisSum
9 ELSE IF ThisSum < 0 /* ถ้าผ ลรวมย ่อยน้อยกว่าศ ูนย์ ให้เริ่มห าผ ลรวมใหม่ */
10 ThisSum = 0
11 END
12 RETURN MaxSum /* คืนค่าผ ลร วมที่ม ากท ี่สุด */
13 END
จากก ารประม าณบ ิ๊กโอข องข ้ันต อนว ิธีท ้ัง 4 ท่ีก ล่าวม าน ้ี สามารถป ระมาณเวลาหรือป ระสิทธิภาพข องข ั้นตอน
วิธี ถ้าม ีข้อมูลท ั้งหมด 1,000 ข้อมูล ได้ดังน้ี
ขน้ั ตอนวิธีที่ 1 มีป ระสิทธิภาพเป็น O(n3)
ใช้ก ารด �ำเนินการห รือเวลาท ้ังหมดประมาณ 1000 × 1000 × 1000 = 109 หน่วยเวลา
ข้นั ต อนว ธิ ีท่ี 2 มีป ระสิทธิภาพเป็น O(n2)
ใช้ก ารด �ำเนินการหรือเวลาท้ังหมดป ระมาณ 1000 × 1000 = 106 หน่วยเวลา