[자료구조/알고리즘] 해시(Hash) 란?

2021. 1. 6. 02:24·Algorithm/Algorithm

Hash

개념

  • 임의의 크기를 가진 데이터(Key)를 고정된 크기의 데이터(Value)로 변화시켜 저장하는 것
  • 키에 대한 해시값을 사용하여 값을 저장하고 키-값 쌍의 개수에 따라 동적으로 크기가 증가하는 associate array이다
  • 키에 대한 해시값을 구하는 과정을 hashing(해싱)이라고 하며 이때 사용하는 함수(알고리즘)를 해시함수라고 한다
  • 해시값 자체를 index로 사용하기 때문에 평균 시간 복잡도가 O(1)로 매우 빠르다

해시함수

  • 위에 설명한 것과 같이 키에 대한 해시값을 만드는 함수
  • 계산이 복잡하지 않고 키값에 대해 중복 없이 해시값을 고르게 만들어 내는 함수가 좋은 함수 (충돌이 일어나지 않을수록 좋다)
  • 대표적으로 나눗셈 법(Division Method)과 곱셉 법(Multiplication Method)이 있다

map container

  • Associative - 연관 컨테이너 (associative container) 중 하나입니다.
  • 노드 기반으로 이루어져 있고 균형 이진트리 구조입니다.
  • Map - map은 key와 value로 이루어져 있으며 이는 pair 객체 형태로 저장됩니다.
  • Unique Key - key는 고유한 값이므로 중복이 불가능합니다. (중복 key는 multimap에서 가능합니다.)
  • Ordered - map도 set과 마찬가지로 삽입이 되면서 자동으로 정렬이 됩니다. (default는 less/오름차순입니다.)
  • Allocator-aware - map container는 저장공간의 필요에 따라서 allocator 객체를 사용합니다. (동적 할당합니다.)
  • 그림으로 대략적인 모습을 보겠습니다.

img

map의 사용법

  • <map> 헤더 파일에 포함됩니다.
  • 기본 생성 방법은 : map < [Data type 1], [Data type 2] > [변수 이름];
    ex) map <int, int> m1;
    ex) map <string, int> m2;
  • map에 삽입을 하기 위한 insert는 pair 객체를 인자로 받아야 합니다. (key 값과 value는 쌍을 이루기 때문)
  • ex) m1.insert(pair <int, int>(10, 20));
    ex) m2.insert(pair <string, int>("BlockDMask", 27));

map의 생성자와 연산자

  • map <int, int> m;
  • 기본 선언 방법
  • map m(pred);
  • pred를 통해 정렬 기준(오름, 내림)을 세웁니다.
  • map m2(m1);
  • m1을 복사한 m2를 생성합니다.
  • 연산자 ("==", "!=", "<", ">", "<=", ">=") 사용 가능합니다.
  • 연산자 m [key] = val; 을 통해서 원소( key, value )를 추가 또는 수정이 가능합니다.

'Algorithm > Algorithm' 카테고리의 다른 글

118667. 두 큐 합 같게 만들기  (0) 2025.02.26
[자료구조/알고리즘] Eulerian circuit(한붓그리기)  (0) 2021.01.13
[자료구조/알고리즘] 비트연산을 통한 순열  (0) 2021.01.11
[자료구조/알고리즘] 재귀 함수를 이용한 부분 집합 생성 알고리즘  (0) 2021.01.06
'Algorithm/Algorithm' 카테고리의 다른 글
  • 118667. 두 큐 합 같게 만들기
  • [자료구조/알고리즘] Eulerian circuit(한붓그리기)
  • [자료구조/알고리즘] 비트연산을 통한 순열
  • [자료구조/알고리즘] 재귀 함수를 이용한 부분 집합 생성 알고리즘
사랑우주인
사랑우주인
  • 사랑우주인
    lovelyAlien
    사랑우주인
  • 전체
    오늘
    어제
  • 글쓰기
    관리
    • 분류 전체보기 (209)
      • Programming (4)
        • Spring (28)
        • Java (46)
        • JPA (2)
        • 디자인 패턴 (5)
        • 개발&아키텍처 (0)
      • Network (14)
      • OS (19)
      • Database (1)
      • Kubernetes (0)
      • Kafka (2)
      • Algorithm (49)
        • BaekJoon (1)
        • Programmers (19)
        • Algorithm (5)
        • Socar (2)
        • LeetCode (19)
      • Interview (2)
      • Issues (2)
      • DotJoin (1)
      • Git (4)
      • 독서 (3)
      • 끄적끄적 (1)
      • 외부활동 (26)
        • 항해플러스 (2)
        • JSCODE 네트워크 (19)
        • JSCODE 자바 (5)
      • SQL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • GitHub
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    RR
    BFS
    runner 기법
    Oauth2
    Process
    Thread
    rotting oranges
    OS
    준영속 엔티티
    minimum number of arrows to burst balloons
    socar
    추상화 클래스
    wildcards
    LinkedList
    운영체제
    AuthenticationSuccessHandler
    lower bounded wildcards
    제네릭
    JSCode
    Reorder List
    clone graph
    Generic
    트랜잭션
    디자인 패턴
    pacific atlantic water flow
    fcfs
    @JsonNaming
    Climbing Stairs
    algorithm
    @JsonProperty
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
사랑우주인
[자료구조/알고리즘] 해시(Hash) 란?
상단으로

티스토리툴바