データ構造とアルゴリズム
7737 ワード
どのような検索ですか?
コンピュータサイエンスでは、探索は「アイテムのコレクションから特定のプロパティを持つアイテムを見つけるプロセス」ですアイテムは、格納されたレコードまたは配列要素から他の検索スペースの要素にすることができます.
しかし、なぜ我々は検索が必要ですか?
答えは-あなたが探しているデータを見つけるには、データの大規模なセットから.たとえば、長い連絡先リストからお友達の電話番号を見つける簡単にアルゴリズムを検索して使用することができます.ここでは、連絡先リストは、アイテムのコレクションであり、あなたの友人の番号は、指定されたプロパティのデータです.
探索アルゴリズムのいくつかの例は線形探索,二値探索,補間探索などである.
線形探索とは
線形探索は、コレクション内のすべての項目を順番にチェックする単純な検索アルゴリズムです.マッチが見つかった場合、項目が返されます.
要素の順序が不明な配列を指定した場合を想定します.この場合、配列の各要素をスキャンして、指定したプロパティを持つ要素を見つける必要があります.
このアルゴリズムは次のように記述できます:
線形探索は、コレクション内のすべての項目を順番にチェックする単純な検索アルゴリズムです.マッチが見つかった場合、項目が返されます.
要素の順序が不明な配列を指定した場合を想定します.この場合、配列の各要素をスキャンして、指定したプロパティを持つ要素を見つける必要があります.
このアルゴリズムは次のように記述できます:
この種の線形探索は、無順序線形探索と呼ばれる
public int unorderedLinearSearch(int[] Arr, int data)
{
for(int i=0; i<Arr.length; i++){
if (Arr[i] == data)
return i;
}
return -1;
}
時間の複雑さ:o(n)、最悪の場合、完全配列をスキャンします.空間の複雑さ: O ( 1 )
さて、配列ARRがソートされている場合、すなわち、要素の順序を知っているなら、以下のように検索を行うことができます.
この例を順序線形探索と呼ぶ
public int orderedLinearSearch(int[] Arr, int data)
{
for(int i=0; i<Arr.length; i++){
if (Arr[i] == data)
return i;
else if(Arr[i] > data)
return -1;
}
return -1;
}
データの場合には、時間の複雑さをさらに最適化できます.o(n)からo(1)までのアレーの最後のポジションの
左右の位置から要素をチェックすることによって.
public int optimiseLinearSearch(int[] Arr, int data)
{
int left = 0;
int length = Arr.length;
int right = length - 1;
int position = -1;
for (left = 0; left <= right;){
if (Arr[left] == search_Element)
{
position = left;
System.out.println(position);
break;
}
if (Arr[right] == search_Element)
{
position = right;
System.out.println(position);
break;
}
left++;
right--;
}
if (position == -1)
System.out.println("data not found");
}
}
おめでとう!今、どのようなアルゴリズムを検索し、どのように線形検索アルゴリズムを実装知っている.次のブログでは、いくつかのデータ構造とアルゴリズムの概念を見ていきます!
接続する
読んでくれてありがとう!😃
Reference
この問題について(データ構造とアルゴリズム), 我々は、より多くの情報をここで見つけました https://dev.to/priya730/data-structure-and-algorithms-linear-search-48g3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol