라이브러리
[PHP] SplMinHeap::compare - 힙에 올바르게 배치하기 위해 요소를 비교합니다.
SplMinHeap::compare
PHP의 SplMinHeap 클래스는 힙 자료구조를 구현한 클래스로, 최소 힙을 구현한 클래스입니다. 힙은 완전 이진 트리 자료구조로, 각 노드의 값은 자식 노드의 값보다 작거나 같아야 합니다. SplMinHeap 클래스는 이 규칙을 따르는 최소 힙을 구현합니다.
SplMinHeap 클래스의 compare 메소드는 힙의 비교 로직을 정의하는 메소드입니다. 이 메소드는 두 개의 요소를 비교하여, 첫 번째 요소가 두 번째 요소보다 작을 경우 -1을 반환하고, 두 번째 요소가 첫 번째 요소보다 작을 경우 1을 반환합니다. 만약 두 요소가 같다면 0을 반환합니다.
예제
#hostingforum.kr
php
use SplMinHeap;
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function __toString() {
return $this->name . " (" . $this->age . ")";
}
}
$heap = new SplMinHeap();
$heap->insert(new Person("John", 30));
$heap->insert(new Person("Alice", 25));
$heap->insert(new Person("Bob", 35));
while (!$heap->isEmpty()) {
$person = $heap->extract();
echo $person . "
";
}
위 예제에서, Person 클래스는 이름과 나이를 가진 객체를 정의합니다. SplMinHeap 클래스의 compare 메소드는 기본적으로 요소의 나이를 비교하여, 나이가 작은 요소를 먼저 힙에 추가합니다. 따라서, 위 예제에서 Person 객체를 힙에 추가한 후, extract 메소드를 호출하여 요소를 꺼내면, 나이가 작은 요소가 먼저 꺼내집니다.
사용자 정의 compare 메소드
compare 메소드는 사용자 정의할 수 있습니다. 예를 들어, Person 클래스를 정의할 때, compare 메소드를 오버라이드하여 이름과 나이를 비교하는 로직을 정의할 수 있습니다.
#hostingforum.kr
php
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function __toString() {
return $this->name . " (" . $this->age . ")";
}
public function compare($other) {
if ($this->age < $other->age) {
return -1;
} elseif ($this->age > $other->age) {
return 1;
} else {
if ($this->name < $other->name) {
return -1;
} elseif ($this->name > $other->name) {
return 1;
} else {
return 0;
}
}
}
}
위 예제에서, Person 클래스의 compare 메소드는 이름과 나이를 비교하여, 나이가 작은 요소를 먼저 힙에 추가합니다. 만약 나이가 같다면, 이름을 비교하여 이름이 작은 요소를 먼저 힙에 추가합니다.
-
- 나우호스팅 @pcs8404
-
호스팅포럼 화이팅!
댓글목록
등록된 댓글이 없습니다.