heap 2

쓰이는 알고리즘 - 우선순위 큐(Heap)의 임의 요소 삭제에 관한 Idea

우선순위 큐는 반드시 Heap으로 구현할 필요는 없지만, 최소 혹은 최대값에 focus를 두는 우선순위 큐의 특성 상 일반적으로 그 장점을 최대한 잘 살릴 수 있는 Heap을 이용하여 구현한다. 하지만 Heap을 이용하여 우선순위 큐를 구현하게 되면 임의의 요소를 삭제하는 case를 처리하기 곤란해진다. 본 포스팅에선 이런 상황에서 도움이 될만한 idea를 소개하고자 한다. Solution 1. 카운팅 우선순위 큐의 요소에 대한 chk 배열을 만들어 삭제된 요소에 대해 카운팅을 하고, poll할 때 chk 배열의 값을 확인하는 방법이다. 위 그림에서 7 요소를 삭제하고 싶다면 chk[7]++ 이런 식으로 카운팅을 하고, poll할 때 chk배열의 값을 확인하여 1 이상이면 삭제된 것으로 간주한다. 하지만..

쓰이는 자료구조 - Tree, Heap (Hash와 Tree의 성능비교 포함)

1. Tree가 뭐에요? - Node(이파리)와 Branch(가지)를 이용해서 원형 사이클 관계를 이루지 않도록 계층적(나무와 닮음)으로 구성한 데이터 구조 - 대표적으로 이진 트리의 구조로 자료 탐색 알고리즘 구현을 위해 사용되어진다. - Node: 트리에서 데이터를 저장하는 구성 요소 - Branch: 트리와 트리를 연결하는 요소. 결국 하나의 Node에는 data와 다음 Node에 대한 link값을 가진다. - Root Node: 최상위 노드 - Terminal Node(Leaf Node): Child Node가 하나도 없는 노드 - Sibling: 동일한 Parent Node를 가진 노드 - Level: 트리의 층 수 - Depth: 트리에서 Node가 가질 수 있는 최대 Level - Sibli..