การค้นหาข้อมูลในปัจจุบันนั้นมีความสำคัญพอๆกับการเก็บรวบรวมข้อมูล เพราะหากเราไม่สามารถค้นหาข้อมูลที่ต้องการได้อย่างรวดเร็ว และแม่นยำ ประโยชน์ของข้อมูลมหาศาลนั้นก็อาจเท่ากับศูนย์ได้ เราจะมาพูดถึง 5 Algorithm เกี่ยวกับการค้นหาที่ควรรู้ และจะให้ตัวอย่างโค้ดภาษา Python ที่ช่วยในการทำความเข้าใจได้ง่ายขึ้น
Linear Search เป็นวิธีการค้นหาที่พื้นฐานที่สุด หลักการคือการตรวจสอบทุกตัวของข้อมูลจนกว่าจะเจอข้อมูลที่ต้องการหรือสิ้นสุดข้อมูล
ตัวอย่างโค้ด:
def linear_search(arr, x):
for i in range(len(arr)):
if arr[i] == x:
return i
return -1
arr = [5, 2, 9, 1, 5, 6]
x = 9
result = linear_search(arr, x)
print("Element is present at index", result) if result != -1 else print("Element is not present in array")
Binary Search เป็นวิธีการค้นหาแบบมีการเรียงลำดับข้อมูลก่อน จากนั้นจะค้นหาโดยการแบ่งข้อมูลออกเป็นสองส่วนในแต่ละครั้งที่ตรวจสอบ
ตัวอย่างโค้ด:
def binary_search(arr, x):
low = 0
high = len(arr) - 1
mid = 0
while low <= high:
mid = (high + low) // 2
if arr[mid] < x:
low = mid + 1
elif arr[mid] > x:
high = mid - 1
else:
return mid
return -1
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
x = 4
result = binary_search(arr, x)
print("Element is present at index", result) if result != -1 else print("Element is not present in array")
Jump Search เป็นการปรับปรุงเล็กน้อยจาก Linear Search โดยจะกระโดดไปในลำดับข้อมูลตามระยะที่กำหนดแล้วจะค้นหาแบบ Linear Search ภายในช่วงที่กระโดดมา
ตัวอย่างโค้ด:
import math
def jump_search(arr, x):
length = len(arr)
jump = int(math.sqrt(length))
left, right = 0, 0
while left < length and arr[left] <= x:
right = min(length - 1, left + jump)
if arr[left] <= x <= arr[right]:
break
left += jump
if left >= length or arr[left] > x:
return -1
right = min(right, length - 1)
for i in range(left, right + 1):
if arr[i] == x:
return i
return -1
arr = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]
x = 15
result = jump_search(arr, x)
print("Element is present at index", result) if result != -1 else print("Element is not present in array")
Interpolation Search คือการปรับปรุงจาก Binary Search โดยการคาดการณ์ตำแหน่งที่ข้อมูลอาจปรากฏอยู่ โดยอาศัยความคล้ายคลึงกับการหาค่าโดยใช้สูตรของเส้นตรง (Linear Interpolation)
ตัวอย่างโค้ด:
def interpolation_search(arr, x):
low = 0
high = (len(arr) - 1)
while low <= high and x >= arr[low] and x <= arr[high]:
if low == high:
if arr[low] == x: return low
return -1
pos = low + int(((float(high - low) / (arr[high] - arr[low])) * (x - arr[low])))
if arr[pos] == x:
return pos
if arr[pos] < x:
low = pos + 1
else:
high = pos - 1
return -1
arr = [10, 12, 13, 16, 18, 19, 20, 21, 22, 23, 24, 33, 35, 42, 47]
x = 18
result = interpolation_search(arr, x)
print("Element is present at index", result) if result != -1 else print("Element is not present in array")
Exponential Search ใช้สำหรับข้อมูลที่เรียงลำดับโดยมีหลักการคือจะเริ่มค้นหาข้อมูลด้วยการเพิ่มขนาดของข้อมูลที่ต้องค้นหาเป็นเลขชี้กำลัง 2 และเมื่อพบช่วงที่อาจมีข้อมูลที่ต้องการจะเปลี่ยนไปใช้ Binary Search เพื่อหาข้อมูลที่แน่นอน
ตัวอย่างโค้ด:
def exponential_search(arr, x):
if arr[0] == x:
return 0
index = 1
while index < len(arr) and arr[index] <= x:
index *= 2
return binary_search(arr[:min(index, len(arr))], x)
arr = [2, 3, 4, 10, 40]
x = 10
result = exponential_search(arr, x)
print("Element is present at index", result) if result != -1 else print("Element is not present in array")
การเลือกใช้ Algorithm ในการค้นหาข้อมูลนั้นขึ้นอยู่กับชนิด และลักษณะของข้อมูล เช่น ขนาดของข้อมูล หรือการเรียงลำดับของข้อมูล ทุกวิธีการมีข้อดีข้อเสียที่แตกต่างกัน ขั้นตอนการเรียนรู้ algorithms วิธีการต่างๆจะช่วยให้คุณเข้าใจว่าแต่ละวิธีทำงานอย่างไรและควรใช้สถานการณ์ใดบ้าง
การเรียนการเขียนโปรแกรมไม่ได้เพียงจำกัดอยู่ที่ภาษาหรือ Tools เท่านั้น การฝึกฝนใช้ Algorithms ในการแก้ปัญหา ทำให้ท่านสามารถพัฒนาโซลูชันที่มีประสิทธิภาพและเร็วขึ้น หากคุณมั่นใจในความรู้พื้นฐาน การปรับปรุงทักษะเหล่านั้นที่โรงเรียนสอนเขียนโปรแกรมอย่าง EPT อาจเป็นขั้นตอนถัดไปที่ดีเพื่อเตรียมพร้อมสำหรับอาชีพในโลกการเขียนโปรแกรมที่ไม่หยุดนิ่ง.
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: algorithm search python linear_search binary_search jump_search interpolation_search exponential_search programming coding data_structures algorithms
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com