Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เขียนโปรแกรมสำหรับการค้นหาเชิงเส้นใน Python


การค้นหาเชิงเส้นเป็นเทคนิคการค้นหาเพื่อค้นหาค่าบางค่าจากอาร์เรย์ นี่เป็นเทคนิคการค้นหาที่ง่ายที่สุด

ในเทคนิคการค้นหานี้

  • ค่าที่จะค้นหาจะถูกเปรียบเทียบกับองค์ประกอบทั้งหมดในอาร์เรย์

  • หากพบค่า ดัชนีขององค์ประกอบจะถูกส่งคืน

  • หากไม่มีองค์ประกอบเฉพาะในอาร์เรย์ ให้ส่งคืน -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 ในวิธีที่สอง

การค้นหาเชิงเส้นมีประโยชน์อย่างไร

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