inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

38군데 합격 비법, 2026 코딩테스트 필수 알고리즘

3-7. 해쉬 - 1

해시 충돌에서 링크드 리스트말고 해시테이블을 이용해서 구현하지 않는 이유가 있을까요?

해결된 질문

214

윤세일

작성한 질문수 2

0

1. 현재 학습 진도

 

2. 어려움을 겪는 부분

 

python 코딩-테스트 알고리즘 data-structure

답변 1

1

딩코딩코

안녕하세요 세일님!! 좋은 질문 넘넘 감사합니다!!


질문하신 내용을 보면, 해시 충돌 해결을 위해 링크드 리스트 대신 내부적으로 해시 테이블을 또 사용하는 방식을 제안하셨는데요, 이를 실제로 구현하지 않는 이유를 함께 살펴보겠습니다.


1. 시간 복잡도의 차이

해시 테이블 내부에서 또 다른 해시 테이블을 사용하는 경우, 이론적으로는 각 충돌 체인의 검색 시간 복잡도가 O(1)로 줄어들 수 있습니다.
하지만 이 O(1)은 "해시 함수가 완벽히 동작하고 충돌이 전혀 없는 경우"에만 성립합니다. 현실적인 시스템에서는:

  • 내부 해시 테이블에서도 충돌이 발생할 가능성이 있으며, 충돌을 해결해야 하므로 시간 복잡도가 O(1) * O(1)로 단순히 떨어지지 않습니다.

  • 충돌 발생 시 다시 충돌 해결 전략(체이닝, 오픈 어드레싱 등)을 도입해야 하므로 복잡성이 증가할 수 있습니다.

2. 공간 효율성 문제

해시 테이블을 또 사용하는 방식은 다음과 같은 문제가 있습니다:

  • 각 슬롯마다 새로운 해시 테이블을 생성하면 메모리 사용량이 급격히 증가합니다.

  • 특히, 충돌이 적은 경우에도 불필요한 해시 테이블이 생성되어 공간 낭비가 발생합니다.

  • 링크드 리스트는 간단히 메모리를 동적으로 할당하여 필요한 만큼만 사용하므로 공간 효율성이 훨씬 높습니다.

3. 구현 복잡성

해시 테이블 내부에 또 해시 테이블을 사용하면:

  • 이중 해시 함수 설계가 필요합니다.

    • 외부 해시 테이블과 내부 해시 테이블이 각각 다른 해시 함수를 사용해야 합니다.

    • 이를 설계하고 관리하는 비용이 추가됩니다.

  • 링크드 리스트는 단순히 노드를 연결하기만 하면 되지만, 이중 해시 테이블 구조는 더 복잡한 로직이 요구됩니다.

4. 실제 성능 차이

링크드 리스트를 사용하는 체이닝 방식은 충돌이 적은 경우 성능이 매우 뛰어나며, 충돌이 많아지는 경우에도 구현과 관리가 상대적으로 간단합니다.
반면, 내부에 해시 테이블을 사용하면 충돌이 많아질 경우 해시 충돌 해결 전략 자체가 다시 성능 병목이 될 수 있습니다.


결론

링크드 리스트를 사용하는 체이닝 방식은:

  • 충돌 해결을 위한 간단하고 효율적인 방법입니다.

  • 메모리 사용량을 최소화하면서 구현 복잡성을 낮추는 데 적합합니다.

해시 테이블 내부에 또 다른 해시 테이블을 사용하는 방법은 이론적으로 흥미로운 접근이지만, 메모리 사용량과 구현 복잡성, 충돌 가능성 등의 현실적인 문제 때문에 일반적으로 사용되지 않습니다.

좋은 질문 덕분에 저도 다시 한 번 생각해볼 기회를 가졌습니다! 추가적인 궁금증이 생기시면 언제든 편하게 질문 주세요

1

윤세일

답변 감사합니다 딩코님!

 

이론적인 부분이 아니라, 현실적인 부분까지는 생각을 못했습니다. 상세하게 설명해주셔서 감사합니다!!

0

딩코딩코

아닙니다 세일님 질문주셔서 감사해요!!! 저도 깊게 생각해볼 수 있었습니다 🙇

코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요

0

55

2

3-3 정렬-2 선택정렬 로직

0

36

2

링크드 리스트 끝에서 k번째 값 출력하기

0

41

2

LinkedList 과제 Fast, slow 포인터

0

48

2

투포인터 시간복잡도

0

49

2

수강평 작성 후 자료

0

49

2

수업교재 링크 오류

2

105

2

프로그래머스에서 제출 후 채점시 틀림ㅠ

0

126

2

1-10 알고리즘 더 풀어보기(2) 질문 있습니다

0

68

2

문제 풀이 방식 관련 질문입니다!

0

80

2

1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다

0

84

2

수업자료 pdf 받고싶습니다

0

102

2

강의 자료 오류 수정

0

69

1

2-10 더하거나 빼거나 관련 질문입니다

0

60

2

3-8 해쉬 -2

0

47

2

Linked List Element Delete Explanation Problem

0

65

2

강의3-4 스택 탑 문제

0

73

2

코드스니펫 입출력 케이스에 오류가 있는것 같아요

0

97

3

링크드 리스트 원소 찾기 구현 방식 질문드립니다.

0

73

2

1874 - 스택 문항

0

79

2

DP Java 예제 자료형 오버플로우 문제

0

96

2

4-9 4주차 숙제중 농심라면 문제

0

106

2

DFS 에서 스택을 사용하는 이유

1

182

3

들여쓰기가 햇갈리네요

0

119

2