การทำซ้ำ

เราได้เรียนรู้เรื่องการระบุข้อมูลเข้า ข้อมูลออกและเงื่อนไขของปัญหา รวมถึงเราได้เรียนรู้เรื่องการออกแบบขั้นตอนวิธีในการแก้ปัญหา เช่น การหาผลรวม การหาค่ามากที่สุด การหาค่าน้อยที่สุด การพิจารณาเลขคู่/เลขคี่ หรือการพิจารณาปีอธิกสุรทิน กันมาแล้ว แต่ในบางปัญหาอาจมีความซับซ้อนมากกว่า ดังนั้น เราอาจจะต้องใช้วิธีการออกแบบขั้นตอนวิธีในรูปแบบที่แตกต่างกันออกไป

ความหมายของการทำซ้ำ

การทำซ้ำ เป็นหนึ่งในขั้นตอนวิธีที่นิยมใช้แก้ปัญหา ใช้สำหรับการทำงานที่มีลักษณะเดียวกันซ้ำหลายรอบ

ประเภทของการทำซ้ำ

1. การทำซ้ำในรายการ จะเป็นการพิจารณารายการข้อมูล ทีละตัว จนครบทุกตัวในรายการ
2. การทำซ้ำด้วยเงื่อนไข เป็นการทำงานโดยใช้การคำนวณแบบต่างๆ มากำหนดเป็นเงื่อนไขในการทำซ้ำ

ตัวอย่างที่ 1 การทำซ้ำในรายการ

โจทย์ : แม่ค้ามีข้อมูลลูกค้าจำนวน 10 คน แม่ค้าอยากทราบว่ามีลูกค้าที่มีอายุไม่เกิน 18 ปี จำนวนกี่คน

ขั้นตอนวิธี : หาจำนวนลูกค้าที่มีอายุไม่เกิน 18 ปี
ข้อมูลเข้า : รายการอายุของลูกค้า
ข้อมูลออก : จำนวนลูกค้าที่มีอายุไม่เกิน 18 ปี

ขั้นตอนวิธี
1. count <- 0
2. พิจารณาข้อมูลรายการอายุของลูกค้าทีละตัว ไปจนครบ
2.1 ให้ x แทน อายุของลูกค้าที่พิจารณาอยู่
2.2 ถ้า x น้อยกว่า หรือเท่ากับ 18 แล้ว
count <- count + 1
3. คืนค่าจำนวนลูกค้า เท่ากับ count

กำหนดให้รายการอายุลูกค้า L = {15, 19, 20, 20, 16, 16, 17, 18, 19, 15} และ count = 0

รอบที่xcount
1151
2191
3201
4201
5162
6163
7174
8185
9195
10156

คืนค่า count = 6

ตัวอย่างที่ 2 การทำซ้ำในรายการ

โจทย์ : ต้องการค้นหาข้อมูล target ที่อยู่ในรายการ L

ขั้นตอนวิธี : หาข้อมูล target ที่อยู่ในรายการ L
ข้อมูลเข้า : รายการ L
ข้อมูลออก : ค่าดัชนี i ของ target ในรายการ L

ขั้นตอนวิธี
1. ให้ค่าดัชนี i มีค่าตั้งแต่ 1 จนถึง L
2. พิจารณาข้อมูลในรายการ L ทีละตัว
2.1 ให้ y <- ข้อมูลตัวที่ i ในรายการ L
2.2 ถ้า y = target แล้ว
ให้คืนค่า i และจบการทำงาน
3. ตอบว่าไม่พบข้อมูล target และจบการทำงาน

กรณีที่ 1 กำหนดให้รายการ L = {75, 60, 65, 45, 50, 66, 70, 80} และ target = 50

รอบที่iy
1175
2260
3365
4445
5550

คืนค่า i = 5

กรณีที่ 2 กำหนดให้รายการ L = {75, 60, 65, 45, 50, 66, 70, 80} และ target = 99

รอบที่iy
1175
2260
3365
4445
5550
6666
7770
8880

ไม่พบข้อมูล target = 99

ตัวอย่างที่ 3 การทำซ้ำในรายการ

โจทย์ : การประกวดการจัดทำพานไหว้ครู มีผลการให้คะแนนดังนี้

ทีมที่ 1 ได้คะแนนรวม 55 คะแนน
ทีมที่ 2 ได้คะแนนรวม 66 คะแนน
ทีมที่ 3 ได้คะแนนรวม 45 คะแนน
ทีมที่ 4 ได้คะแนนรวม 70 คะแนน
ทีมที่ 5 ได้คะแนนรวม 57 คะแนน
ทีมที่ 6 ได้คะแนนรวม 60 คะแนน


ต้องการทราบทีมที่ชนะการประกวด

ขั้นตอนวิธี : หาทีมที่ชนะการประกวด
ข้อมูลเข้า : ผลการให้คะแนน
ข้อมูลออก : ทีมที่ชนะการประกวด โดยพิจารณาจากคะแนนรวม

ขั้นตอนวิธี
1. ให้ i = 1 และ max = คะแนนรวมของลำดับที่ i
2. พิจารณาข้อมูลในผลการตัดสินทีละรายการ
2.1 ให้ score แทนคะแนนของทีมลำดับที่ n
2.2 ถ้า score มากกว่า max
2.2.1 ให้ i = n และ ให้ max = score
3. ตอบว่าทีมที่ชนะคือทีมที่ i

กำหนดให้ i = 1 และ max = 55

รอบที่nscoreimax
1155155
2266266
3345266
4470470
5557470
6660470

ทีมที่ชนะ คือ ทีมที่ 4

ตัวอย่างที่ 4 การทำซ้ำด้วยเงื่อนไข

โจทย์ : ทอยลูกเต๋าให้ออกเลข 1

ขั้นตอนวิธี : เปรียบเทียบหน้าลูกเต๋า ที่ออกตรงกับเลข 1
ข้อมูลเข้า : สุ่มหน้าลูกเต๋า
ข้อมูลออก : “ถูกต้อง” “มากเกินไป”

ขั้นตอนวิธี
1. ให้ score <- สุ่มไปจำนวนเต็มระหว่าง 1 – 6
2. ถ้า score = 1 แล้ว
2.1 แสดงคำว่า “ถูกต้อง” และจบการทำซ้ำ
ไม่เช่นนั้น
2.2 แสดงคำว่า “มากเกินไป” และกลับไปทำข้อ 1

รอบที่score (สุ่มตัวเลข)ข้อความ
15มากเกินไป
26มากเกินไป
32มากเกินไป
41ถูกต้อง

ตัวอย่างที่ 5 การทำซ้ำด้วยเงื่อนไข

โจทย์ : หาตัวประกอบของ 15

ขั้นตอนวิธี : หาจำนวนที่หาร 15 ลงตัว
ข้อมูลเข้า : –
ข้อมูลออก : ตัวประกอบของ 15

ขั้นตอนวิธี
1. ให้ n = 0
2. ทำซ้ำในขณะที่ n น้อยกว่าหรือเท่ากับ 15
2.1 ถ้า 15 หารด้วย n ลงตัว ให้
2.1.2 คืนค่า n
2.2 n = n+1

รอบที่nคืนค่า
111
22
333
44
555
66
77
88
99
1010
1111
1212
1313
1414
151515

จะเห็นได้ว่า แม้จะเขียนขั้นตอนวิธีเพียงไม่กี่คำสั่ง แต่สามารถทำให้เกิดการทำงานได้หลายรอบ ดังนั้น ในทางคอมพิวเตอร์จึงมีการวัดความซับซ้อนเชิงเวลา เพื่อหาประสิทธิภาพของขั้นตอนวิธี หรือที่นิยมเรียกว่า O (อ่านว่า Big-O)