PHP의 최소 힙 알고리즘의 원리와 적용 시나리오는 무엇입니까?
Min Heap(Min Heap)은 각 노드의 값이 해당 자식 노드의 값보다 작거나 같은 특별한 이진 트리 구조입니다. 주요 원칙은 힙의 루트 노드가 항상 가장 작도록 특정 순서를 유지하는 것입니다. 배열은 PHP에서 최소 힙을 구현하는 데 사용될 수 있습니다.
민힙의 원리는 삽입과 삭제라는 두 가지 기본 작업을 통해 특성을 유지하는 것입니다. 삽입 작업은 힙에 새 요소를 추가하고 해당 값의 크기에 따라 적절하게 조정하여 힙의 특성이 손상되지 않도록 합니다. 삭제 작업은 힙에서 가장 작은 요소를 삭제하고 최소 힙의 특성을 충족하도록 힙의 크기를 조정합니다.
다음은 PHP를 사용하여 최소 힙 알고리즘을 구현하는 방법을 보여주는 샘플 코드입니다.
class MinHeap { protected $heap; protected $size; public function __construct() { $this->heap = []; $this->size = 0; } public function insert($value) { $this->heap[$this->size] = $value; $this->size++; $this->heapifyUp($this->size - 1); } public function removeMin() { if ($this->isEmpty()) { return null; } $min = $this->heap[0]; // 将最后一个元素移到根节点位置 $this->heap[0] = $this->heap[$this->size - 1]; $this->size--; // 调整堆,保持最小堆的特性 $this->heapifyDown(0); return $min; } public function isEmpty() { return $this->size === 0; } protected function getParentIndex($index) { return ($index - 1) / 2; } protected function getLeftChildIndex($index) { return 2 * $index + 1; } protected function getRightChildIndex($index) { return 2 * $index + 2; } protected function heapifyUp($index) { $parentIndex = $this->getParentIndex($index); while ($index > 0 && $this->heap[$parentIndex] > $this->heap[$index]) { // 交换节点位置 list($this->heap[$parentIndex], $this->heap[$index]) = [$this->heap[$index], $this->heap[$parentIndex]]; $index = $parentIndex; $parentIndex = $this->getParentIndex($index); } } protected function heapifyDown($index) { $leftChildIndex = $this->getLeftChildIndex($index); $rightChildIndex = $this->getRightChildIndex($index); $minIndex = $index; if ($leftChildIndex < $this->size && $this->heap[$leftChildIndex] < $this->heap[$minIndex]) { $minIndex = $leftChildIndex; } if ($rightChildIndex < $this->size && $this->heap[$rightChildIndex] < $this->heap[$minIndex]) { $minIndex = $rightChildIndex; } if ($minIndex !== $index) { // 交换节点位置 list($this->heap[$minIndex], $this->heap[$index]) = [$this->heap[$index], $this->heap[$minIndex]]; $this->heapifyDown($minIndex); } } } // 使用最小堆进行排序 function heapSort($arr) { $heap = new MinHeap(); foreach ($arr as $value) { $heap->insert($value); } $sorted = []; while (!$heap->isEmpty()) { $sorted[] = $heap->removeMin(); } return $sorted; } // 测试用例 $arr = [5, 2, 9, 1, 7]; $sorted = heapSort($arr); echo implode(', ', $sorted); // 输出:1, 2, 5, 7, 9
최소 힙 알고리즘에는 많은 응용 프로그램 시나리오가 있으며 그 중 가장 일반적인 것은 우선 순위 큐입니다. 우선순위 큐는 우선순위에 따라 요소가 큐에서 제거되는 순서를 결정할 수 있는 특수 큐입니다. 최소 힙은 우선순위 큐를 쉽게 구현할 수 있으며, 삽입 및 삭제 작업의 시간 복잡도는 O(log n)로 매우 효율적입니다.
우선순위 큐 외에도 최소 힙은 다음 시나리오에도 적용될 수 있습니다.
위 내용은 PHP 최소 힙 알고리즘의 원리와 적용 시나리오는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!