ความสามารถในการค้นหาข้อมูลเป็นส่วนสำคัญของวิทยาการคอมพิวเตอร์ อัลกอริธึมการค้นหาใช้เพื่อค้นหารายการเฉพาะในชุดข้อมูล
อัลกอริทึมจะส่งกลับผลลัพธ์บูลีน (จริงหรือเท็จ) ไปยังข้อความค้นหา นอกจากนี้ยังสามารถปรับเปลี่ยนเพื่อให้ตำแหน่งสัมพัทธ์ของค่าที่พบ
สำหรับบทความนี้ อัลกอริธึมจะเน้นไปที่การพิจารณาว่ามีค่าหรือไม่
อัลกอริธึมการค้นหาเชิงเส้น
การค้นหาเชิงเส้นเรียกอีกอย่างว่าการค้นหาตามลำดับ ในการค้นหาประเภทนี้ แต่ละค่าในรายการจะถูกเข้าชมทีละค่าอย่างเป็นระเบียบในขณะที่ตรวจสอบว่ามีค่าที่ต้องการอยู่หรือไม่
อัลกอริทึมจะตรวจสอบค่าตามค่าจนกว่าจะพบค่าที่คุณต้องการหรือหมดค่าที่จะค้นหา เมื่อค่าในการค้นหาหมด แสดงว่าคำค้นหาของคุณไม่มีอยู่ในรายการ
อัลกอริธึมการค้นหาตามลำดับใช้รายการค่าและรายการที่ต้องการในรายการเป็นพารามิเตอร์ ผลลัพธ์ที่ได้เริ่มต้นเป็น เท็จ และจะเปลี่ยนเป็น จริง เมื่อได้ค่าที่ต้องการแล้ว
ดูการใช้งาน Python ด้านล่างเป็นตัวอย่าง:
def linearSearch(mylist, item):
found = False
index = 0
while index if mylist[index] == item:
found = True
else:
index = index+1
return found
การวิเคราะห์อัลกอริทึม
กรณีที่ดีที่สุดเกิดขึ้นเมื่อสินค้าที่ต้องการเป็นรายการแรกในรายการ กรณีที่เลวร้ายที่สุดเกิดขึ้นเมื่อรายการที่ต้องการเป็นรายการสุดท้ายในรายการ (รายการที่ n) ดังนั้น ความซับซ้อนของเวลาสำหรับการค้นหาเชิงเส้นคือ O(n)
สถานการณ์กรณีเฉลี่ยในอัลกอริธึมข้างต้นคือ n/2
ที่เกี่ยวข้อง: สัญกรณ์ Big-O คืออะไร?
แก้ไขการค้นหาเชิงเส้น
สิ่งสำคัญคือต้องรู้ว่าอัลกอริทึมที่ใช้ถือว่ามีรายการสุ่มของรายการ กล่าวคือ รายการไม่เรียงลำดับเฉพาะเจาะจง
อ่านไดรฟ์ที่ฟอร์แมตด้วย mac บน windows
สมมติว่ารายการอยู่ในลำดับเฉพาะ พูดจากน้อยไปมาก เป็นไปได้ที่จะบรรลุความได้เปรียบในการคำนวณ
ยกตัวอย่างการค้นหา 19 รายการในรายการที่ให้มา: [2, 5, 6, 11, 15, 18, 23, 27, 34] หลังจากอายุครบ 23 ปี จะเห็นได้ชัดว่ารายการที่กำลังค้นหาไม่มีอยู่ในรายการ ดังนั้นจึงไม่สำคัญอีกต่อไปที่จะค้นหารายการที่เหลือต่อไป
อัลกอริทึมการค้นหาไบนารี
คุณได้เห็นแล้วว่ารายการสั่งซื้อสามารถลดการคำนวณที่จำเป็นได้อย่างไร อัลกอริธึมการค้นหาแบบไบนารีใช้ประโยชน์จากประสิทธิภาพนี้มากยิ่งขึ้นซึ่งมีการแนะนำรายการสั่งซื้อ
อัลกอริธึมเริ่มต้นด้วยการนำค่ากลางของรายการที่เรียงลำดับและตรวจสอบว่าเป็นค่าที่ต้องการหรือไม่ หากไม่เป็นเช่นนั้น ระบบจะตรวจสอบค่าว่ามีค่าน้อยกว่าหรือมากกว่าค่าที่ต้องการหรือไม่
หากน้อยกว่านั้นก็ไม่จำเป็นต้องตรวจสอบครึ่งล่างของรายการ มิฉะนั้น ถ้ามันมากกว่า มันจะย้ายไปที่ครึ่งบนของรายการ
ที่เกี่ยวข้อง: การเรียกซ้ำคืออะไรและคุณใช้งานอย่างไร
ไม่ว่าจะเลือกรายการย่อยใดก็ตาม (ซ้ายหรือขวา) ค่ากลางจะถูกกำหนดอีกครั้ง ค่าจะถูกตรวจสอบอีกครั้งว่าเป็นค่าที่ต้องการหรือไม่ หากไม่เป็นเช่นนั้น จะมีการตรวจสอบว่ามีค่าน้อยกว่าหรือมากกว่าค่าที่ร้องขอหรือไม่
วิธีค้นหาผู้ที่ติดตามคุณบน facebook
กระบวนการนี้จะทำซ้ำจนกว่าจะพบค่าหากมี
การใช้งาน Python ด้านล่างนี้มีไว้สำหรับอัลกอริทึมการค้นหาแบบไบนารี
def binarySearch (รายการ mylist):
low = 0
high = len(mylist) - 1
found = False
while low <= high and not found: mid = (low + high) // 2
if mylist[mid] == item:found = True
elif item else:low = mid + 1
return found
การวิเคราะห์อัลกอริทึม
สถานการณ์สมมติที่ดีที่สุดเกิดขึ้นเมื่อพบว่ารายการที่ต้องการเป็นรายการกลาง สถานการณ์กรณีที่เลวร้ายที่สุดนั้นไม่ตรงไปตรงมา ติดตามการวิเคราะห์ด้านล่าง:
หลังจากการเปรียบเทียบครั้งแรก จะเหลือ n/2 รายการ หลังจากวินาทีที่สอง จะเหลือ n/4 รายการ หลังจากครั้งที่สาม n/8
สังเกตว่าจำนวนของรายการยังคงลดลงครึ่งหนึ่งจนกว่าจะถึง n/2i โดยที่ i คือจำนวนการเปรียบเทียบ หลังจากแยกย้ายกันไปก็เหลือเพียง 1 รายการเท่านั้น
นี่หมายความว่า:
n/2i=1 ดังนั้น การค้นหาแบบไบนารีจึงเป็น O(log n)
ย้ายไปที่การเรียงลำดับ
ในการค้นหาแบบไบนารี เราพิจารณากรณีที่อาร์เรย์ที่ระบุได้รับคำสั่งแล้ว แต่สมมติว่าคุณมีชุดข้อมูลที่ไม่เรียงลำดับและต้องการค้นหาแบบไบนารีบนชุดข้อมูลนั้น คุณจะทำอย่างไร?
คำตอบนั้นง่าย: เรียงลำดับ มีเทคนิคการเรียงลำดับในวิทยาการคอมพิวเตอร์จำนวนหนึ่งที่ได้รับการวิจัยเป็นอย่างดี หนึ่งในเทคนิคเหล่านี้ที่คุณสามารถเริ่มเรียนได้คืออัลกอริธึมการเรียงลำดับการเลือก ในขณะที่เรามีคำแนะนำมากมายที่เกี่ยวข้องกับด้านอื่นๆ ด้วย
แบ่งปัน แบ่งปัน ทวีต อีเมล วิธีใช้การเรียงลำดับการเลือกการเรียงลำดับการเลือกนั้นค่อนข้างเข้าใจยากสำหรับผู้เริ่มต้น แต่ก็ไม่ได้ยากเกินไปเมื่อคุณเข้าใจสิ่งต่าง ๆ
อ่านต่อไป หัวข้อที่เกี่ยวข้อง- การเขียนโปรแกรม
- เทคโนโลยีอธิบาย
- การเขียนโปรแกรม
- อัลกอริทึม
- การวิเคราะห์ข้อมูล
เจอโรมเป็นพนักงานเขียนบทที่ MakeUseOf เขาครอบคลุมบทความเกี่ยวกับการเขียนโปรแกรมและลินุกซ์ เขายังเป็นคนที่กระตือรือร้นในการเข้ารหัสและคอยติดตามดูอุตสาหกรรม crypto อยู่เสมอ
เพิ่มเติมจาก Jerome Davidsonสมัครรับจดหมายข่าวของเรา
เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!
คลิกที่นี่เพื่อสมัครสมาชิก