해시 테이블: 찾기가 말도 안 되게 빠른 이유
첫 레슨의 복선, 기억나나요? 「회원 명단 조회」 버전 B는 set.has(user) 한 줄이었고, 명단이 100명에서 1000만 명으로 늘어나도 시간은 꿈쩍도 안 했어요. 다섯 번째 레슨에서 까발리기로 했죠—오늘은 그 「바로 도달」 마술을 분해해요: 훑지 않아요, 계산해요.
수납 비유로 돌아가면: 큰 서랍에서 찾으려면 하나씩 뒤지는 건 어디에 있는지 모르기 때문이에요. 해시 테이블은 완전히 반대로—넣는 순간 고정 공식으로 몇 번 버킷에 둘지 계산하고, 찾을 때도 같은 공식을 다시 돌려 그 버킷을 바로 열어요. 그 공식이 해시 함수, 「위치 공식」이에요: 훑지 않고 한 번에 어디인지 알아요.
아래는 0~7번 버킷 8개와, 들어갈 이름 6개예요. 이름을 하나 눌러 세 단계로 들어가는 걸 보세요: 글자마다 컴퓨터 코드로 바꿔 합하고, 8로 나눈 나머지(버킷이 8개뿐이라서), 계산된 버킷으로 날아가요. 눈여겨보세요: 「하나씩 비교」는 없고, 위치는 전부 계산이에요.
이미 눈치챘을 수도 있어요: 阿芳과 丽丽가 둘 다 2번 버킷이에요! 이게 해시 충돌—버킷은 8개, 이름은 천만 가지, 충돌은 언젠가 나요. 가장 흔한 해결은 귀엽도록 단순해요: 버킷 안에 작은 연결 리스트로 달고, 나중에 온 건 체인에 줄 세워요(용어: 「체이닝」). 아래 버튼 세 개를 순서대로 누르고, 눈여겨보세요 찾을 때 몇 번 뒤지는지.
이제 데이터량을 키워 두 찾기 방식을 정면 레이스해요. 크기를 고르고 출발을 누르세요. 눈여겨보세요 오른쪽 카운터: 왼쪽이 아무리 오래 훑어도 항상 1~2번에 멈춰요.
🗄 처음부터 훑기(선형 탐색)
탐색 0회🗃 바로 도달(해시 탐색)
탐색 0회해시 테이블은 매일 당신을 가장 많이 섬기는 구조일지도 몰라요—다만 늘 무대 뒤에 있어요. 아래 네 장면 모두 「위치를 계산해 한 번에 바로 도달」 한 수예요.
Set과 딕셔너리
첫 레슨 버전 B의 Set, Python dict, JS Map—언어에서 「key로 값 꺼내기」 컨테이너는 속이 전부 해시 테이블이에요.
캐시 키
캐시는 「이 문제 계산해 봤나」를 밀리초 안에 답해야 해요—질문을 해시해 key로 바로 조회하죠. 다음 레슨의 주인공이에요.
중복 제거
학습 말뭉치 중복 제거, 크롤러의 「이 페이지 긁었나」—내용을 해시해 Set에 넣어 조회해요. 안 그러면 억 단위를 쌍쌍 비교하다 우주 열사까지 가요.
session 조회
ChatGPT를 열 때마다 서버는 session id로 수천만 온라인 사용자 가운데 당신 대화를 순식간에 찾아요—명단을 훑는 게 아니에요.
이 강의가 전하고 싶은 것
- 해시 함수 = 위치 공식: 넣기와 찾기가 같은 공식, 위치는 계산이지 훑기가 아니에요
- 시간은 데이터량과 무관: 6명이든 600만 명이든 한 번—버전 B 「바로 도달」의 진실이에요
- 충돌은 무섭지 않아요: 버킷에 작은 체인을 달고, 너무 길면 버킷을 늘려 재배치(확장)
- 공간으로 시간을 사다: 「위치 공식 + 버킷」을 준비해 조회 자유를 사요—AI에서 Set, 딕셔너리, 캐시 키, 중복 제거, session이 전부 이것
- 검수 관점: 「큰 명단에서 하나씩 찾기」 코드를 보면 「왜 해시가 아니지?」라고 물어야 해요