Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで線形探索(リニアサーチ)を実装する方法を徹底解説


線形探索(Linear Search)は、配列の中から特定の値を探し出すための探索アルゴリズムで、最もシンプルな探索手法として知られています。

この手法の基本的な流れは以下のとおりです。

  • 探索したい値を、配列内のすべての要素と先頭から順番に比較していきます。

  • 値が見つかった場合は、その要素のインデックスを返します。

  • 配列全体を調べても該当する要素が存在しない場合は、-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) まで改善できます。具体的には、「左」と「右」の2つのポインタを用意し、1回のループで両端から同時に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回の反復が必要でした。

また、要素が見つからなかった場合も、2つ目の方法では反復回数が合計 n/2 回で済むため、最悪計算量は O(n/2) となります。

線形探索はどれほど有用か?

線形探索は、二分探索(Binary Search)のように、より優れた時間計算量を持つ探索アルゴリズムが存在するため、実際に使われる場面は限られています。特に、大規模な入力配列に対しては効率が悪いため、実務では用途に応じた適切なアルゴリズムを選択することが重要です。

  1. Pythonでバブルソートを実装する方法をわかりやすく解説

    この記事では、代表的なソートアルゴリズムの一つである「バブルソート(Bubble Sort)」をPythonで実装する方法について詳しく解説します。 下図は、このアルゴリズムがどのように動作するかを示したものです。 アルゴリズムの手順 先頭の要素(インデックス = 0)から開始し、現在の要素と配列内の次の要素を比較します。 現在の要素が次の要素より大きい場合、両者を入れ替えます。 現在の要素が次の要素より小さい場合は、そのまま次の要素へ移動します。 この手順を、配列全体がソートされるまで繰り返します。 それでは、実際の実装を見てみましょう。 サンプルコード def bubbleSort(

  2. 【Python入門】線形探索(リニアサーチ)の仕組みと実装方法

    本記事では、最も基本的な探索アルゴリズムである「線形探索(リニアサーチ)」の仕組みと、Python 3.xでの実装方法について詳しく解説します。 線形探索とは 線形探索は、配列(リスト)の先頭から順番に要素を一つずつ調べ、目的の値と一致するかどうかを確認していくシンプルな探索手法です。データがソートされていなくても利用できるため、小規模なデータや整列されていないデータを扱う際に手軽で便利です。 アルゴリズムの手順 1. 配列 arr[] の左端(先頭)の要素から順に、目的の値 x と各要素を比較していく 2. x がいずれかの要素と一致した場合、そのインデックス(位置)を返す 3. 配列の最後