README.md
April 12, 2020 · View on GitHub
문제
Q1. Heap 자료구조에 알고 있나요? Q2. Heap 자료구조에 대해 알고 있다면 Max-heap 에 대해서 설명해주세요.
정답
Q1. 답
Heap 자료구조는 heap 이라는 말과 동일하게 쌓아 올린것이 될 수 있다고 생각합니다. Max-heap 을 예로 들었을 때, 점점 숫자가 증가할수록 위에 쌓아지는것이죠. 트리를 이용해서 heap 자료구조를 구현할 수 있는데, 대부분 완전 이진트리를 사용합니다. 여기서 완전 이진트리란 자식의 최대 2 개 이며, 순서대로 자식이 생기는 자료구조 입니다.(left -> right) 굳이 완전 이진트리를 사용하는 이유는 삽입, 삭제에서의 시간을 최소화 시키기 위해서 입니다. (높이가 logN)우리가 흔히 알고있는 우선순위 큐 또는 힙정렬이 heap 자료구조를 이용해서 흔히 제작됩니다. 이유는 linked list 또는 원시 배열을 사용할 경우 삽입 또는 삭제에서의 시간복잡도가 최악의 경우 O(N) 이기 때문입니다. Heap 자료구조를 사용하게 되면 log2(N) 에 구현이 가능합니다.
Q2. 답
Max-heap, min-heap 이 존재하지만 무언가에 구애받지 않고 설명하겠습니다. --- 삽입 --- 1. 우선 트리의 맨 마지막 자리에 해당 value 를 삽입합니다. 2. Parent node 와 대소비교를 통해 값이 true 라면 swap 합니다. 3. 2 번을 반복합니다. 만약 false 라면 동작을 그만합니다. --- 삭제 --- 삽입을 통해 우리가 원하는 값은 항상 맨위에 있다고 가정됩니다. 1. Root node 를 제거하고, 마지막 node 를 root 에 보냅니다. 2. 올라간 node 를 자식 node 들과 비교하고, 삽입과 동일하게 원하는 조건에서의 값이 true 라면 해당 node 를 올립니다. (단 2 개의 node 모두 true 라면, 둘 중 큰 값을 올립니다.) 3. 2 번을 반복합니다. 만약 false 라면 동작을 그만합니다.