dalgorithm
달공의 개발기
dalgorithm
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • Back-end (0)
    • Java (11)
    • 자료구조 (7)
    • Network (31)
    • Database (9)
    • Baekjoon Online (24)
    • 클라우드 (6)
    • Android (15)
      • Kotlin (14)
    • AI (27)
      • Machine Learning&Deep Learn.. (27)
    • Web (23)
      • Webhacking (17)
      • WebProgramming (6)
    • 기술면접 (1)
      • JAVA&자료구조 (0)
      • Spring (0)
      • 컴퓨터구조&운영체제 (0)
      • 네트워크 (0)
      • 데이터베이스 (0)
    • CTF 스터디 (15)
    • 대외활동 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 포너블
  • 딥러닝
  • CTF
  • 네트워크
  • db
  • 클라우드
  • kotlin
  • 코드리뷰
  • Guacamole
  • python #백준
  • gcp
  • 자바
  • java
  • 머신러닝
  • 인공지능
  • cs
  • 데이터베이스
  • 침입탐지
  • 웹해킹
  • 자료구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dalgorithm

달공의 개발기

[자료구조] 해시테이블
자료구조

[자료구조] 해시테이블

2022. 8. 17. 20:13
728x90

해시테이블 (HashTable) 이란?

https://blog.kakaocdn.net/dna/b1zOw1/btqL6HAW7jy/AAAAAAAAAAAAAAAAAAAAAEhT12GoZgO68ZR4bGwlxVddrbaFpG3e7rBVQLta8Yn8/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1769871599&allow_ip=&allow_referer=&signature=RdDeR0RCjVxtVQNleVDR6WvBwD4%3D

- 해시함수를 사용하여 변환한 값을 색인(index)로 삼아 키(KEY)와 값(VALUE)를 대응시켜 저장하는 데이터 구조

- 키를 통해 해당 데이터에 빠르게 접근이 가능하다.

- 해시 값 : 해시 테이블의 Index

 

해싱이란?

- 키를 특정 계산식에 넣어 나온 결과를 사용하여 값에 접근하는 과정

 

해시테이블의 연산

● search() - 해시테이블 내 데이터를 탐색한다.

● insert() - 해시테이블에 (값, 데이터) 추가

● delete() - 데이터 삭제

 

** HashTable과 HashMap 차이

  HashTable 해시테이블 HashMap 해시맵
공통점 둘 다 Map 인터페이스를 구현한 것
차이점1 : Thread-safe O (멀티 스레드 환경에서 우수)  X (싱글 스레드 환경에서 우수)
차이점2 : Key에 Null 사용 여부 X O

 

해시 충돌이란?

- 해시 테이블의 같은 공간에 서로 다른 값을 저장하려는 경우

  ( 서로 다른 키의 해시 함수를 통한 해시 값이 동일한 경우)

 

> 개방 주소법

- 충돌 시, 테이블에서 비어 있는 공간의 hash를 찾아 데이터 저장 ( hash와 value 1:1 유지)

- 비어 있는 공간 탐색 방법에 따른 분류 

 

1) 선형 탐사법 : 빈 공간을 순차적으로 탐사하는 방법

- 충돌 발생 지점부터 이후 빈 공간을 순서대로 탐사한다.

- 일차 군집화 문제 발생 가능!

 

2) 제곱 탐사법 : 빈 공간을 n제곱 만큼 간격 두고 탐사

- 충돌 발생 지점부터 이후 빈공간 n제곱 간격 탐사

- 선형 탐사법과 마찬가지로, 이차 군집화 문제 발생 가능!

 

3) 이중 해싱 : 해싱 함수를 이중으로 사용

- 해싱 함수 1) 최초 해시를 구할 때 사용

- 해싱 함수 2) 충돌 발생 시, 탐사 이동 간격 구할 때 사용

- 앞에 두 탐사법에 비해 데이터가 골고루 분포

 

> 분리 연결법

- 해시 테이블을 연결 리스트로 구성

- 해시 충돌이 잘 발생하지 않도록 보조 해시 함수를 통해 조정할 수 있다면 Worst Case에 가까워지는 빈도를 줄일 수 있다.


해시테이블 구현

- 기본적인 해시테이블 구현 방법이다. 해시테이블을 출력할 때 Map.Entry를 통해 사용한 법을 기억해두면 좋다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Hashtable;
import java.util.Map;
 
public class HashTableEx {
    // 해시 함수
    public static int getHash(int key) {
        return key % 5;
    }
 
    public static void main(String[] args) {
        Hashtable<String, Integer> ht = new Hashtable<>();
 
        ht.put("key1", 10);
        ht.put("key2", 20);
 
        for (Map.Entry<String, Integer> item : ht.entrySet()) {
            System.out.println(item.getKey() + " - " + item.getValue());
        }
        
        ht.remove("key1");
    }
}
 
Colored by Color Scripter
cs

 

728x90

'자료구조' 카테고리의 다른 글

[자료구조] 데크  (0) 2022.08.16
[자료구조] 큐  (0) 2022.08.13
[자료구조] 스택  (0) 2022.08.13
[자료구조] 연결리스트  (0) 2022.08.09
[자료구조] 조합  (0) 2022.08.08
    '자료구조' 카테고리의 다른 글
    • [자료구조] 데크
    • [자료구조] 큐
    • [자료구조] 스택
    • [자료구조] 연결리스트
    dalgorithm
    dalgorithm

    티스토리툴바