728x90
안녕하세요.
오늘은 가장 큰 값이 항상 맨 위에 위치하는 자료구조인 SplMaxHeap에 대해 알아보겠습니다.
SplMaxHeap
SplMaxHeap은 PHP의 SPL(Standard PHP Library)이 제공하는 자료구조입니다.
이름에서 알 수 있듯이, 가장 큰(Max) 값이 항상 맨 위(Top)에 위치하도록 보장하는 저장소입니다.
데이터를 추가할 때마다 내부적으로 정렬 상태를 자동으로 유지하기 때문에, 언제든지 가장 큰 값을 즉시 조회하거나 꺼내올 수 있습니다.
실시간 랭킹이나 우선순위가 가장 높은 작업을 처리할 때 매우 유용합니다.
주요 메소드
- insert(value): 힙에 새로운 값을 추가합니다. 추가하는 즉시 힙 구조가 자동으로 재정렬됩니다.
- top(): 힙에서 값을 제거하지 않고 가장 큰 값을 확인합니다.
- extract(): 힙에서 가장 큰 값을 꺼내고(제거하고) 반환합니다.
예제
실시간으로 들어오는 태스크(Task) 중 중요도(priority)가 가장 높은 것을 먼저 처리하는 시스템을 SplMaxHeap으로 구현해 보겠습니다.
중요도를 배열의 첫 번째 요소로 두면 SplMaxHeap이 알아서 비교해 줍니다.
<?php
// SplMaxHeap은 가장 큰 값을 맨 위로 보내는 자료구조입니다.
$taskHeap = new SplMaxHeap();
echo ">> 새로운 작업들을 추가합니다...<br>";
// insert([중요도, 작업내용])
$taskHeap->insert([99, '긴급 서버 패치']);
$taskHeap->insert([50, '사용자 문의 답변']);
$taskHeap->insert([10, '데이터베이스 백업']);
$taskHeap->insert([80, '결제 시스템 점검']);
// top() 으로 현재 가장 중요한 작업을 확인만 할 수 있습니다.
$mostUrgentTask = $taskHeap->top();
echo "현재 가장 중요한 작업(확인만): '{$mostUrgentTask[1]} (중요도: {$mostUrgentTask[0]})'<br><br>";
echo ">> 중요도 순서대로 작업을 처리합니다...<br>";
// extract() 로 가장 중요한 작업부터 하나씩 꺼내서 처리합니다.
while (!$taskHeap->isEmpty()) {
$task = $taskHeap->extract();
echo "처리 완료: '{$task[1]} (중요도: {$task[0]})'<br>";
}
?>
결과
insert 순서와 관계없이, extract를 호출하면 중요도가 가장 높은 순서대로 작업이 처리되는 것을 명확하게 확인할 수 있습니다.
>> 새로운 작업들을 추가합니다...
현재 가장 중요한 작업(확인만): '긴급 서버 패치 (중요도: 99)'
>> 중요도 순서대로 작업을 처리합니다...
처리 완료: '긴급 서버 패치 (중요도: 99)'
처리 완료: '결제 시스템 점검 (중요도: 80)'
처리 완료: '사용자 문의 답변 (중요도: 50)'
처리 완료: '데이터베이스 백업 (중요도: 10)''PHP' 카테고리의 다른 글
| [PHP] Fiber (파이버) 란 (0) | 2025.10.22 |
|---|---|
| [PHP] match 표현식 (0) | 2025.10.20 |
| [PHP] SplPriorityQueue로 중요 작업 먼저 처리하기 (0) | 2025.10.16 |
| [PHP] MultipleIterator 와 foreach로 여러 배열 동시에 반복하기 (0) | 2025.10.15 |
| [PHP] 숫자 내장 함수: number_format, round, rand 함수 (0) | 2025.10.13 |