heap 구조에 대한 질문입니다!
heappush를 사용하면 리스트인 a가 heap의 형태로 바뀌게 되는건지 궁금합니다!
교수님 풀이와는 다르게 heappush를 사용하지 않고 리스트에 append 하는 형식으로 값을 추가한 후에 heappop을 사용하게 되면 최솟값이 나오지않는것같습니다.
답변 1
1
안녕하세요^^
heappush(a, x)를 하면 a를 단순 리스트로 생각하지 않고 a라는 1차원 리스트가 이진트리 형식인 힙구조라고 생각합니다. 1차원 리스트를 힙구조로 생각하고 컨트롤 할 수 있습니다. 1번 인덱스 값의 왼쪽 자식 노드는 2번인덱스, 오른쪽 자식 노드는 3인덱스, 2번 인덱스 값의 왼쪽 자식 노드는 4번 인덱스, 오른쪽 자식 노드는 5번 인덱스 이런식으로 생각합니다. 즉 i번 인덱스 값의 왼쪽 자식은 i*2인덱스, 오른쪽 자식은 i*2+1 인덱스와 같이 계산합니다.
즉 heappush(a, x)는 a리스트를 이진트리 힙구조라 행각하고, 이진트리인 힙구조에서 x숫자가 위치할 인덱스 위치를 upheap 방식(현재 x노드와 x의 부모 노드를 비교해서 최소힙이 되기 위한 x값의 위치 계산)으로 찾아 x가 그 자리에 넣어줍니다.
List<Map<String, dynamic>> in type cast 에러가 계속 발생됩니다.
0
382
2
List 출력오류 관련 문의 드립니다.
0
158
1
Compressed OOP 조건에 따른 ES Heap Size 제약
0
708
1
리스트를 한번에 업데이트 하고자 할 때 아래와 같은 방법 말고 다른 게 있을까요?
0
777
1
Metaspace에 대해서
2
1081
1
list로 형변환 할때 'list' object is not callable 오류가 나요
0
637
1
list #2강의 18:48~ 중간 삽입/삭제와 임의접근의 모순
0
394
1
리스트 삭제 처리에 대한 질문 있습니다.
0
249
1
리스트를 만드는 방법
0
277
1
if 문을 사용하여 리스트에 존재하는지 찾기
0
385
0
왜 list가 아닌 None이 출력되나요?
0
2964
2
안녕하세요. 리턴 타입 질문 드립니다.
0
312
1
range가 list가 맞나요?
1
298
1
quiz 4 관련 list에서 특정값을 빼내는 함수 또는 set에서 shuffle할 수 있는 함수가 있나요?
0
317
1





