💡 오늘 한 일 각각에 대한 설명, 그 과정에서의 궁금증 및 느낀 점 등을 정리합니다.
나름의 순서를 가지고 백준 문제들을 푸는 중인데, heap 문제들을 풀 차례가 되었다.
그런데 heap의 개념이 가물가물해서 이김에 제대로 개념을 잡고 가고 싶었다.
그래서 학교에서 수강한 자료구조 수업의 priority queue 부분을 다시 들었다.
그리고 해당 내용 정리 및 직접 구현한 코드를 벨로그에 올리려고 정리 중이다.
⇒ heap은 바이너리 트리의 일종이다. 이 heap을 이용하여 priority queue를 효과적으로 구현할 수 있는 것이다. 리스트를 연결 리스트, 배열로 구현할 수 있는 것처럼 priority queue 또한 heap이 아닌 다른 방법으로 구현될 수 있다.
⇒ 일단, heap은 트리보다 리스트로 구현하는 것이 효율적이다.
트리는 주로 연결리스트로 구현하는데, 이 때문에 remove 작업에서 이루어지는 마지막에 원소를 추가하는 일이 어려워지기 때문이다.
이와 같은 이유로 리스트를 통해 구현하는 것이기 때문에 리스트를 연결리스트가 아닌 배열로 구현하는 것이 더욱 적합하다.
또한, heap은 완전 이진 트리이기 때문에 배열을 이용한다고 해서 메모리 낭비도 되지 않으며, 부모-자식 노드 간의 이동을 인덱스를 통해 아주 효율적으로 할 수 있다.