การแก้ปัญหาและขั้นตอนวิธี
การแก้ปัญหาและขั้นตอนวิธี
การแก้ปัญหาด้วยคอมพิวเตอร์
ปัญหาที่สามารถแก้ได้ด้วยคอมพิวเตอร์ไม่จำเป็นต้องเป็นปัญหาทางคณิตศาสตร์เสมอไป อย่างไรก็ตาม เนื่องจากโปรแกรมคอมพิวเตอร์ต้องระบุขั้นตอนการทำงานรวมถึงเงื่อนไขต่าง ๆ ที่ชัดเจน ดังนั้น ก่อนจะแก้ปัญหาด้วยคอมพิวเตอร์ นักเรียนจะต้องทำความเข้าใจกับปัญหาและความต้องการให้ชัดเจน แล้วจึงพัฒนาขั้นตอนวิธีที่สามารถใช้งานได้พิจารณาสถานการณ์ต่างๆ ได้
ตัวอย่างที่ 2.1 เลือกอาหารกลางวันที่เหมาะสมกับฉันให้หน่อย
2.1.1 ข้อมูล ข้อมูลประกอบเพิ่มเติม เช่น ประเภท ราคา คุณค่าทางโภชนาการ คุณภาพ และความนิยม
2.1.2 เงื่อนไขที่ชัดเจน
ขั้นตอนวิธีในการแก้ปัญหา
นอกจากข้อมูลและเงื่อนไขที่ชัดเจนแล้ว การพัฒนาโปรแกรมจำเป็นต้องมีขั้นตอนในการแก้ปัญหาที่ชัดเจนด้วย ในส่วนนี้จะออกแบบขั้นตอนวิธีในการแก้ปัญหาโดยใช้ตัวอย่างข้อมูลรายการอาหารกลางวันดังตาราง
ถ้านักเรียนต้องการค้นหาอาหารกลางวันประเภท "อาหารหลัก" โดยเลือกอาหารที่มีคะแนนที่คำนวณจาก (0.6 x คะแนนคุณภาพ) + (0.4 x คะแนนความนิยม) สูงที่สุด สามารถแบ่งขั้นตอนการทำงานได้ 3 ขั้นตอนดังนี้
1.เลือกรายการอาหารทั้งหมดที่เป็นอาหารหลัก
2.จากรายการอาหารหลัก คำนวณคะแนนของอาหารแต่ละชนิดตามเงื่อนไข
3.จากรายการอาหารหลักที่ได้คำนวณคะแนนแล้ว เลือกอาหารที่มีคะแนนสูงที่สุด
จากขั้นตอนการทำงานสามารถสรุปได้ว่ารายการอาหารที่ตรงตามเงื่อนไขทั้งหมด คือ ข้าวยำ เพราะมีคะแนนสูงสุด คือ 7.2 คะแนน เมื่อเข้าใจลำดับการทำงานแล้ว จะระบุขั้นตอนวิธีในสองขั้นตอนแรกได้ดังนี้
ขั้นตอนที่ 1 สร้างรายการคำตอบที่เป็นไปได้ โดยเลือกเฉพาะรายการอาหารหลัก
1.1 พิจารณารายการอาหารทีละรายการ
1.1.1 ถ้าอาหารที่กำลังพิจารณาที่เป็นอาหารหลักแล้ว ให้เพิ่มอาหารนั้นในรายการคำตอบสำหรับขั้นตอนที่ 2 จะดำเนินการต่อจากรายการคำตอบของขั้นตอนที่ 1
ขั้นตอนที่ 2 คำนวณคะแนนสำหรับเลือกอาหารในรายการ
2.1 พิจารณารายการอาหารหลักจากขั้นตอนที่ 1 ทีละรายการจนครบ
2.1.1 ขณะที่พิจารณาอาหารลำดับที่ i (i แทนลำดับที่ของอาหารที่กำลังพิจารณา)
2.1.2 ให้ Q แทนคะแนนคุณภาพของอาหารลำดับที่ i
2.1.3 ให้ R แทนคะแนนความนิยมของอาหารลำดับที่ i
2.1.4 คำนวณคะแนน S เท่ากับ (0.6 x Q) + (0.4 x R)
2.1.5 ให้คะแนนสำหรับจัดอันดับของอาหารลำดับที่ i เท่ากับ S
ขั้นตอนที่ 3 เลือกรายการอาหารที่มีคะแนนสูงสุด
ตัวแปร
ตัวแปร คือ ชื่อที่ใช้แทนข้อมูลขณะใดขณะหนึ่งในขั้นตอนวิธี จากตัวอย่างการเลือกอาหารในรายการอาหารในหัวข้อ 2.1.3 ขั้นตอนวิธีในการแก้ปัญหา พบว่า มีการใช้งานตัวแปร เช่น ตัวแปร Q , R และ S โดยทั่วไปแล้ว ในทางคอมพิวเตอร์ตัวแปรจะถูกใช้เพื่อเก็บข้อมูล และอาจจะมีการเปลี่ยนแปลงค่าได้ตามบริบทการทำงาน
ในการเขียนขั้นตอนวิธีอาจจะระบุว่าให้กำหนดค่าให้กับตัวแปร หรืออาจใช้
สัญลักษณ์ ← ในการเขียน เช่น
x ← 10 จะเป็นการระบุให้ตัวแปร x มีค่าเท่ากับ 10
z ← z+1 จะเป็นการกำหนดให้เพิ่มค่าตัวแปร z ขึ้นอีก 1 กล่าวคือ ถ้าก่อนการทำงานตัวแปร z มีค่าเท่ากับ 10 หลังการทำงานตัวแปร z จะมีค่าเท่ากับ 11
สัญลักษณ์ที่ใช้ในการเขียนขั้นตอนวิธีนอกเหนือจากการใช้สัญลักษณ์ทางคณิตศาสตร์ทั่วไป
← , := , <-- , = หมายถึง การกำหนดค่าให้กับตัวแปร
! , "~" , ¬ หมายถึง นิเสธ
!= , <> หมายถึง การไม่เท่ากัน
>= หมายถึง การเปรียบเทียบมากกว่าหรือเท่ากับ
<= หมายถึง การเปรียบเทียบน้อยกว่าหรือเท่ากับ
** , ^ หมายถึง การยกกำลัง
การแก้ปัญหาด้วยคอมพิวเตอร์นอกจากจะช่วยลดระยะเวลาในการตัดสินใจแล้ว ยังเพิ่มขีดความสามารถในการแก้ปัญหาเมื่อข้อมูลมีจำนวนมากเกินกว่าที่มนุษย์จะคำนวณได้
การระบุข้อมูลเข้า ข้อมูลออก และเงื่อนไขของปัญหา
การแก้ปัญหาด้วยคอมพิวเตอร์นั้น ก่อนที่จะระบุขั้นตอนวิธีที่ชัดเจนได้ จะต้องวิเคราะห์และทำความเข้าใจกับปัญหาเพื่อให้ทราบว่ามีข้อมูลอะไรบ้างที่สามารถใช้ในการประมวลผลได้ มีเงื่อนไขต่าง ๆ อย่างไร ผลลัพธ์ที่ต้องการคืออะไร โดยจะแบ่งข้อมูลที่เกี่ยวข้องกับการทำงานออกเป็นสองส่วน คือ
1. ข้อมูลเข้า (input) เป็นข้อมูลที่ใช้เพื่อประมวลผล
2. ข้อมูลออก (output) เป็นข้อมูลผลลัพธ์ที่ต้องการ
ตัวอย่างที่ 2.2 ปัญหาการหา ห.ร.ม.
พิจารณาตัวอย่างปัญหาการหา ห.ร.ม. จาก หัวข้อที่ 1.2 ในบทที่ 1 นักเรียนสามารถระบุข้อมูลเข้า ข้อมูลออก รวมทั้งเงื่อนไขได้ดังนี้
ข้อมูลเข้า : จำนวนเต็มบวกสองจำนวน a และ b
ข้อมูลออก : จำนวนเต็มบวกหนึ่งจำนวน c ที่มีคุณสมบัติดังนี้
• c เป็นจำนวนเต็มบวก
• c หาร a และ b ลงตัว
• c มีค่ามากที่สุดเท่าที่เป็นไปได้
การออกแบบขั้นตอนวิธี
ตัวอย่างที่ 2.3 ระบบรดน้ำต้นไม้อัตโนมัติ
การตัดสินใจรดน้ำต้นไม้ในขั้นตอนวิธีของระบบรดน้ำต้นไม้อัตโนมัติ ระบบจะต้องอ่านข้อมูลความชื้นของดินแล้วเปรียบเทียบกับค่าที่กำหนดไว้ (สมมติค่าความชื้นที่กำหนดเป็น 0.1 หน่วย) หากค่าความชื้นต่ำกว่าค่าที่กำหนด ให้ระบบส่งสัญญาณเปิดน้ำ และหากมีค่าความชื้นเกินกว่าหรือเท่ากับค่าที่กำหนดไว้ให้ระบบส่งสัญญาณปิดน้ำ
ในส่วนการทำงานหลักของขั้นตอนวิธี คือ การตัดสินใจรดน้ำต้นไม้ มีการทำงานตามลำดับดังนี้
1. อ่านค่าความชื้นของดิน
2. ให้ H แทนค่าความชื้นดังกล่าว
3. ถ้า H < 0.1 แล้ว
3.1 ส่งสัญญาณเปิดน้ำ
ถ้าเงื่อนไขไม่เป็นจริง
3.2 ส่งสัญญาณปิดน้ำ
ส่วนของขั้นตอนวิธีดังกล่าวเป็นการตัดสินใจเพียงครั้งเดียว ดังนั้นเพื่อความสมบูรณ์ของขั้นตอนวิธีที่จะทำให้ระบบรดน้ำต้นไม้มีการอ่านค่าและส่งสัญญาณควบคุมจะต้องทำสม่ำเสมอ จึงต้องสั่งให้ขั้นตอนวิธีด้านบนทำงานซ้ำ ๆ ต่อเนื่องกันไป ดังนี้
ขั้นตอนวิธี : ควบคุมการเปิดปิดน้ำของเครื่องรดน้ำต้นไม้
ข้อมูลเข้า : ค่าความชื้นของดิน
ข้อมูลออก : สัญญาณเปิดปิดน้ำ
1. ทำซ้ำทุก ๆ 1 วินาที
1.1 อ่านค่าความชื้นของดิน
1.2 ให้ H แทนค่าความชื้นดังกล่าว
1.3 ถ้า H < 0.1 แล้ว
1.3.1 ส่งสัญญาณเปิดน้ำ
ถ้าเงื่อนไขไม่เป็นจริง
1.3.2 ส่งสัญญาณปิดน้ำ
ขั้นตอนวิธีดังกล่าวเขียนเป็นผังงานได้ดังรูป
ตัวอย่างที่ 2.3 คะแนนสอบ
พิจารณาสถานการณ์สมมติต่อไปนี้
ครูได้ตรวจข้อสอบของนักเรียน 40 คน และได้ประกาศคะแนนไว้หน้าห้อง หากต้องการหาคะแนน สูงสุด คะแนนต่ำสุด และคำนวณคะแนนเฉลี่ยของนักเรียนทุกคน ในกรณีนี้ระบุข้อมูลเข้า ข้อมูลออกและขั้นตอนวิธี ได้ดังนี้
ขั้นตอนวิธี : หาค่าต่ำที่สุด ค่าสูงที่สุด ค่าเฉลี่ยของข้อมูลในรายการ
ข้อมูลเข้า : รายการคะแนนสอบของนักเรียน 40 คน
ข้อมูลออก : คะแนนสูงสุด คะแนนต่ำสุด คะแนนเฉลี่ย
การออกแบบและพิจารณาเงื่อนไข
1.การสร้างเงื่อนไขอย่างง่าย
การออกแบบเงื่อนไขที่ถูกต้องและชัดเจนจะเป็นปัจจัยสำคัญของการออกแบบขั้นตอนวิธี ซึ่งเงื่อนไขที่กำหนดอาจเป็นเงื่อนไขอย่างง่ายหรือเงื่อนไขที่ซับซ้อน โดยเงื่อนไขอย่างง่าย มักจะเป็นการเปรียบเทียบมากกว่า น้อยกว่า หรือไม่เท่ากัน เช่น การหาค่าสูงสุด มีการใช้เงื่อนไข
ถ้า x > Max แล้ว
ให้ Max ← x
ขั้นตอนวิธีดังกล่าว มีการกำหนดให้การทำงานขึ้นกับเงื่อนไข "x > Max" ซึ่งเป็นรูปแบบที่ง่ายที่สุดโดยเปรียบเทียบค่าของตัวแปร x และค่าของตัวแปร Max
ในทางตรรกศาสตร์ "ประพจน์" (proposition) คือ ข้อความ ที่สามารถบอกค่าความจริงได้ ซึ่งจะมีค่าเป็นจริงหรือเท็จเท่านั้น ในการกำหนดเงื่อนไขในขั้นตอนวิธีมักจะเขียนในรูปแบบของประโยคเปิดซึ่งเป็นประโยคที่มีตัวแปร เช่น x > Max และเมื่อแทนค่าตัวแปรแล้ว ประโยคเปิดจะกลายเป็นประพจน์ เพราะสามารถบอกค่าความจริงได้
ตัวอย่างที่ 2.4 ตรวจสอบพิกัดโรงเรียน
พื้นที่ของโรงเรียนเป็นรูปสี่เหลี่ยมมุมฉากที่มีด้านขนานกับแกนตั้งและแกนนอน โดยมีพิกัดมุมล่างซ้ายอยู่ที่ตำแหน่ง (1,1) และมุมบนขวาในแผนที่อยู่ที่ (12,10) นักเรียนคนหนึ่งอยู่ที่ตำแหน่ง (x,y) เงื่อนไขที่ระบุว่านักเรียนอยู่ในโรงเรียนสามารถเขียนได้หลายแบบ เช่น
เงื่อนไข แบบที่ 1 : พิกัด (x,y) อยู่ในขอบเขตของโรงเรียน
เงื่อนไข แบบที่ 2 : 1 < x < 12 และ 1 < y < 10
เงื่อนไข แบบที่ 3 : (1 < x) และ (x < 12) และ (1 < y) และ (y < 10)
พิจารณาพื้นที่แสดงเป็นสีเทาดังรูป เขียนเงื่อนไขที่ระบุว่าจุด (x,y) อยู่ในพื้นที่ดังกล่าว
ถ้า 5 < x < 8 และ 0 < y < 9 หรือ 0 < x < 14 และ 4 < y < 6 แล้ว
ให้แสดงว่า “จุด (x,y) อยู่ในพื้นที่”
มิฉะนั้น
ให้แสดงว่า “จุด (x,y) ไม่อยู่ในพื้นที่”
การทำซ้ำ
การแก้ปัญหาอาจต้องมีการทำงานลักษณะเดียวกันซ้ำหลายรอบ ในหัวข้อนี้จะได้ศึกษารูปแบบการเขียนขั้นตอนวิธีการทำซ้ำแบบต่าง ๆ
พิจารณาข้อมูลในรายการ ทีละตัว จนครบ
1. ให้ตัวแปร x แทนข้อมูลที่พิจารณาอยู่
2. ประมวลผลตัวแปร x
การทำซ้ำในรายการ
การทำซ้ำในรายการจะต้องพิจารณาข้อมูลในรายการจนครบทุกตัว ซึ่งเป็นรูปแบบหนึ่งของการเขียนขั้นตอนวิธีเพื่อพิจารณาข้อมูลจนครบทุกตัว ดังนี้
จากรูปแบบการทำซ้ำดังกล่าว ถ้านักเรียนมีเงิน M บาท และมีรายการราคาสินค้า A สามารถเขียนขั้นตอนวิธีนับจำนวนสินค้าที่มีราคาไม่เกิน M บาทได้ดังนี้
ขั้นตอนวิธี : หาจำนวนสินค้าที่มีราคาไม่เกิน M บาท
ข้อมูลเข้า : ราคาสินค้าในรายการ A
ข้อมูลออก : จำนวนสินค้าที่มีราคาไม่เกิน M บาท
1. ให้ตัวแปร count ← 0
2. พิจารณาข้อมูลราคาสินค้าในรายการ A ทีละจำนวน จนครบ
2.1 ให้ x แทนข้อมูลราคาสินค้าที่พิจารณาอยู่
2.2 ถ้า x น้อยกว่าหรือเท่ากับ M แล้ว
ให้ count ← count + 1
3. คืนค่าจำนวนเท่ากับ count
ตัวอย่างที่ 2.5
การค้นหาข้อมูลในรายการ กล่าวคือ เรามีรายการ A และต้องการค้นหาข้อมูล target ในรายการ รูปแบบการเขียนการทำซ้ำ ที่สั้นและกระชับ จะระบุลำดับของข้อมูล (ดัชนี) แสดงได้ดังนี้
ขั้นตอนวิธี : หาข้อมูล target ในรายการ A
ข้อมูลเข้า : ข้อมูลทุกตัวในรายการ A
ข้อมูลออก : ค่าดัชนีของ target ในรายการ A
1. ให้ L ← จำนวนข้อมูลในรายการ A
2. ให้ ดัชนี i มีค่าตั้งแต่ 1, 2, 3,... จนถึง L
3. ให้พิจารณาข้อมูลในรายการ A ทีละตัว
3.1 ให้ y ← ข้อมูลตัวที่ i ในรายการ A
3.2 ถ้า y = target แล้ว
คืนค่า i และจบการทำงาน
4. ตอบว่าไม่พบข้อมูล target และจบการทำงาน
สมมติว่ารายการ A มีข้อมูลดังนี้
95 69 71 85 60 50 51 12 51 3
ตัวอย่างการทำงานตามขั้นตอนวิธีหาข้อมูล 85 (target) ในรายการ A แสดงได้ดังนี้
ขั้นตอนวิธีจะทำงานดังนี้
1. ตัวแปร L จะมีค่าเท่ากับ 10
2. รอบแรก ดัชนี i = 1 จากนั้นพิจารณา y เป็นข้อมูลตัวที่ 1 ในรายการ นั่นคือ y = 95
ซึ่งไม่ตรงกับ target
3. รอบที่สอง ดัชนี i = 2 จากนั้นพิจารณา y เป็นข้อมูลตัวที่ 2 ในรายการ นั่นคือ y = 69
ซึ่งไม่ตรงกับ target
4. รอบที่สาม ดัชนี i = 3 จากนั้นพิจารณา y เป็นข้อมูลตัวที่ 3 ในรายการ นั้นคือ y = 71
ซึ่งไม่ตรงกับ target
5.รอบที่สี่ ดัชนี i = 4 จากนั้นพิจารณา y เป็นข้อมูลตัวที่ 4 ในรายการ นั่นคือ y = 85
ซึ่งเท่ากับ target ขั้นตอนวิธีจะคืนค่า 4 และจบการทำงาน
การทำซ้ำด้วยเงื่อนไข
ตัวอย่างที่ 2.6 เกมทายเลข
เกมทายเลข จะสุ่มจำนวนเต็มระหว่าง 1 - 100 มาเป็นคำตอบหนึ่งจำนวน และให้ผู้เล่นทายจำนวนที่เป็นคำตอบ จากนั้นจะให้คำใบ้ว่าจำนวนที่ทายมากกว่าหรือน้อยกว่าคำตอบ หรือตอบว่าเป็นคำตอบที่ถูกต้อง ซึ่งมีขั้นตอนวิธีดังนี้
ขั้นตอนวิธี : เปรียบเทียบจำนวนที่ผู้เล่นทายกับคำตอบที่สุ่มไว้
ข้อมูลเข้า : จำนวนที่ผู้เล่นทาย
ข้อมูลออก : "ค่าน้อยเกินไป" "ค่ามากเกินไป" "ทายถูกต้อง"
1. ให้ secret ← สุ่มจำนวนเต็มที่มีค่าระหว่าง 1 ถึง 100
2. ทำซ้ำไปเรื่อย ๆ
2.1 ให้ answer ← จำนวนเต็มที่ผู้เล่นทาย
2.2 ถ้า answer < secret แล้ว
ตอบผู้เล่นว่า "ค่าน้อยเกินไป"
2.3 ถ้า answer > secret แล้ว
ตอบผู้เล่นว่า "ค่ามากเกินไป"
2.4 ถ้า answer = secret แล้ว
2.4.1 ตอบผู้เล่นว่า "ทายถูกต้อง"
2.4.2 จบการทำซ้ำ
จากตัวอย่างที่ 2.6 รูปแบบของการเขียนการทำซ้ำโดยไม่ระบุเงื่อนไขในส่วนเริ่มต้นของการทำซ้ำแต่จะระบุเงื่อนไขการจบการทำซ้ำ answer = secret
การจัดเรียงและค้นหาข้อมูล
การจัดเรียงข้อมูล
การจัดเรียงข้อมูลเป็นสิ่งที่พบอยู่เสมอ เมื่อต้องประมวลผลข้อมูลจำนวนมาก เช่น เมื่อครูตรวจข้อสอบและต้องการบันทึกคะแนนลงในรายงานที่เรียงชื่อนักเรียนตามลำดับเลขประจำตัว หรือเมื่อนักเรียนเก็บข้อมูลจากแบบสำรวจ และต้องการเรียงแบบสำรวจตามเงื่อนไขที่ต้องการ การเรียงลำดับข้อมูลด้วยเงื่อนไขที่เหมาะสมจะทำให้การค้นหาข้อมูลทำได้อย่างมีประสิทธิภาพ โดยทั่วไปการเรียงลำดับจำนวนเต็ม อาจใช้การจัดเรียงข้อมูลได้ 2 แบบ คือ
1.การจัดเรียงแบบเลือก (selection sort)
เลือกข้อมูลที่มีค่าน้อยที่สุดมาไว้เป็นอันดับแรกและขีดทับข้อมูลที่เลือกมาแล้ว จากนั้นในรายการข้อมูลที่เหลืออยู่ จะเลือกข้อมูลที่มีค่าน้อยที่สุดมาเป็นข้อมูลในรายการคำตอบอันดับที่สอง จากนั้น ก็จะเลือกข้อมูลที่น้อยที่สุดที่เหลือมาเป็นอันดับที่สาม ไปเรื่อย ๆ การจัดเรียงแบบเลือกแสดงดังตัวอย่างที่ 2.7
ตัวอย่างที่ 2.7 เรียงลำดับจำนวนเต็ม
83 56 97 61 6 7 78 63 93 12
87 50 44 7 54 42 90 34 56 62
จากตัวอย่างที่ 2.7 สามารถเขียนขั้นตอนวิธี สำหรับการจัดเรียงข้อมูลแบบเลือกได้ดังนี้
ขั้นตอนวิธี : การเรียงลำดับข้อมูลแบบเลือก
ข้อมูลเข้า : รายการข้อมูล L
ข้อมูลออก : รายการคำตอบ S ที่เรียงลำดับแล้ว
1. ให้ S แทนรายการคำตอบ โดยเมื่อเริ่มต้น S จะเป็นรายการว่าง
2. ให้ N ← จำนวนข้อมูลในรายการ L
3. ทำซ้ำ N รอบ
3.1 เลือกข้อมูลที่น้อยที่สุดจากรายการ L ที่ยังไม่ถูกขีดทับ และแทนข้อมูลนั้นด้วย M
3.2 ขีดทับข้อมูล M ในรายการ L
3.3 เพิ่ม M ต่อท้ายรายการคำตอบ S
1. รายการคำตอบ : -
รายการข้อมูลที่เหลือ : 83 56 97 61 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
2. รายการคำตอบ : 6
รายการข้อมูลที่เหลือ : 83 56 97 61 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
3. รายการคำตอบ : 6 7
รายการข้อมูลที่เหลือ : 83 56 97 61 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
4. รายการคำตอบ : 6 7 7
รายการข้อมูลที่เหลือ : 83 56 97 61 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
5. รายการคำตอบ : 6 7 7 12
รายการข้อมูลที่เหลือ : 83 56 97 61 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
6. รายการคำตอบ : 6 7 7 12 34
รายการข้อมูลที่เหลือ : 83 56 97 61 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
.
.
.
20. รายการคำตอบ : 6 7 7 12 34 42 44 50 54 56 56 61 62 63 78 83 87 90 93 97
รายการข้อมูลที่เหลือ : -
2.การจัดเรียงแบบแทรก (insertion sort)
การเรียงลำดับแบบแทรก เป็นการนำข้อมูลที่ยังไม่ได้ถูกพิจารณามาแทรกในตำแหน่งที่ถูกต้องโดยค่าของข้อมูลที่กำลังพิจารณาต้องมากกว่าหรือเท่ากับค่าของข้อมูลตัวหน้า และน้อยกว่าหรือเท่ากับค่าของข้อมูลตัวหลังในรายการที่เรียงลำดับแล้ว การจัดเรียงข้อมูลแบบแทรกแสดงดังตัวอย่าง
1. รายการคำตอบ : -
รายการข้อมูลที่เหลือ : 83 56 97 61 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
2. รายการคำตอบ : 83
รายการข้อมูลที่เหลือ : 56 97 61 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
3. รายการคำตอบ : 56 83
รายการข้อมูลที่เหลือ : 97 61 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
4. รายการคำตอบ : 56 83 97
รายการข้อมูลที่เหลือ : 61 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
5. รายการคำตอบ : 56 61 83 97
รายการข้อมูลที่เหลือ : 6 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
6. รายการคำตอบ : 6 56 61 83 97
รายการข้อมูลที่เหลือ : 7 78 63 93 12 87 50 44 7 54 42 90 34 56 62
.
.
.
20. รายการคำตอบ : 6 7 7 12 34 42 44 50 54 56 56 61 62 63 78 83 87 90 93 97
รายการข้อมูลที่เหลือ : -
การค้นหาข้อมูล
ในตัวอย่างที่ 2.5 นักเรียนได้ศึกษาการค้นหาข้อมูล target ในรายการ A แล้ว ขั้นตอนวิธีดังกล่าวเรียกว่าขั้นตอนวิธีค้นหาแบบตามลำดับ (sequential search) ขั้นตอนวิธีดังกล่าวจะพิจารณาข้อมูลทุกตัวในรายการทีละตัว ซึ่งเป็นขั้นตอนวิธีที่ดีที่สุดที่เป็นไปได้ในกรณีที่ข้อมูลไม่มีการเรียงลำดับ
อย่างไรก็ตามในกรณีที่รายการ A มีการเรียงลำดับข้อมูลแล้ว จะมีขั้นตอนวิธีในการค้นหาที่มีประสิทธิภาพดีกว่ามาก
จากตัวอย่าง 2.6 ลองพิจารณากลยุทธ์ในการทายที่เริ่มทายตั้งแต่ 1, 2, 3 ไปจนถึง 100 วิธีการนี้ถ้าคำตอบเป็น 95 นักเรียนจะต้องทายถึง 95 ครั้ง ในทำนองกลับกัน ถ้าใช้กลยุทธ์ในการทายจากมากไปหาน้อย กล่าวคือ เริ่มทายตั้งแต่ 100, 99, 98 ลงไปจนถึง 1 ถ้าคำตอบมีค่าน้อย นักเรียนก็จะต้องใช้จำนวนครั้งในการทายมาก สังเกตว่าด้วยกลยุทธ์ทั้งสองแบบ นักเรียนไม่ได้ใช้ประโยชน์จากสมบัติการเรียงลำดับของตัวเลขเลย
กลยุทธ์ที่มีประสิทธิภาพมากกว่าในการเล่นเกมทายเลขคือเริ่มต้นทายตัวเลขที่อยู่ตรงกลางของขอบเขต ที่เป็นไปได้ ถ้าตัวเลขที่ทายไม่ถูกต้อง ให้พิจารณาปรับขอบเขตของคำตอบที่เป็นไปได้จากผลการทายที่ได้รับ เช่น ถ้าขอบเขตของคำตอบอยู่ระหว่าง 1 - 7 และทายว่าคำตอบคือ 4 แต่พบว่า 4 เป็นคำทายที่มากเกินไป จะสามารถปรับขอบเขตได้เป็น 1 - 3 แนวคิดดังกล่าวสามารถแสดงเป็นกลยุทธ์การทายเลขได้ดังรูป ที่ใช้จำนวนการทายไม่เกิน 3 ครั้ง ซึ่งจะเป็นกรณีที่แย่ที่สุด (worst case) ของกลยุทธ์นี้
ถ้าต้องการค้นหาข้อมูล target ในรายการที่เรียงลำดับแล้ว กลยุทธ์การทายเลขที่กล่าวมาข้างต้นสามารถประยุกต์ใช้ในการค้นหา target ได้ โดยการทายดัชนีของ target ในรายการ A ที่เรียงลำดับแล้วกล่าวคือ ถ้ารายการ A มีข้อมูล n จำนวน เมื่อเริ่มต้นดัชนีที่เป็นไปได้ของ target จะมีค่าระหว่าง 1 - n สามารถทายดัชนี i ที่อยู่ตรงกลางของขอบเขตนี้ หลังจากนั้นสามารถตัดสินคำตอบว่าดัชนีที่ทายไปนั้นเป็นดัชนีที่ถูกต้อง เป็นดัชนีที่มีค่าน้อยเกินไป หรือเป็นดัชนีที่มีค่ามากเกินไป โดยเปรียบเทียบ target กับข้อมูลลำดับที่ i ในรายการ และนำผลที่ได้ไปปรับขอบเขตของดัชนีที่เป็นไปได้เพื่อใช้ในการทายรอบถัดไป พิจารณาตัวอย่างการค้นหา John จากรายการข้อมูลที่เรียงลำดับตามพจนานุกรมดังต่อไปนี้
วิธีการค้นหาลักษณะนี้เรียกว่าเป็นการค้นหาแบบทวิภาค (binary search) เพราะว่าแต่ละขั้นจะแบ่งรายการข้อมูลออกเป็นสองส่วน ในกรณีที่ข้อมูลมีการเรียงลำดับแล้ว ขั้นตอนวิธีดังกล่าวเขียนได้ดังนี้
ขั้นตอนวิธี : การค้นหาข้อมูลแบบทวิภาค
ข้อมูลเข้า : รายการ A ที่มีข้อมูลเรียงตามลำดับจากน้อยไปหามาก
ข้อมูลออก : ดัชนี i ในรายการ A ที่เป็นตำแหน่งของข้อมูล target
1. ให้ n ← จำนวนข้อมูลในรายการ A
2. ให้ left ← 1
3. ให้ right ← n // ขั้นตอนวิธีจะเก็บขอบเขตของดัชนีเป็นไปได้ว่าอยู่ระหว่าง left - right
4. ทำซ้ำขณะที่ left <= right
4.1 ให้ mid ← (left + right)/2 // หารโดยปัดเศษทิ้ง
4.2 ให้ x ← ข้อมูลลำดับที่ mid ในรายการ A
4.3 ถ้า x = target แล้ว
ให้คืนค่าดัชนีเท่ากับ mid และจบการทำงาน
4.4 ถ้า x < target แล้ว // ดัชนี mid มีค่าน้อยเกินไป
ให้ left ← mid + 1 // ในกรณีนี้ให้ปรับขอบเขตล่าง
4.5 ถ้า x > target แล้ว // ดัชนี mid มีค่ามากเกินไป
ให้ right ← mid – 1 // ในกรณีนี้ให้ปรับขอบเขตบน
5. คืนคำตอบว่าไม่พบข้อมูล target ในรายการ A
จำนวนข้อมูลทั้งหมด (n) : 7
เนื่องจากขอบเขตของดัชนีที่เป็นไปได้คือ 1 – 7 ดัชนีแรกที่จะทายคือ 4 เมื่อพิจารณาข้อมูลลำดับที่ 4 ที่มีค่าเป็น James แล้ว พบว่า John นั้นมาหลัง James จึงปรับขอบเขตของดัชนีเป็น 5 - 7 ขั้นถัดไปจะทายว่าดัชนีมีค่าเป็น 6 เมื่อพิจารณาข้อมูลลำดับที่ 6 ที่มีค่าเป็น Mary แล้ว พบว่า John มาก่อน Mary ทำให้ต้องปรับขอบเขตของดัชนีเป็น 5 ซึ่งเป็นค่าดัชนีที่เป็นไปได้เพียงค่าเดียว เมื่อพิจารณา ข้อมูลลำดับดังกล่าวจะพบชื่อ John อยู่ที่ตำแหน่งนั้น