การค้นหาเชิงเส้นเป็นเทคนิคการค้นหาเพื่อค้นหาค่าบางค่าจากอาร์เรย์ นี่เป็นเทคนิคการค้นหาที่ง่ายที่สุด
ในเทคนิคการค้นหานี้
-
ค่าที่จะค้นหาจะถูกเปรียบเทียบกับองค์ประกอบทั้งหมดในอาร์เรย์
-
หากพบค่า ดัชนีขององค์ประกอบจะถูกส่งคืน
-
หากไม่มีองค์ประกอบเฉพาะในอาร์เรย์ ให้ส่งคืน -1 หรือข้อความสตริงที่เกี่ยวข้อง
รหัสเทียม
linearSearch(int array[], int value): for i=0 to len(array): if(array[i]==value): Element is Present //outside for loop Element Not Present // element not found in the whole array
ตัวอย่าง
def linearSearch(arr,value):
for i in range(len(arr)):
if(arr[i]==value):
return i
return -1
array=[1,2,3,4,5,6,7,8,9,10]
value=5
a=linearSearch(array,value)
if(a==-1):
print("Element not present")
else:
print("Element present at index",a) ผลลัพธ์
Element present at index 4
ความซับซ้อนของเวลา
ความซับซ้อนของเวลากรณีที่เลวร้ายที่สุดของการค้นหาเชิงเส้นคือ O(n) กรณีที่เลวร้ายที่สุดเกิดขึ้นเมื่อองค์ประกอบอยู่ที่ดัชนีสุดท้ายของอาร์เรย์หรือไม่ปรากฏเลย
ความซับซ้อนของเวลากรณีและปัญหาที่ดีที่สุดของการค้นหาเชิงเส้นคือ O(1) กรณีที่ดีที่สุดเกิดขึ้นเมื่อองค์ประกอบอยู่ที่ดัชนีแรกของอาร์เรย์
ปรับปรุงการค้นหาเชิงเส้น
ความซับซ้อนของกรณีที่เลวร้ายที่สุดของการค้นหาเชิงเส้นสามารถปรับปรุงเป็น O(n/2) ซึ่งสามารถทำได้โดยใช้ตัวชี้สองตัว ซ้ายและขวา และเปรียบเทียบพร้อมกันสองครั้ง ดังนั้นจึงลดความซับซ้อนของเวลากรณีที่เลวร้ายที่สุดของการค้นหาเชิงเส้นเป็น O(n/2)
ตัวอย่าง
def linearSearch(arr,value):
left=0
right=len(arr)-1
while(left<=right):
if(arr[left]==value):
return left
elif(arr[right]==value):
return right
left+=1
right-=1
return -1
array=[1,2,3,4,5,6,7,8,9,10]
value=10
a=linearSearch(array,value)
if(a==-1):
print("Element not present")
else:
print("Element present at index",a) ผลลัพธ์
Element present at index 9
ในตัวอย่างข้างต้น พบองค์ประกอบที่ดัชนีสุดท้าย ในการวนซ้ำครั้งแรกเอง การใช้วิธีแรกจะต้องทำซ้ำ 10 ครั้งจึงจะพบองค์ประกอบนี้
หากไม่พบองค์ประกอบ ความซับซ้อนของกรณีที่เลวร้ายที่สุดคือ O(n/2) เนื่องจากจำนวนการวนซ้ำทั้งหมดเป็น n/2 ในวิธีที่สอง
การค้นหาเชิงเส้นมีประโยชน์อย่างไร
การค้นหาเชิงเส้นมักไม่ค่อยใช้ เนื่องจากมีอัลกอริธึมการค้นหาที่ดีกว่า เช่น การค้นหาแบบไบนารี ซึ่งให้เวลาที่ซับซ้อนกว่า การค้นหาเชิงเส้นไม่มีประสิทธิภาพสำหรับอาร์เรย์อินพุตขนาดใหญ่