도면으로 해시 테이블 학습 🎨
하단에서 리소스가 포함된 전체 서면 버전을 확인할 수 있지만 지금은 설명 버전을 확인하십시오!
부담없이 download the printable version . original handmade version도 있습니다.
... 그리고 이제 서면 버전...
해시 테이블의 마법
뭔데
🔍검색, ➕삽입, 🗑삭제에 가장 효율적인 데이터 구조.
모든 것을 평균적으로 O(1) 복잡성으로 수행합니다(즉, 사용 가능한 데이터의 크기에 관계없이 동일한 시간이 소요됨).
캐싱, 데이터베이스 검색 및 세트에 사용됩니다.
작동 방식
정렬되지 않은 고유 키 모음은 해싱 프로세스를 통해 값에 매핑됩니다.
키 가져오기 --> 해시 함수에서 실행 --> 해시를 생성하는 키
포르투갈어 --> ✨ --> 2
프랑스어 --------> ✨ --> 0
영어 -------> ✨ --> 3
... 테이블의 일치하는 인덱스("버킷"이라고도 함)에 추가합니다.
해시시
값
0
인사
1
-
2
올라
삼
안녕하십니까
해싱은 단방향입니다!
해시는 원래 키로 다시 변환할 수 없습니다.
예: "English"를 해싱하면 3이 반환되지만 3을 사용하면 "English"를 얻을 수 없습니다.
해시 함수는 다음을 충족해야 합니다.
충돌을 처리하는 방법?
충돌은 키가 이미 다른 키에서 가져온 해시(인덱스)에 해당할 때 발생합니다.
오픈 어드레싱
버킷을 이미 가져간 경우 사용하지 않는 버킷을 찾을 때까지 다른 버킷을 검사합니다.
체이닝
버킷은 동일한 인덱스를 가진 여러 키를 사용할 수 있습니다.
💡FAQ
이상적인 부하율은 무엇입니까?
어떤 사람들은 0.7 정도라고 말합니다. 즉, 70개 항목이 있는 테이블에는 약 100개의 버킷이 있어야 합니다. 그러나 그것은 균형입니다. 버킷을 비울수록 속도가 빨라지고 충돌은 줄어들지만 더 많은 메모리가 사용됩니다.
동적 크기 조정이란 무엇입니까?
테이블이 균형을 잃을 때 발생합니다. 테이블이 너무 꽉 차거나 비어 있습니다. 테이블 크기를 조정하고 키를 다시 해시합니다.
최고의 해시 함수는 무엇입니까?
만능 솔루션은 없습니다. 속도와 배포 사이의 균형입니다.
좋은 해시 함수는 효율적인 해시 테이블의 비결입니다.
팁: 키가 정적이면 Perfect Hash Function을 사용하십시오. * 충돌 없음 * 빈 버킷 없음 *
언제 해시 테이블을 피해야 합니까?
🎁 보너스: Javascript에서 간단한 해시 테이블 개념 적용!
😰 If 문을 사용할 때...
변수를 할당하기 위해 다른 시나리오를 처리할 때 if 지옥(또는 스위치 지옥)으로 끝납니다.
if(viewport === 'sm') {
fontSize = 1.0;
} else if (viewport === 'md') {
fontSize = 1.2;
} // else if ... else if ...
⚡️ 하지만 키:값 매핑을 사용하면...
더 깨끗한 코드로 옵션 수에 관계없이 직접 잠금 - O(1) 복잡성을 얻습니다. 얼마나 멋진가요?
const sizes = {
sm: 1,
md: 1.2,
lg: 1.2
};
const fontSize = sizes[viewport];
시작하기 위한 리소스:
읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(도면으로 해시 테이블 학습 🎨), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/a_sandrina_p/learning-hash-tables-with-drawings-99o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)