ホームページ >バックエンド開発 >PHPチュートリアル >PHPデータ構造:ハッシュテーブルの実装原理、高速データ検索の秘密を探る

PHPデータ構造:ハッシュテーブルの実装原理、高速データ検索の秘密を探る

PHPz
PHPzオリジナル
2024-06-03 18:32:01838ブラウズ

ハッシュ テーブルは、データを固定サイズの配列 (「バケット」) にマッピングすることで高速な検索を可能にする効率的なデータ構造です。各バケットには同じキーを持つデータが含まれています。 PHP のハッシュ テーブルは、ハッシュ関数を使用して任意のサイズのデータ​​を固定長の整数に変換します。この整数は、ハッシュ テーブル内のデータのバケットを計算するために使用されます。

PHPデータ構造:ハッシュテーブルの実装原理、高速データ検索の秘密を探る

PHP データ構造: ハッシュ テーブルの実装原理、高速データ検索の秘密を探る

はじめに

ハッシュ テーブル (ハッシュ テーブル) は、高速データ検索のための効率的なデータ構造です。データを固定サイズの配列「バケット」にマッピングすることで、高速な検索を実現します。各バケットには同じキーを持つデータが含まれています。

実装原理

PHPにおけるハッシュテーブルの実装原理はハッシュ関数に基づいています。ハッシュ関数は、任意のサイズのデータ​​を固定長の整数に変換します。この整数は、ハッシュ テーブルにデータが挿入されるバケットを計算するために使用されます。

コードの実装: カスタム ハッシュ テーブル

以下は、PHP でハッシュ テーブルを実装するためのサンプル コードです:

class HashTable
{
    private $buckets = [];
    private $size = 0;

    public function __construct($size)
    {
        $this->size = $size;
    }

    public function hash(string $key): int
    {
        return crc32($key) % $this->size;
    }

    public function set(string $key, $value): void
    {
        $index = $this->hash($key);
        $this->buckets[$index][$key] = $value;
    }

    public function get(string $key): mixed
    {
        $index = $this->hash($key);
        if (isset($this->buckets[$index][$key])) {
            return $this->buckets[$index][$key];
        } else {
            return null;
        }
    }
}

実際のケース: 従業員を年齢でグループ化する

従業員の年齢を含む配列があるとします。グループ社員の年齢別募集も行っています。ハッシュ テーブルを使用すると、同じ年齢の従業員をすばやく見つけることができます。

$ages = [25, 30, 28, 35, 32, 25, 30];
$hashTable = new HashTable(count($ages));

foreach ($ages as $age) {
    $hashTable->set($age, []);
}

foreach ($ages as $age) {
    $hashTable->get($age)[] = $age;
}

var_dump($hashTable->buckets);

出力結果:

array(
    25 => array(25, 25),
    30 => array(30, 30),
    28 => array(28),
    35 => array(35),
    32 => array(32)
)

以上がPHPデータ構造:ハッシュテーブルの実装原理、高速データ検索の秘密を探るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。