일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- IOS
- 운영체제
- @state
- 100 days of SwiftUI
- Algorithm
- decode
- core data
- 앨런
- 동기화
- Linked List
- Codable
- scrollview
- UserDefaults
- 프로세스 스케줄링
- Swift
- 상호배제
- Apple Developer Academy
- async
- SwiftUI
- 인프런
- 동시성
- 데드락
- 알고리즘
- 비동기
- forEach
- deadlock
- struct
- 가상 메모리
- COLOR
- 오브젝트
Archives
- Today
- Total
기어가더라도 제대로
[알고리즘 스터디 with 케이시] 선형 자료 구조 - 해시 테이블 본문
사물함의 각 칸에 이름과 번호가 있어서 바로 찾기가 쉽듯,
해시 테이블도 키를 인덱스로 변환하여 값을 넣는다.
정의
- 키와 값을 받아 키를 해싱(Hashing)하여 나온 index에 값을 저장하는 선형 자료구조
- 삽입은 O(1)이며 키를 알고 있다면, 삭제, 탐색도 O(1) 로 수행한다.
키를 잘게 잘라 인덱스로 만들어 사용한다는 것이 비슷하다.
해시 함수는 입력 받은 값을 특정 범위 내 숫자로 변경하는 함수
특별한 규칙이 있는 것은 아니다.
해시 충돌 Hash Collision
해시 충돌이란, 키값을 인덱싱한 결과 서로 다른 키지만, 인덱스 값이 같은 경우, 해시 충돌이라고 한다.
1. 선형 탐사법
충돌이 발생하면 옆으로 한 칸 이동한다.
2. 제곱 탐사법
충돌이 발생하면 충돌이 발생한 횟수의 제곱만큼 옆으로 이동한다.
3. 이중 해싱
충돌이 발생하면 다른 해시 함수를 이용한다.
4. 분리 연결법
버킷의 값을 연결 리스트로 사용하여 충돌이 발생하면 리스트에 값을 추가한다.
사용처
학생 정보를 어떻게 관리 할 것인가?
링크드 리스트 탐색 - O(N)
배열 인덱스를 모를 경우 탐색 - O(N)
반면 해시 테이블을 이용하면 O(1) 에 찾을 수 있다.
따라서 빠르게 값을 찾아야하는 경우 해시 테이블을 사용하는 것이 좋다.
이름을 키로 하여 탐색과 삽입 삭제를 하면 수월하게 할 수 있다.
스위프트에선, Set<>, Dictionary[:] 를 사용할 때 키로 Hashable 이 채택된 타입을 사용해야한다.
'CS > 자료구조' 카테고리의 다른 글
[알고리즘 스터디 with 케이시] 비 선형 자료 구조 - 트리 (0) | 2022.07.24 |
---|---|
[알고리즘 스터디 with 케이시] 비선형 자료구조 - 힙 (0) | 2022.07.24 |
[알고리즘 스터디 with 케이시] 선형 자료구조 - 큐 (0) | 2022.07.22 |
[알고리즘 스터디 with 케이시] 선형 자료구조 - 스택 (0) | 2022.07.22 |
[알고리즘 스터디 with 케이시] 선형 리스트 - 연결 리스트 (0) | 2022.07.22 |
Comments