>  기사  >  백엔드 개발  >  PHP 데이터 구조: 해시 테이블 구현 원리, 빠른 데이터 검색의 비밀 탐구

PHP 데이터 구조: 해시 테이블 구현 원리, 빠른 데이터 검색의 비밀 탐구

PHPz
PHPz원래의
2024-06-03 18:32:01786검색

해시 테이블은 데이터를 고정 크기 배열("버킷")에 매핑하여 빠른 조회를 가능하게 하는 효율적인 데이터 구조입니다. 각 버킷에는 동일한 키를 가진 데이터가 포함되어 있습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.