inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코딩 테스트 합격자 되기 - 4주완성

시간복잡도 - 코드 분석

시간복잡도 개념문제 Deque질문

72

태준

작성한 질문수 2

0

[ 질문 배경 ]

Deque에 대한 자료를 보면 포인터를 사용한다고 나와있습니다.

따라서 popleft()시 맨 좌측부터 포인터가 가르키며 삭제하게 되는데, 이는 논리적으로 "삭제"라는 개념보다는 포인터가 가르키는 곳을 다음으로 이동시킨다는 의미를 가진다고 gpt를 통해 알게 되었습니다.

 

[ 질문 ]

  1. 그렇다면, popleft()시 포인터가 다음으로 이동할 시 메모리에 적재되어 있던 이전 값은

그대로 남아있게 될텐데, 그렇다면 이것은 메모리 낭비로 이어질 수 있지 않나요?

 

  1. 자바의 경우 가비지 컬렉터가 알아서 메모리를 관리하죠. GPT에게 물어보니 메모리 슬롯은 유지하며 재사용할 수 있도록 대기상태에 들어간다고 합니다.

     

    그렇다면 이 재사용을 할지 말지에 대한 것은 누가 결정하며 어떻게 처리되나요? 궁금합니다.

     


    C의 경우 malloc 으로 메모리 빌림 , 메모리 반납을 거치게 되는데, 이 경우도 궁금합니다.

python 알고리즘 data-structure 북-챌린지

답변 1

0

dremdeveloper

deque는 하나의 거대한 배열이 아니라, 여러 개의 block으로 쪼개져 관리됩니다. 각 블록은 보통 64개의 포인터를 저장할 수 있는 고정 배열입니다.

 

말씀하신 대로 popleft()는 초기에는 논리적 삭제(포인터 이동)로 동작하다가, 특정 조건에서 물리적 해제가 발생합니다. 단, 그 방식이 전체 재할당이 아닌 블록 단위 해제입니다.

 

deque는 '전체 로드 팩터'를 계산하여 전체를 수축(Contraction)하지 않습니다. 대신 해당 블록이 완전히 비었을 때 그 블록만 떼어내어 메모리를 해제합니다.

 

정리하면 논리적 삭제를 하다가 블럭이 완전히 비는 조건이 되면 해당 블록만 떼어내어 메모리를 해제합니다.

 

 

11회 기출 유형(작업형1) 2번 정답

0

3

1

f1 score 질문

0

3

1

10회 작업형 2 인코딩 질의

0

3

1

자동화프롬프트 가져오기 에러

0

4

1

53번 강의에서 갑자기 수업노트가 없어졌습니다.

0

8

2

28:19 roc_auc이유

0

9

2

수강연장문의

0

12

2

노션 사용 권한 없음

0

6

2

전체적인 머신러닝 순서

0

8

1

바로 답변을주셔서.... 하나더 ㅎㅎ

0

7

2

빅분기 실기 유형2질문

0

13

1

QML강의를 더 깊게 듣고 싶은데

1

13

2

섹션 5 부분 exe 파일 과정

0

9

1

Notion에서 이 페이지에 대한 사용 권한 없음

0

11

2

33강 9:51 excercise55.

0

8

1

슬랙에서 메시지 일부 잘림

1

13

2

ID 전처리 이유

0

25

2

데이터제공

0

21

2

예시문제 작업형3 꼬리질문2번

0

12

1

데이터 개수를 구할 때, len과 value_counts 차이

0

18

2

API 오류: EGW00201 - 초당 거래건수를 초과

1

20

2

작업형 2 제출방

0

18

2

인코딩 스케일링 순서

0

18

2

캐글 save version 할 시 md파일과 다름.

1

18

2