Hash Map - Basic

JeongChaeJin·2022년 11월 11일
0

Hash Map

  • Reference
  • Reference2
  • Reference3
  • Insert/Find 기능이 O(1)의 Tiem Complexity를 가진다.
  • Data Constructor가 Key-Value 관계를 가진다.
  • Hash Map의 핵심은 hash function 이며 해당 Output을 조작하여 Bucket으로 설정해서 Linked List 구조로 둔다.
    • Insert/Find가 사실상 O(1)은 아니라 O(n)이라는 뜻이다.
  • Bucket Size가 초과되면 Rehasing을 진행한다.

Example

  • Two Sum 문제에서 아래와 같은 값들을 줬다고 해보자.
[13, 7, 5, 1, 3, 2]
  • 더해서 10이되는 두 수들을 찾는 문제에서 Hash Map을 활용할 수 있다.
  • 기존 Array 방식의 알고리즘에서 O(nlogn)의 TimeComplexity를 가졌지만, HashMap에서는 O(n)으로 끝낼 수 있다.
  • Key를 10에서 해당 element를 뺀 값으로 하고, Value를 해당 Index로 두면 된다.
KeyValue
-30
31
52
93
74
85
  • 이렇게 Hash Table을 두고 있으면 13인 경우 -3이 필요하고 계속해서 Key값을 채워나갈 것이다. 채워나갈 때, 3이라는 값의 필요한 수 7을 Key로 넣기전에 Hash Key에 3이 존재하므로 쌍이 존재한다는 의미이므로 빠르게 합이 10인 쌍을 찾아 낼 수 있는 것이다.
    • 다만, Space Complexity는 O(n)으로 늘어난다.

Example2

  • Isomorphic의 경우를 생각해보자. 이러한 문제에서는 대응되는 Alphabet 쌍이 핵심이다. 하나의 문자열에대한 문자와 다른 문자열에 대한 문자를 Key-Value 관계로두고 판단하면된다.
aaaffh, xyzhhh
|Key|Value|
|--|--|
|a|x|
|a|y?|
  • a는 이미 x와 매칭되어 있으므로 False ! Invalid !

Example3

  • Anagram
nocodeprogram, promodernacog
KeyValue
n1
......
  • 각 단어의 개수를 세어주고 다른 문자열에서 다시 하나씩 빼주는 것이다.
  • 모든 Value의 값이 0이면 Anagram인 것이다.
  • O(n)의 Time Complexity로 해결이 가능한 것이다.
profile
OnePunchLotto

0개의 댓글