อธิบายอัลกอริทึมการค้นหาเชิงเส้นและไบนารี

อธิบายอัลกอริทึมการค้นหาเชิงเส้นและไบนารี

ความสามารถในการค้นหาข้อมูลเป็นส่วนสำคัญของวิทยาการคอมพิวเตอร์ อัลกอริธึมการค้นหาใช้เพื่อค้นหารายการเฉพาะในชุดข้อมูล





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





สำหรับบทความนี้ อัลกอริธึมจะเน้นไปที่การพิจารณาว่ามีค่าหรือไม่





อัลกอริธึมการค้นหาเชิงเส้น

การค้นหาเชิงเส้นเรียกอีกอย่างว่าการค้นหาตามลำดับ ในการค้นหาประเภทนี้ แต่ละค่าในรายการจะถูกเข้าชมทีละค่าอย่างเป็นระเบียบในขณะที่ตรวจสอบว่ามีค่าที่ต้องการอยู่หรือไม่

อัลกอริทึมจะตรวจสอบค่าตามค่าจนกว่าจะพบค่าที่คุณต้องการหรือหมดค่าที่จะค้นหา เมื่อค่าในการค้นหาหมด แสดงว่าคำค้นหาของคุณไม่มีอยู่ในรายการ



อัลกอริธึมการค้นหาตามลำดับใช้รายการค่าและรายการที่ต้องการในรายการเป็นพารามิเตอร์ ผลลัพธ์ที่ได้เริ่มต้นเป็น เท็จ และจะเปลี่ยนเป็น จริง เมื่อได้ค่าที่ต้องการแล้ว

ดูการใช้งาน 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)

ย้ายไปที่การเรียงลำดับ

ในการค้นหาแบบไบนารี เราพิจารณากรณีที่อาร์เรย์ที่ระบุได้รับคำสั่งแล้ว แต่สมมติว่าคุณมีชุดข้อมูลที่ไม่เรียงลำดับและต้องการค้นหาแบบไบนารีบนชุดข้อมูลนั้น คุณจะทำอย่างไร?

คำตอบนั้นง่าย: เรียงลำดับ มีเทคนิคการเรียงลำดับในวิทยาการคอมพิวเตอร์จำนวนหนึ่งที่ได้รับการวิจัยเป็นอย่างดี หนึ่งในเทคนิคเหล่านี้ที่คุณสามารถเริ่มเรียนได้คืออัลกอริธึมการเรียงลำดับการเลือก ในขณะที่เรามีคำแนะนำมากมายที่เกี่ยวข้องกับด้านอื่นๆ ด้วย

แบ่งปัน แบ่งปัน ทวีต อีเมล วิธีใช้การเรียงลำดับการเลือก

การเรียงลำดับการเลือกนั้นค่อนข้างเข้าใจยากสำหรับผู้เริ่มต้น แต่ก็ไม่ได้ยากเกินไปเมื่อคุณเข้าใจสิ่งต่าง ๆ

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • การเขียนโปรแกรม
  • เทคโนโลยีอธิบาย
  • การเขียนโปรแกรม
  • อัลกอริทึม
  • การวิเคราะห์ข้อมูล
เกี่ยวกับผู้เขียน เจอโรม เดวิดสัน(ตีพิมพ์บทความ 22 บทความ)

เจอโรมเป็นพนักงานเขียนบทที่ MakeUseOf เขาครอบคลุมบทความเกี่ยวกับการเขียนโปรแกรมและลินุกซ์ เขายังเป็นคนที่กระตือรือร้นในการเข้ารหัสและคอยติดตามดูอุตสาหกรรม crypto อยู่เสมอ

เพิ่มเติมจาก Jerome Davidson

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก