hash 에 관해서.

Leejaegun·2025년 3월 29일

코딩테스트 시리즈

목록 보기
34/49

Hash 단어 자체의 의미

🔤 "hash" (명사/동사)

  • 명사: 잘게 썬 음식, 특히 고기 (예: corned beef hash)
  • 동사:
    • 잘게 썰다, 마구 뒤섞다
    • 또는 문제 등을 정리하다 (hash out a problem)

📚 어원 (Etymology)

  • 프랑스어 "hacher"to chop (썰다, 자르다)에서 유래
  • 라틴어 "hassia" (자르기, 절단)에서 더 거슬러 올라갑니다.

즉, 원래 의미는 “잘게 자르고 섞는 것”이에요! 🔪

💻 알고리즘/컴퓨터에서의 "Hash"는 왜 이 단어를 쓸까?

✅ 이유: 정보(데이터)를 "잘게 부수고 섞어서" 새로운 고정된 값으로 만드는 과정이기 때문입니다!

  • 우리가 hash 알고리즘을 쓸 때는,
    • 긴 문자열이나 복잡한 데이터를
    • 일정한 방식으로 "부수고", "섞어서",
    • 짧고 고정된 크기의 해시값(hash value) 으로 바꾸죠.

이 과정이 원래 단어의 의미랑 아주 잘 맞습니다.

🔍 예시로 보면

hash("apple")112233445
hash("banana")99887766
  • 문자열을 특정 알고리즘으로 "찢고, 섞고" → 숫자로 매핑
  • 마치 요리 재료를 썰고 볶아서 새로운 요리를 만드는 느낌이에요 🍳

🔐 보너스: 해시 함수는 어디에 쓰일까?

분야역할
🗃️ 자료구조빠른 검색 (해시 테이블, dict)
🧩 암호학무결성 검증 (SHA256, md5 등)
🔄 데이터 처리중복 제거, 그룹핑
🎲 랜덤성 생성시드값 등에서 사용

🧠 요약!

항목내용
영어 의미자르다, 섞다, 잘게 만들다
어원프랑스어 hacher (썰다)
컴퓨터에서 의미데이터를 잘게 쪼개고 섞어 → 고정된 크기의 해시값으로 변환
왜 이 단어를 쓰나원래 뜻이 데이터 처리 과정과 잘 어울려서

🧠 해시(Hash) 개념 총정리

🔹 1. mod 연산 (x mod m)

  • 의미: xm으로 나눈 나머지를 구하는 연산입니다.
  • 예시: 17 mod 5 = 2, 23 mod 4 = 3
  • 파이썬에서는 % 연산자로 사용됩니다.
print(17 % 5)  # 출력: 2

🔹 2. 로드 팩터 (Load Factor)

  • 정의: 해시 테이블에서 저장된 데이터 수 / 전체 버킷 수
  • 예시: 테이블 크기 10, 저장된 데이터 4개 → 로드 팩터 = 0.4
  • 💡 충돌과 관련은 있지만, 충돌 횟수 그 자체는 아닙니다.
  • 로드 팩터가 높아지면 충돌 가능성 증가 → 해시 테이블 확장 필요

🔹 3. 충돌 (Collision)

  • 해시함수 결과가 같은 인덱스를 가리킬 경우 발생합니다.
  • 예시:
hash(7) % 5 == 2  
hash(12) % 5 == 2 → 충돌 발생!

🔹 4. 충돌 해결 방법

✅ A. Chaining 방식 🪢

  • 같은 인덱스에 리스트(혹은 연결리스트)로 데이터를 저장합니다.
  • 장점: 구현이 간단하고 유연함
  • 단점: 리스트가 길어지면 성능 저하 가능

✅ B. Open Addressing 방식 🚪

  • 충돌 시 다른 빈 칸을 찾아 저장합니다.
  • 전략:
    • Linear Probing (순차적으로 찾기)
    • Quadratic Probing (간격 증가)
    • Double Hashing (두 번째 해시 함수로 이동)

🔹 5. 🐍 파이썬 dict의 내부 구현

  • Python의 dictOpen Addressing 방식을 사용합니다.
  • 충돌이 발생하면 내부적으로 Probing을 통해 다음 빈 자리를 찾아갑니다.
  • 각 항목은 다음 정보를 저장합니다:
    • key, hash(key), value
  • 파이썬 3.6 이후로는 삽입 순서도 유지합니다.

🎓 추가 팁

항목설명
set 자료형내부적으로 dict와 비슷하게 동작합니다 (key만 있음)
해시 함수hash() 내장 함수로 사용 가능
암호화 해시hashlib 모듈 (sha256, md5 등) 사용

https://arxiv.org/pdf/1712.01208 <- deeplearning을 사용하여 hash충돌 적게 하는 방법론 논문.(정말 대단하다.. 나도 컴퓨터에 대해서 정말 많이 공부하면 이정도로 되나? -> 일단 CS 지식 + network + algorithm + OS + DB + system design + 분산시스템 + 보안 + devops + 논문읽기 및 트렌드 파악) 이런것을 좀 해야겟지.

profile
Lee_AA

0개의 댓글