inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

기출로 대비하는 개발자 전공면접 [CS 완전정복]

Q. Queue vs priority queue를 비교하여 설명해 주세요

힙을 array 기반으로 구현하는 이유

1114

jhappy

작성한 질문수 2

3

안녕하세요. Heap 구현에 대해서 궁금해서 질문 드립니다.
Heap 을 구현할 때, 트리는 보통 Linked List 로 구현하지만 Heap은 새로운 node를 힙의 '마지막 위치'에 추가해야하기 때문에 array 기반으로 구현해야한다고 하셨는데, 이 부분이 잘 이해가 되지 않습니다.
Linked List든 Array List든 마지막 위치에 넣을 수 있는 건 똑같지 않나요??
만약 size가 10인 Array List가 있고, 그 안에 [0, 300, 150, 170, 0, 0, 0, 0, 0, 0] 이렇게 3개의 node만 있다고 했을 때, 마지막 위치란 4번째 인덱스를 의미한다고 이해했습니다.
그랬을 때 Linked List도 4번째 인덱스에 insert하는 건 똑같다고 생각을 해서 이해가 잘 되지 않습니다.
답변 주시면 감사하겠습니다.

기술면접 면접 운영체제

답변 2

4

개발남노씨

안녕하세요. jhappy님. 

제 설명에 대한 보충설명과 함께, List와 Tree에 대한 내용을 좀 더 설명드려야 될 것 같습니다!

 

 

List라고 하면 Array를 이용한 구현과 Linked List 를 이용한 구현이 있죠. 그래서 자바의 경우에는 ArrayList, LinkedList를 간편하게 사용할 수 있습니다. 두 가지 종류의 List는 어쨋든 특징이 index를 이용해서 접근할 수 있도록 설계가 된 자료구조입니다. 물론 시간복잡도의 차이는 있겠죠. 

 

제가 heap구현할 때 Array기반으로 구현해야된다고 했던 내용을 조금 수정보완해보자면, heap을 구현하기 위해서는 index를 사용하는 List기반으로 구현해야 합니다. 그 이유는 jhappy님께서 말씀해주셨듯이, array list든지 linked list든지 맨 마지막에 원소를 추가하는데 크게 어려움이 없기 때문입니다. (즉, jhappy님 말씀이 맞습니다! array list, linked list 어떤 걸로 구현하든지 둘다 좋습니다)

 

즉 아래의 그림은 배열(좀더 넓은 의미로 List)로 구현한 Heap입니다. Array List, Linked List 모두 List이므로 마지막 인덱스에 데이터를 추가하는게 쉽겠죠!!?

 

 

하지만 제가 설명에서 말씀드린 Linked list로 구현하면 힘들다고 한 내용은,  Tree를 구현할 때 흔히 사용하는 linked list 방식으로 하면 마지막 인덱스에 데이터 추가하는 일이 쉽지 않다고 말씀드린 겁니다. 

 

즉 아래와 같은 트리를 구현하기 위해서는 Liked list 를 이용하여 트리를 구현해야 하는 것입니다. (주의할 점은 위에서의 Liked list는 List를 구현하기 위해 사용했고, 여기서 Linked list는 Tree를 구현하기 위해서 사용한 것입니다.) 이 경우 마지막 인덱스를 찾기가 쉽지가 않습니다.

 

 

 

이런 의미에서 저는 배열 vs linked list를 구분했는데, jhappy님께서 지적해주신것처럼 헷갈릴 수 있을 것 같습니다.

 

즉 수정해보자면

 

Heap은 Tree임에도 불구하고 List(array list & linked list; array list가 시간복잡도 관점에서 더 효율적)를 이용하여 구현합니다. 그 이유는 새로운 node를 힙의 ‘마지막 위치’에 추가해야 하는데, 이 때 List로 구현해야 이 과정이 수월해지기 때문입니다.

 

 

혹시 설명이 잘 됐을까요?? 잘 이해가지 않는 내용이 있다면 다시 질문 주시면 더 고심해보도록 해볼게요!!

 

0

jhappy

자세한 답변 덕분에 이해했습니다.

감사합니다!

Open addressing을 사용할 때의 worst case

1

465

1

인터넷 계층과 네트워크 엑세스 계층

1

492

1

패킷이란

1

424

1

Linked list의 장점

1

652

1

노션 자료 이메일 잘못 입력했어요..

1

547

1

동기화 문제

1

503

2

프로세스 관련 질문

1

573

1

노션 전자 책 동영상 문제

1

476

1

안녕하세요 강사님!

1

338

1

노션 공유 요청

1

358

1

Linked List 시간 복잡도

3

750

1

thread의 PC register 질문

1

717

2

hash table의 seperate chaining 질문

0

385

2

인덱스 카디널리티 부분 질문이있습니다.

2

1184

2

프론트엔드 면접준비 질문

0

546

1

시간복잡도

1

269

1

쿠키 질문

0

310

1

쓰레드의 단점 중 궁금한 것이 있습니다.

0

260

1

URL을 주소창에 쳤을 때 화면에 나오기까지의 과정에 대해 추가적으로 궁금합니다.

1

434

1

궁금한게 있습니다

0

205

0

강의자료 HTTP 부분 request 단어가 repuest로 되어있습니다

1

222

1

강의가 이해가 잘되네요

1

250

1

syn 과 fin의 데이터 단위가 다른 이유

2

289

1

Circular Queue에 대해서 질문드려요

1

292

1