라이브러리

[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 메소드는 이름과 나이를 비교하여, 나이가 작은 요소를 먼저 힙에 추가합니다. 만약 나이가 같다면, 이름을 비교하여 이름이 작은 요소를 먼저 힙에 추가합니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 8,985건 / 139 페이지

검색

게시물 검색