การค้นโดยการประมาณช่วง (อังกฤษ: Interpolation search) หรือในบางครั้งเรียกว่า การค้นโดยการคาดการณ์ (อังกฤษ: Predictive search, Extrapolation search) เป็นขั้นตอนวิธี (algorithm) สำหรับค้นหาค่าของคำหลัก (key value) ที่ได้รับ(อาจได้รับจากการพิมพ์) โดยทำการค้นหาจาก ดัชนีแถวลำดับหนึ่งๆที่ถูกจัดเรียงอย่างมีระเบียบแบบแผนแล้ว ซึ่งวิธีนี้คล้ายกับวิธีที่เราค้นหา รายชื่อในสมุดโทรศัพท์ของโทรศัพท์มือถือ
ในการค้นหาแต่ละขั้นตอนจะมีการคำนวณหรือ คาดการณ์ว่าสิ่งที่ค้นหานั้น น่าจะอยู่ที่ไหนของช่วงการค้นหาที่เหลือ แม้เทคนิคนี้จะมีลักษณะคล้ายกับ (Binary search) แต่ก็ไม่ใช่เสียทีเดียว ยกตัวอย่างเช่น การค้นหาหมายเลขโทรศัพท์ของนายสมชาย จะไม่ไปหาที่ตรงกลางของสมุดโทรศัพท์ แต่จะไปหายังตำแหน่งที่เริ่มต้นด้วยตัว “ส” โดยการประมาณว่าอยู่ที่ตรงหน้าที่เท่าไรของสมุดโทรศัพท์ แล้วค่อย ๆ เลือกหน้าต่อไปที่ใกล้เคียงที่สุดจนกว่าจะพบ ดังนั้น แทนที่จะใช้ (Binary search) ที่เริ่มต้นตรงกลางเสมอ ก็เปลี่ยนมาใช้การค้นโดยการประมาณช่วง (Interpolation Search) ซึ่งเป็นการค้นหาตำแหน่งโดยการประมาณ
ขั้นตอนวิธี
ดังที่ได้อธิบายลักษณะการทำงานไปบ้างแล้ว การค้นโดยการประมาณช่วง (Interpolation Search) นี้อาศัยการคำนวณตำแหน่งที่น่าจะเป็นตำแหน่งของค่าคำหลักในแถวลำดับหนึ่งๆที่ถูกจัดเรียงเรียบร้อยแล้ว ซึ่งคำนวณจากค่าของคำหลักที่ต้องการค้นหา และ ค่าขอบบน ค่าขอบล่าง ของช่วงการค้นหาช่วงหนึ่ง จาก ช่วงการค้นหาทั้งหมด ซึ่งเราสามารถลดขนาดของช่วงการค้นหาที่เหลือได้ โดยการปรับเปลี่ยน ค่าขอบบน หรือค่าขอบล่างไปเรื่อยๆ จนกว่าจะพบ ค่าที่ต้องกาค้นหา
กำหนดให้
- หมายถึง ค่าขอบล่าง
- หมายถึง ค่ากึ่งกลาง
- หมายถึง ค่าขอบบน
- หมายถึง ค่าของแถวลำดับ ณ ตำแหน่งขอบล่าง
- หมายถึง ค่าของแถวลำดับ ณ ตำแหน่งตามค่ากึ่งกลาง
- หมายถึง ค่าของแถวลำดับ ณ ตำแหน่งขอบบน
- หมายถึง ค่าที่ต้องการค้นหา
โดยมีขั้นตอนการทำงานดังนี้
- เริ่มต้นให้ และ ขนาดของแถวลำดับ
- เริ่มการทำงานแบบวงวนด้วยเงื่อนไข และ
- หาค่า จาก
- เริ่มต้นเช็คเงื่อนไขภายในวงวนเพื่อปรับค่า หรือ
- ถ้า (ถ้าไม่ใช่ ข้ามไปทำข้อ 2.) ปรับค่า เป็น
- ถ้า (ถ้าไม่ใช่ ข้ามไปทำข้อ 3.) ปรับค่า เป็น
- ได้ค้นพบตำแหน่งของค่าที่ต้องการค้นหา ในแถวลำดับนี้แล้ว ทำการคืนค่ากลับ นั้นก็คือ คืนค่า กลับไป
- ขั้นตอนนี้หมายถึงปรับค่า และ ไปเรื่อยๆจนหลุดจากวงวนแล้วยังไม่พบ ตำแหน่งที่ต้องการค้นหาดังกล่าว ให้ทำการตรวจเงื่อนไขว่า ถ้า (ถ้าไม่ใช่ ข้ามไปทำข้อ 6.) ถ้าใช่ หมายถึงค่า คือค่าตำแหน่งของค่าที่ต้องการค้นหานั้นเอง ทำการคืนค่ากลับ คือ คืนค่า กลับไป
- ขั้นตอนนี้หมายถึง ไม่สามารถหาตำแหน่งของค่าที่ต้องการค้นหาได้ ทำการคืนค่า กลับไป
รหัสเทียม
function interpolationSearch(int[] sortedArray, int toFind){ // กำหนดให้ฟังก์ชันนี้ มีการรับค่าพารามิเตอร์เป็น แถวลำดับที่จะทำการค้นหา และ ค่าที่ต้องการค้นหา // และคืนค่าเป็นตำแหน่งของแถวลำดับที่เก็บค่า ตรงกับ ค่าของ tofind ส่วนกรณีที่หาไม่พบจะคืน -1 int low = 0; int high = sortedArray.length - 1; int mid; while (sortedArray[low] <= toFind && sortedArray[high] >= toFind) { mid = low + ((toFind - sortedArray[low]) * (high - low)) / (sortedArray[high] - sortedArray[low]); if(sortedArray[mid] < toFind) low = mid + 1; else if (sortedArray[mid] > toFind) high = mid - 1; else return mid; } if(sortedArray[low] == toFind) return low; else return -1; // กรณีที่หาไม่พบ จะคืนค่า -1 }
ประสิทธิภาพการทำงาน
การค้นโดยการประมาณช่วง (interpolation search) ในกรณีเฉลี่ยการค้นลักษณะนี้จะมีประสิทธิภาพเท่ากับ ซึ่งดีกว่าการ (Binary search) ที่มีประสิทธิภาพเท่ากับ แต่ในกรณีโชคร้ายคือข้อมูลมีการกระจายไม่สม่ำเสมอเลย เช่น (1,2,4,8,16,..) การค้นหาลักษณะนี้จะมีประสิทธิภาพแย่ที่สุด ซึ่งจะกลายเป็นแบบ (Linear search) มีประสิทธิภาพเท่ากับ ดังนั้นการค้นโดยการประมาณช่วง (interpolation search) จะมีประสิทธิภาพดีเมื่อใช้กับข้อมูลที่ค่าของคำหลัก (key value) มีกระจายที่ค่อนข้างสม่ำเสมอ เช่น (1,3,4,5,7,9,10,…) และจะมีประสิทธิภาพดีที่สุดเมื่อใช้กับข้อมูลที่ค่าของคำหลัก (key value) มีกระจายอย่างสม่ำเสมอ (Uniformly Distributed) เช่น (1,2,4,6,8,10,..)
การนำไปประยุกต์ใช้งาน
การประยุกต์ใช้งานของขั้นตอนวิธี การค้นโดยการประมาณช่วง (Interpolation Search) ที่เราพบเห็นกันบ่อยในชีวิตประจำวัน เช่น การค้นหารายชื่อในสมุดโทรศัพท์ของโทรศัพท์มือถือ การค้นหาคำในพจนานุกรมอิเลกทรอนิกส์ หรือในพจนานุกรมออนไลน์ การค้นหารายชื่อหนังสือผ่านระบบสารสนเทศ ของร้านหนังสือ ฯลฯ โดยบางครั้งก็มีการนำไปประยุกต์ใช้งานร่วมกับขั้นตอนวิธีอื่นๆเพื่อให้มีประสิทธิภาพมากขึ้นด้วย
ศึกษาเพิ่มเติม
- (Binary search)
- (Linear search)
- ตารางแฮช (Hash table)
- Ternary search
อ้างอิง
- Weiss, Mark Allen (2006). Data structures and problem solving using Java, Pearson Addison Wesley
- Armenakis, A. C., Garey, L. E., Gupta, R. D., An adaptation of a root finding method to searching ordered disk files, BIT Numerical Mathematics, Volume 25, Number 4 / December, 1985.
- Sedgewick, Robert (1990), Algorithms in C, Addison-Wesley
- การค้นหาข้อมูล[]
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
karkhnodykarpramanchwng xngkvs Interpolation search hruxinbangkhrngeriykwa karkhnodykarkhadkarn xngkvs Predictive search Extrapolation search epnkhntxnwithi algorithm sahrbkhnhakhakhxngkhahlk key value thiidrb xacidrbcakkarphimph odythakarkhnhacak dchniaethwladbhnungthithukcderiyngxyangmiraebiybaebbaephnaelw sungwithinikhlaykbwithithierakhnha raychuxinsmudothrsphthkhxngothrsphthmuxthux inkarkhnhaaetlakhntxncamikarkhanwnhrux khadkarnwasingthikhnhann nacaxyuthiihnkhxngchwngkarkhnhathiehlux aemethkhnikhnicamilksnakhlaykb Binary search aetkimichesiythiediyw yktwxyangechn karkhnhahmayelkhothrsphthkhxngnaysmchay caimiphathitrngklangkhxngsmudothrsphth aetcaiphayngtaaehnngthierimtndwytw s odykarpramanwaxyuthitrnghnathiethairkhxngsmudothrsphth aelwkhxy eluxkhnatxipthiiklekhiyngthisudcnkwacaphb dngnn aethnthicaich Binary search thierimtntrngklangesmx kepliynmaichkarkhnodykarpramanchwng Interpolation Search sungepnkarkhnhataaehnngodykarpramankhntxnwithidngthiidxthibaylksnakarthanganipbangaelw karkhnodykarpramanchwng Interpolation Search nixasykarkhanwntaaehnngthinacaepntaaehnngkhxngkhakhahlkinaethwladbhnungthithukcderiyngeriybrxyaelw sungkhanwncakkhakhxngkhahlkthitxngkarkhnha aela khakhxbbn khakhxblang khxngchwngkarkhnhachwnghnung cak chwngkarkhnhathnghmd sungerasamarthldkhnadkhxngchwngkarkhnhathiehluxid odykarprbepliyn khakhxbbn hruxkhakhxblangiperuxy cnkwacaphb khathitxngkakhnha kahndih low displaystyle low hmaythung khakhxblang mid displaystyle mid hmaythung khakungklang high displaystyle high hmaythung khakhxbbn Array low displaystyle Array low hmaythung khakhxngaethwladb n taaehnngkhxblang Array mid displaystyle Array mid hmaythung khakhxngaethwladb n taaehnngtamkhakungklang Array high displaystyle Array high hmaythung khakhxngaethwladb n taaehnngkhxbbn toFind displaystyle toFind hmaythung khathitxngkarkhnha odymikhntxnkarthangandngni erimtnih low 0 displaystyle low 0 aela high displaystyle high khnadkhxngaethwladb 1 displaystyle 1 erimkarthanganaebbwngwndwyenguxnikh Array low toFind displaystyle Array low leq toFind aela Array high tofind displaystyle Array high geq tofind hakha mid displaystyle mid cak mid low toFind Array low high low Array high Array low displaystyle mid low left frac left toFind Array low right times left high low right Array high Array low right erimtnechkhenguxnikhphayinwngwnephuxprbkha low displaystyle low hrux high displaystyle high tha Array mid lt toFind displaystyle Array mid lt toFind thaimich khamipthakhx 2 prbkha low displaystyle low epn low mid 1 displaystyle low mid 1 tha Array mid gt toFind displaystyle Array mid gt toFind thaimich khamipthakhx 3 prbkha high displaystyle high epn high mid 1 displaystyle high mid 1 idkhnphbtaaehnngkhxngkhathitxngkarkhnha inaethwladbniaelw thakarkhunkhaklb nnkkhux khunkha mid displaystyle mid klbip khntxnnihmaythungprbkha low displaystyle low aela high displaystyle high iperuxycnhludcakwngwnaelwyngimphb taaehnngthitxngkarkhnhadngklaw ihthakartrwcenguxnikhwa tha Array low toFind displaystyle Array low toFind thaimich khamipthakhx 6 thaich hmaythungkha low displaystyle low khuxkhataaehnngkhxngkhathitxngkarkhnhannexng thakarkhunkhaklb khux khunkha low displaystyle low klbip khntxnnihmaythung imsamarthhataaehnngkhxngkhathitxngkarkhnhaid thakarkhunkha 1 displaystyle 1 klbiprhsethiymfunction interpolationSearch int sortedArray int toFind kahndihfngkchnni mikarrbkhapharamietxrepn aethwladbthicathakarkhnha aela khathitxngkarkhnha aelakhunkhaepntaaehnngkhxngaethwladbthiekbkha trngkb khakhxng tofind swnkrnithihaimphbcakhun 1 int low 0 int high sortedArray length 1 int mid while sortedArray low lt toFind amp amp sortedArray high gt toFind mid low toFind sortedArray low high low sortedArray high sortedArray low if sortedArray mid lt toFind low mid 1 else if sortedArray mid gt toFind high mid 1 else return mid if sortedArray low toFind return low else return 1 krnithihaimphb cakhunkha 1 prasiththiphaphkarthangankarkhnodykarpramanchwng interpolation search inkrniechliykarkhnlksnanicamiprasiththiphaphethakb O log log n displaystyle O left log log n right sungdikwakar Binary search thimiprasiththiphaphethakb O log n displaystyle O left log n right aetinkrniochkhraykhuxkhxmulmikarkracayimsmaesmxely echn 1 2 4 8 16 karkhnhalksnanicamiprasiththiphaphaeythisud sungcaklayepnaebb Linear search miprasiththiphaphethakb O n displaystyle O left n right dngnnkarkhnodykarpramanchwng interpolation search camiprasiththiphaphdiemuxichkbkhxmulthikhakhxngkhahlk key value mikracaythikhxnkhangsmaesmx echn 1 3 4 5 7 9 10 aelacamiprasiththiphaphdithisudemuxichkbkhxmulthikhakhxngkhahlk key value mikracayxyangsmaesmx Uniformly Distributed echn 1 2 4 6 8 10 karnaipprayuktichngankarprayuktichngankhxngkhntxnwithi karkhnodykarpramanchwng Interpolation Search thieraphbehnknbxyinchiwitpracawn echn karkhnharaychuxinsmudothrsphthkhxngothrsphthmuxthux karkhnhakhainphcnanukrmxielkthrxniks hruxinphcnanukrmxxniln karkhnharaychuxhnngsuxphanrabbsarsneths khxngranhnngsux l odybangkhrngkmikarnaipprayuktichnganrwmkbkhntxnwithixunephuxihmiprasiththiphaphmakkhundwysuksaephimetim Binary search Linear search tarangaehch Hash table Ternary searchxangxingWeiss Mark Allen 2006 Data structures and problem solving using Java Pearson Addison Wesley Armenakis A C Garey L E Gupta R D An adaptation of a root finding method to searching ordered disk files BIT Numerical Mathematics Volume 25 Number 4 December 1985 Sedgewick Robert 1990 Algorithms in C Addison Wesley karkhnhakhxmul lingkesiy