2

たとえば、配列内の最大の要素を見つけようとしていて、次のようなコードを書いています。

public class LargestElement
{
    public static void main(String[] args)
    {
        int[] a = {1,2,6,4,5,4,3,1};

        int max = a[0];
        for(int i = 1;i<a.length;i++)
        {
            if(a[i] > max)
                max = a[i];
        }

        System.out.println(max);
    }
}

これは線形検索と呼ばれますか?

4

3 に答える 3

10

このアルゴリズムはコレクション内の最大値を見つけるため、線形検索アルゴリズムではなく、線形選択アルゴリズムと呼ばれます。これは、特定の値を探す検索アルゴリズムとは異なります。

于 2015-08-26T10:24:25.330 に答える
2

いいえ、これは線形検索ではありません。この配列内の要素を探しているのではなく、この配列内の最大値を探しているからです。常に配列のすべての要素をチェックしますが、線形検索アルゴリズムは特定の値 (検索している値) が見つかったときに終了します。ただし、このアルゴリズムの複雑さは確かに線形です (複雑さの詳細については、こちらを参照してください)。

質問にも含まれている「linear-search」タグの説明を引用します。

線形検索または順次検索は、リスト内の特定の値を見つける方法であり、目的の値が見つかるまで、その要素を一度に 1 つずつ順番にチェックすることで構成されます。線形検索は、最も単純な検索アルゴリズムです。最悪の場合のコストは、リスト内の要素の数に比例します。

于 2015-08-26T10:24:31.387 に答える
0

上記の回答は、線形検索とは何かを知りたい場合の単なる追加であり、次のようになります

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.Scanner;
class LargestElement
{
    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);

        int ele= s.nextInt();
        int[] a = {1,2,6,4,5,4,3,1};

        for(int i = 0;i<a.length;i++)
        {
            if(a[i] ==ele)
                {
                        System.out.println("Element Found at : "+ (i+1)+" Position");
                }
        }

    }
}

私が編集したコードは、この場合、コンソールから取得した特定の値の配列を直線的に検索するだけです。二分探索(ソートされた配列に使用される)のような検索にはバリエーションがあり、他にも多くの検索アルゴリズムがありますが、最も基本的なものは線形検索です。

于 2015-08-26T12:52:06.410 に答える