>백엔드 개발 >PHP 튜토리얼 >PHP 데이터 구조: AVL 트리의 균형, 효율적이고 질서 있는 데이터 구조 유지

PHP 데이터 구조: AVL 트리의 균형, 효율적이고 질서 있는 데이터 구조 유지

WBOY
WBOY원래의
2024-06-03 09:58:57542검색

AVL 트리는 빠르고 효율적인 데이터 작업을 보장하는 균형 잡힌 이진 검색 트리입니다. 균형을 이루기 위해 좌회전 및 우회전 작업을 수행하고 균형을 위반하는 하위 트리를 조정합니다. AVL 트리는 높이 균형을 활용하여 노드 수에 비해 트리 높이가 항상 작게 되도록 하여 로그 시간 복잡도(O(log n)) 조회 작업을 가능하게 하고 대규모 데이터 세트에서도 데이터 구조 효율성을 유지합니다.

PHP 데이터 구조: AVL 트리의 균형, 효율적이고 질서 있는 데이터 구조 유지

PHP 데이터 구조: 효율적이고 질서 있는 데이터 구조를 유지하는 균형 잡힌 AVL 트리 방식

AVL(Adelson-Velsky and Landis) 트리는 빠르고 효율적인 검색을 보장하기 위해 균형을 유지하는 이진 검색 트리입니다. , 삽입 및 삭제 작업. 핵심은 높이 균형을 유지하여 트리의 높이(루트 노드에서 가장 깊은 리프 노드까지의 거리)가 트리의 노드 수에 비해 항상 작도록 보장하는 것입니다.

AVL 트리에서 균형을 이루려면 두 가지 주요 작업을 수행해야 합니다.

  1. 왼쪽 회전: 왼쪽 하위 트리에서 오른쪽 하위 트리로 회전하여 균형을 위반하는 하위 트리를 조정합니다.
  2. 오른쪽 회전: 균형을 위반하는 하위 트리를 조정하고 오른쪽 하위 트리에서 왼쪽 하위 트리로 회전합니다.

AVL 트리 구현

간단한 이진 검색 트리 클래스로 시작합니다.

class BinarySearchTree {
    protected $root;

    // 插入节点
    public function insert($value) {
        // ...
    }

    // 查找节点
    public function search($value) {
        // ...
    }
}

AVL 트리를 구현하려면 다음 기능을 추가해야 합니다.

class AVLTree extends BinarySearchTree {
    // 获取节点的高度
    public function height(Node $node) {
        // ...
    }

    // 检查节点是否平衡
    public function isBalanced(Node $node) {
        // ...
    }

    // 左旋节点
    public function leftRotate(Node $node) {
        // ...
    }

    // 右旋节点
    public function rightRotate(Node $node) {
        // ...
    }
}

실용 사례

AVL을 사용해 보겠습니다. tree 정수 집합을 저장하고 검색 작업 수행:

$avlTree = new AVLTree();
$avlTree->insert(10);
$avlTree->insert(5);
$avlTree->insert(15);
$avlTree->insert(3);
$avlTree->insert(7);
$avlTree->insert(12);
$avlTree->insert(17);

// 查找值 12
$result = $avlTree->search(12);

if ($result) {
    echo "找到值 " . $result->value . PHP_EOL;
} else {
    echo "未找到值 12" . PHP_EOL;
}

균형이 잘 잡힌 AVL 트리에서는 데이터 양이 많아도 로그 시간 복잡도(O(log n)) 내에서 검색 작업을 효율적으로 완료할 수 있습니다. , 데이터 구조를 빠르고 효율적으로 유지합니다.

위 내용은 PHP 데이터 구조: AVL 트리의 균형, 효율적이고 질서 있는 데이터 구조 유지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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