README.md

Download
markdown 174 lines 4.7 KB
  1# Hash Table Project (ํ•ด์‹œ ํ…Œ์ด๋ธ” ํ”„๋กœ์ ํŠธ)
  2
  3๋‹ค์–‘ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜์™€ ์ถฉ๋Œ ํ•ด๊ฒฐ ๊ธฐ๋ฒ•์„ ๊ตฌํ˜„ํ•œ ํ•ด์‹œ ํ…Œ์ด๋ธ” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  4
  5## ํŒŒ์ผ ๊ตฌ์„ฑ
  6
  7### 1. hash_functions.c
  8๋‹ค์–‘ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๋น„๊ต ๋ฐ ๋ถ„์„ ๋„๊ตฌ
  9
 10**๊ตฌํ˜„๋œ ํ•ด์‹œ ํ•จ์ˆ˜:**
 11- `hash_simple` - ๋‹จ์ˆœ ํ•ฉ์‚ฐ (์ถฉ๋Œ ๋งŽ์Œ, ๋‚˜์œ ์˜ˆ)
 12- `hash_djb2` - Daniel J. Bernstein (์ถ”์ฒœ)
 13- `hash_sdbm` - sdbm ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ•ด์‹œ
 14- `hash_fnv1a` - Fowler-Noll-Vo 1a
 15
 16**๊ธฐ๋Šฅ:**
 17- ํ•ด์‹œ ๊ฐ’ ๋น„๊ต ์ถœ๋ ฅ
 18- ์ถฉ๋Œ ํšŸ์ˆ˜ ๋ฐ ์ถฉ๋Œ๋ฅ  ๋ถ„์„
 19- ๋ถ„ํฌ ๊ท ์ผ์„ฑ ๋ถ„์„ (๋ถ„์‚ฐ ๊ณ„์‚ฐ)
 20- ํ•ด์‹œ ๋ถ„ํฌ ์‹œ๊ฐํ™”
 21
 22### 2. hash_chaining.c
 23์ฒด์ด๋‹(Separate Chaining)์„ ์ด์šฉํ•œ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ตฌํ˜„
 24
 25**ํŠน์ง•:**
 26- ์ถฉ๋Œ ์‹œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅ
 27- ํ…Œ์ด๋ธ” ํฌ๊ธฐ ์ œํ•œ ์—†์Œ
 28- ์‚ฝ์ž…/์‚ญ์ œ ๊ฐ„๋‹จ
 29
 30**๊ตฌํ˜„ ๊ธฐ๋Šฅ:**
 31- `ht_create()` - ํ•ด์‹œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
 32- `ht_set()` - ์‚ฝ์ž…/์ˆ˜์ •
 33- `ht_get()` - ๊ฒ€์ƒ‰
 34- `ht_delete()` - ์‚ญ์ œ
 35- `ht_print()` - ํ…Œ์ด๋ธ” ์ถœ๋ ฅ
 36- `ht_get_statistics()` - ํ†ต๊ณ„ ์ˆ˜์ง‘
 37- ์ฒด์ธ ๊ธธ์ด ๋ถ„ํฌ ์‹œ๊ฐํ™”
 38
 39### 3. hash_linear_probing.c
 40์„ ํ˜• ํƒ์‚ฌ(Linear Probing)๋ฅผ ์ด์šฉํ•œ ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ ํ•ด์‹œ ํ…Œ์ด๋ธ”
 41
 42**ํŠน์ง•:**
 43- ์ถฉ๋Œ ์‹œ ๋‹ค์Œ ๋นˆ ์Šฌ๋กฏ ํƒ์ƒ‰
 44- ์บ์‹œ ํšจ์œจ ์ข‹์Œ
 45- DELETED ์ƒํƒœ๋กœ ์‚ญ์ œ ์ฒ˜๋ฆฌ
 46
 47**๊ตฌํ˜„ ๊ธฐ๋Šฅ:**
 48- ์„ธ ๊ฐ€์ง€ ์Šฌ๋กฏ ์ƒํƒœ (EMPTY, OCCUPIED, DELETED)
 49- ์„ ํ˜• ํƒ์‚ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
 50- ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ถ„์„
 51- ๋กœ๋“œ ํŒฉํ„ฐ๋ณ„ ์„ฑ๋Šฅ ๋น„๊ต
 52- ํด๋Ÿฌ์Šคํ„ฐ ์‹œ๊ฐํ™”
 53
 54### 4. dictionary.c
 55ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ํ™œ์šฉํ•œ ์‹ค์šฉ์ ์ธ ์‚ฌ์ „ ํ”„๋กœ๊ทธ๋žจ
 56
 57**์ฃผ์š” ๊ธฐ๋Šฅ:**
 58- ๋‹จ์–ด ์ถ”๊ฐ€/๊ฒ€์ƒ‰/์‚ญ์ œ
 59- ์ „์ฒด ๋ชฉ๋ก ์ถœ๋ ฅ
 60- ํŒŒ์ผ ์ €์žฅ/๋ถˆ๋Ÿฌ์˜ค๊ธฐ (dictionary.txt)
 61- ๊ฒ€์ƒ‰ ์ œ์•ˆ (๋ถ€๋ถ„ ์ผ์น˜)
 62- ๊ฒ€์ƒ‰ ํ†ต๊ณ„ ๋ฐ ์ธ๊ธฐ ๋‹จ์–ด Top 10
 63- ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†๋Š” ๊ฒ€์ƒ‰
 64
 65**๋ฐ์ดํ„ฐ ๊ตฌ์กฐ:**
 66- ์ฒด์ด๋‹ ๋ฐฉ์‹
 67- ํ…Œ์ด๋ธ” ํฌ๊ธฐ: 1000
 68- ๊ฒ€์ƒ‰ ํšŸ์ˆ˜ ์ถ”์ 
 69
 70## ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰
 71
 72### ๊ฐœ๋ณ„ ์ปดํŒŒ์ผ
 73```bash
 74gcc -Wall -Wextra -std=c11 -o hash_functions hash_functions.c
 75gcc -Wall -Wextra -std=c11 -o hash_chaining hash_chaining.c
 76gcc -Wall -Wextra -std=c11 -o hash_linear_probing hash_linear_probing.c
 77gcc -Wall -Wextra -std=c11 -o dictionary dictionary.c
 78```
 79
 80### Makefile ์‚ฌ์šฉ
 81```bash
 82make                # ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ ์ปดํŒŒ์ผ
 83make hash_functions # ํŠน์ • ํ”„๋กœ๊ทธ๋žจ๋งŒ ์ปดํŒŒ์ผ
 84make clean          # ์ƒ์„ฑ๋œ ํŒŒ์ผ ์‚ญ์ œ
 85make run_dict       # ์‚ฌ์ „ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰
 86```
 87
 88### ์‹คํ–‰
 89```bash
 90./hash_functions        # ํ•ด์‹œ ํ•จ์ˆ˜ ๋น„๊ต
 91./hash_chaining         # ์ฒด์ด๋‹ ํ…Œ์ŠคํŠธ
 92./hash_linear_probing   # ์„ ํ˜• ํƒ์‚ฌ ํ…Œ์ŠคํŠธ
 93./dictionary            # ์‚ฌ์ „ ํ”„๋กœ๊ทธ๋žจ
 94```
 95
 96## ํ•™์Šต ํฌ์ธํŠธ
 97
 98### ํ•ด์‹œ ํ•จ์ˆ˜ ์„ ํƒ
 99- **djb2**: ์ผ๋ฐ˜์ ์ธ ์šฉ๋„, ๊ท ํ˜•์žˆ๋Š” ์„ฑ๋Šฅ
100- **FNV-1a**: ๋น ๋ฅธ ์†๋„ ํ•„์š” ์‹œ
101- **sdbm**: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์šฉ๋„
102- **Simple์€ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ** (์ถฉ๋Œ๋ฅ  ๋†’์Œ)
103
104### ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋น„๊ต
105
106| ๋น„๊ต ํ•ญ๋ชฉ | ์ฒด์ด๋‹ | ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ |
107|-----------|--------|---------------|
108| ๋ฉ”๋ชจ๋ฆฌ | ๋™์  ํ• ๋‹น | ๊ณ ์ • ํฌ๊ธฐ |
109| ์‚ญ์ œ | ๊ฐ„๋‹จ | DELETED ํ‘œ์‹œ ํ•„์š” |
110| ์บ์‹œ ํšจ์œจ | ๋ถˆ๋ฆฌ | ์œ ๋ฆฌ |
111| ๋กœ๋“œ ํŒฉํ„ฐ | >1 ๊ฐ€๋Šฅ | <1 ํ•„์ˆ˜ |
112| ๊ตฌํ˜„ ๋ณต์žก๋„ | ๋‚ฎ์Œ | ์ค‘๊ฐ„ |
113
114### ์‹œ๊ฐ„ ๋ณต์žก๋„
115
116| ์—ฐ์‚ฐ | ํ‰๊ท  | ์ตœ์•… |
117|------|------|------|
118| ์‚ฝ์ž… | O(1) | O(n) |
119| ๊ฒ€์ƒ‰ | O(1) | O(n) |
120| ์‚ญ์ œ | O(1) | O(n) |
121
122### ์„ฑ๋Šฅ ์ตœ์ ํ™” ํŒ
1231. ๋กœ๋“œ ํŒฉํ„ฐ 0.7 ์ดํ•˜ ์œ ์ง€
1242. ์ข‹์€ ํ•ด์‹œ ํ•จ์ˆ˜ ์„ ํƒ (djb2 ์ถ”์ฒœ)
1253. ํ…Œ์ด๋ธ” ํฌ๊ธฐ๋Š” ์†Œ์ˆ˜(prime number) ์‚ฌ์šฉ ๊ถŒ์žฅ
1264. ์ฒด์ด๋‹ vs ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ ์„ ํƒ์€ ์šฉ๋„์— ๋”ฐ๋ผ
127
128## ์˜ˆ์ œ ์ถœ๋ ฅ
129
130### hash_functions ์‹คํ–‰ ๊ฒฐ๊ณผ
131```
132=== ํ•ด์‹œ ํ•จ์ˆ˜ ๋น„๊ต ===
133
134Key          | Simple | djb2 | sdbm | fnv1a
135-------------|--------|------|------|------
136apple        |     30 |   43 |   58 |    67
137banana       |      9 |   42 |   49 |    52
138
139=== ์ถฉ๋Œ ๋ถ„์„ ===
140Simple       |        14 | 28.0%
141djb2         |         6 | 12.0%  โ† ์ตœ์†Œ ์ถฉ๋Œ
142```
143
144### dictionary ์‚ฌ์šฉ ์˜ˆ
145```
146์„ ํƒ: 1
147๋‹จ์–ด: programming
148๋œป: ํ”„๋กœ๊ทธ๋ž˜๋ฐ; ์ปดํ“จํ„ฐ์— ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ์ž‘์—…
149โœ“ 'programming' ์ถ”๊ฐ€๋จ
150
151์„ ํƒ: 2
152๊ฒ€์ƒ‰ํ•  ๋‹จ์–ด: prog
153'prog'๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด:
154  - programming
155์ด 1๊ฐœ ๋ฐœ๊ฒฌ
156```
157
158## ํ™•์žฅ ์•„์ด๋””์–ด
159
1601. **๋™์  ํฌ๊ธฐ ์กฐ์ ˆ**: ๋กœ๋“œ ํŒฉํ„ฐ๊ฐ€ 0.7 ์ดˆ๊ณผ ์‹œ ํ…Œ์ด๋ธ” ํฌ๊ธฐ 2๋ฐฐ ํ™•์žฅ
1612. **์ด์ค‘ ํ•ด์‹ฑ**: ๋‘ ๋ฒˆ์งธ ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ํƒ์‚ฌ ๊ฐ„๊ฒฉ ๊ฒฐ์ •
1623. **์‚ฌ์ „ ๊ธฐ๋Šฅ ์ถ”๊ฐ€**:
163   - ๋‹จ์–ด ์˜ˆ๋ฌธ
164   - ๋ฐœ์Œ ๊ธฐํ˜ธ
165   - ๋™์˜์–ด/๋ฐ˜์˜์–ด
1664. **์„ฑ๋Šฅ ์ธก์ •**: ๊ฐ ์—ฐ์‚ฐ์˜ ์‹ค์ œ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ์ธก์ •
1675. **๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ**: ์ฝ๊ธฐ ๋™์‹œ์„ฑ ์ง€์›
168
169## ์ฐธ๊ณ  ์ž๋ฃŒ
170
171- ํ•ด์‹œ ํ•จ์ˆ˜: [djb2, sdbm, FNV-1a ์•Œ๊ณ ๋ฆฌ์ฆ˜](http://www.cse.yorku.ca/~oz/hash.html)
172- ์ถฉ๋Œ ํ•ด๊ฒฐ: Cormen et al., "Introduction to Algorithms"
173- ์‹ค์ „ ํ™œ์šฉ: Python `dict`, Java `HashMap`, C++ `unordered_map`