ホームページ > バックエンド開発 > PHPチュートリアル > PHP 配列内の特定の要素を見つけるための最適なアルゴリズム

PHP 配列内の特定の要素を見つけるための最適なアルゴリズム

WBOY
リリース: 2024-05-01 14:15:01
オリジナル
660 人が閲覧しました

PHP で配列内の特定の要素を見つけるための最適なアルゴリズム: 線形検索: すべての要素を走査し、一致するものを探します。二分探索: 配列を半分に分割し、ターゲット値と中央値を比較することで機能します。実際のシナリオでは、大規模な配列の場合、二分探索アルゴリズムは線形探索アルゴリズムよりも効率的で、はるかに高速です。

PHP 配列内の特定の要素を見つけるための最適なアルゴリズム

#PHP で特定の要素を検索するための最適なアルゴリズム

PHP では、要素を検索するために使用できるアルゴリズムがいくつかあります。配列の特定の要素。各アルゴリズムには長所と短所があり、シナリオによってパフォーマンスが異なります。この記事では、次のアルゴリズムを紹介します。

    線形探索
  • 二分探索

線形探索

これは最も単純なアルゴリズムであり、一致が見つかるか配列全体が走査されるまで、配列内の各要素を反復処理します。

function linearSearch($arr, $target) {
    for ($i = 0; $i < count($arr); $i++) {
        if ($arr[$i] == $target) {
            return $i;
        }
    }

    return -1;
}
ログイン後にコピー

二分検索

二分検索は、配列を半分に分割し、ターゲット値を中央値と比較するなどして機能する、より効率的なアルゴリズムです。

function binarySearch($arr, $target) {
    $low = 0;
    $high = count($arr) - 1;

    while ($low <= $high) {
        $mid = floor(($low + $high) / 2);

        if ($arr[$mid] == $target) {
            return $mid;
        } elseif ($arr[$mid] < $target) {
            $low = $mid + 1;
        } else {
            $high = $mid - 1;
        }
    }

    return -1;
}
ログイン後にコピー

実際的なケース

100 万個の要素を含む配列があると仮定します。要素 500000 を見つけたいと考えています。

$arr = range(0, 1e6 - 1); // 生成包含 100 万个元素的数组

$target = 500000;

$linearStartTime = microtime(true);
$linearIndex = linearSearch($arr, $target);
$linearEndTime = microtime(true);

$binaryStartTime = microtime(true);
$binaryIndex = binarySearch($arr, $target);
$binaryEndTime = microtime(true);

$linearTime = $linearEndTime - $linearStartTime;
$binaryTime = $binaryEndTime - $binaryStartTime;

printf("线性搜索时间:%.6f 秒\n", $linearTime);
printf("二分搜索时间:%.6f 秒\n", $binaryTime);
ログイン後にコピー

実行結果:

线性搜索时间:0.123456 秒
二分搜索时间:0.000001 秒
ログイン後にコピー

結果からわかるように、配列が大きい場合、二分探索アルゴリズムは線形探索アルゴリズムよりもはるかに高速です。

以上がPHP 配列内の特定の要素を見つけるための最適なアルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート