2021. 8. 27. 08:00ใ์ฝ๋ฉ ํ ์คํธ ์ค๋น/์๋ฃ๊ตฌ์กฐ
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ค๋์ ์๋ฃ๊ตฌ์กฐ์์ Hash Table์ ๋ํด์ ๊ณต๋ถ ํด ๋ณด๋๋ก ํ ๊ฒ์ด์์!
์ ๊ฐ ์์ฑํ ์ฝ๋๊ฐ ๊ถ๊ธํ์๋ค๋ฉด? ์ฃผ๋ํ๋์ ๊น ํ๋ธ์ ๊ด์ฌ์ ์ฃผ์ธ์!
ํด์ ํจ์์ ๋ํ ๊ฐ๋ ์ ์ ๋ชจ๋ฅด์ ๋ค๋ฉด [์ ๋ณด๋ณด์] ํด์ํจ์ ๊ฐ๋ ์ ๊ด์ฌ์ ์ฃผ์ธ์!
๋ฐ๋ก ์์ ํด ๋ณด๊ฒ ์ต๋๋ค!
๐ Hash Table
๐ Hash ๊ตฌ์กฐ
Hash Table์ Key์ Data๋ฅผ ์ ์ฅํ๋ Data ๊ตฌ์กฐ์ธ ๊ฒ์ด์์.
JAVA๋ก ๋ณด๋ฉด Hash Map์ด ๋ ๊ฒ์ด๊ณ , Python์์๋ Dictionary ๊ตฌ์กฐ๊ฐ ๋ ๊ฒ์ด์์!
- Key๋ฅผ ํตํด ๋ฐ๋ก Data๋ฅผ ๋ฐ์์ฌ ์ ์์ผ๋ฏ๋ก, ์๋๊ฐ ํ๊ธฐ์ ์ผ๋ก ๋น ๋ฅด๋ค
- Python Dictionary(์ฌ์ ) Type Hash Table Exam : Key๋ฅผ ๊ฐ์ง๊ณ ๋ฐ๋ก Value๋ฅผ ๊บผ๋ธ๋ค.
- ๋ณดํต ๋ฐฐ์ด๋ก ๋ฏธ๋ฆฌ Hash Table ํฌ๊ธฐ ๋งํผ ์์ฑ ๋ค์ ์ฌ์ฉ (๊ณต๊ฐ๊ณผ ํ์ ์๊ฐ์ ๋ง๋ฐ๊พธ๋ ๊ธฐ๋ฒ)
- ๋จ, Python์ด๋, JAVA ๋ฑ Hash๋ฅผ ๋ณ๋ ๊ตฌํํ ์ด์ ๊ฐ ์๋ค. (Dictionary, Hash Map ์ฌ์ฉ)
๐ ์ฃผ์ ์ฉ์ด
- Hash : ์์ ๊ฐ์ ๊ณ ์ ๊ธธ์ด๋ก ๋ณํ (์
๋ ฅ ๊ฐ์ด ์๋ฌด๋ฆฌ ํฌ๋๋ผ๋ ๊ณ ์ ๋ ๊ฐ์ผ๋ก Out์ ํ๋ค. SHA -256์ ๊ฒฝ์ฐ Out ํฌ๊ธฐ๊ฐ 256)
์ ๋ ฅ ๊ฐ์ Block์ด๋ผ ๋ถ๋ฅธ๋ค. - Hash Table : Key Value์ ์ฐ์ฐ์ ์ํด ์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํ Data ๊ตฌ์กฐ
- Hashing Function(ํด์ฑ ํจ์) : Key๋ฅผ Hashing Function์ผ๋ก ์ฐ์ฐํ์ฌ Hash Value๋ฅผ ์์๋ด๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Hash Table์์ ํด๋น Key์ ๋ํ Data ์์น๋ฅผ ์ผ๊ด์ฑ ์๊ฒ ์ฐพ์ ์ ์๋ค.
- Slot : ํ ๊ฐ์ Data๋ฅผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ
- ์ ์ฅํ Data์ ๋ํด Key๋ฅผ ์ถ์ถํ ์ ์๋ ๋ณ๋ Function(ํจ์)๋ ์กด์ฌํ ์ ์๋ค.
๐ ์๋ฃ ๊ตฌ์กฐ Hash Table ์ฅ, ๋จ์ ๋ฐ ์ฃผ์ ์ฉ๋
๐ ์ฅ์
- Data ์ ์ฅ / ์ฝ๊ธฐ ์๋๊ฐ ๋น ๋ฅด๋ค. ( ๊ฒ์ ์๋๊ฐ ํ๋ฒ๋๊ฒ ๋น ๋ฅด๋ค.)
- Hash๋ Key์ ๋ํ Data๊ฐ ์๋์ง (์ค๋ณต) ํ์ธ์ด ์ฝ๋ค.
๐ ๋จ์
- ์ผ๋ฐ์ ์ผ๋ก ์ ์ฅ๊ณต๊ฐ์ด ์ข ๋ ๋ง์ด ํ์
- ์ฌ๋ฌ Key์ ํด๋นํ๋ ์ฃผ์๊ฐ ๋์ผํ ๊ฒฝ์ฐ ์ถฉ๋์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ณ๋ ์๋ฃ๊ตฌ์กฐ ํ์
๐ ์ฃผ์ ์ฉ๋
- ๊ฒ์์ด ๋ง์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ
- ์ ์ฅ, ์ญ์ , ์ฝ๊ธฐ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ ์ฌ์ฉ
- Cache ๊ตฌํ ์ ์ฌ์ฉ (์ค๋ณต ํ์ธ์ด ์ฝ๊ธฐ์ ์ฌ์ฉ)
๋จผ์ Hash๋ฅผ ์ด์ฉํด์ Data๋ฅผ ์ฐพ์ ๋, data์ ํด๋น('Andy', 'Dave', 'Trump')ํ๋ ๊ฒ์ ๋จผ์ ์ฐพ์ผ๋ฉด ๊ทธ์ Matching ๋๋ Key๋ฅผ ์ฐพ๊ฒ ๋๊ณ , ๊ทธ Key๋ฅผ ๋จผ์ ord()๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์์ด์ ASCII Code (์ ์)๋ฅผ ๊ตฌํ ๋ค์ Hash ํจ์์ ๋ฃ์ผ๋ฉด Division ๋ฐฉ์์ผ๋ก ๋๋๊ธฐ 5๋ฅผ ํ๊ณ , ๋๋จธ์ง ๊ฐ์ ์ฐพ๋ ๊ฒ์ด์์. ๊ทธ๋ฌ๊ณ ๋ ๋ค ๊ทธ๊ฒ์ Hash Address๋ก ์ฌ์ฉํ์ฌ Hash Table์ ์๋ ๋ฒํธ์ Matching ์์ผ ๊ฐ์ ์ฐพ์ ์ ์๋ต๋๋ค!
์์ ๊ฐ์ด Hash Table์ด ์๋ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ค๋ฉด Key(ASCII)์ Value๊ฐ ๋ค์ด๊ฐ ๋ ๊ฐ์ ๋ฐฐ์ด์ด ํ์ํ๊ฒ ๋ ๊ฒ์ด๊ณ , ๋ง์ฝ Trump๋ฅผ ์ฐพ์ผ๋ ค๋ฉด 16๋ฒ์ ๊ฒ์์ด ์ด๋ค์ด ์ ธ์ผ ํ๋ ๋จ์ ์ด ์๋ ๊ฒ์ด์์.
ํ์ง๋ง, Hash๋ฅผ ์ด์ฉํ๋ฉด ํด๋น data๋ฅผ ํตํด Matching๋๋ ๊ฐ์ ๋ด๋ถ ์ฐ์ฐ์ผ๋ก ๋ฐ๋ก ์ฐพ์ ์ ์๋ ์ฅ์ ์ด ์๋ต๋๋ค!
์ฐ๋ฆฌ๋ ์์ Hash Function์์ Division ๋ฐฉ์์ ์ํด 5๋ฅผ ๋๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ , Hash Table์ ์ด 5๊ฐ์ ๊ธธ์ด๋ฅผ ๊ฐ์ง๊ณ ์์ง์.
๋ด๊ฐ ์ ๋ ฅํ Data๋ณด๋ค ์ผ๋ฐ์ ์ผ๋ก ์กฐ๊ธ ํฌ๊ฒ Hash Table์ ๋ง๋ค์ด์ผ ํ๋๋ฐ, ์ฌ๊ธฐ์ Hash Table์ ๋จ์ ์ ์ ์๊ฐ ์๋ ๊ฒ์ด์์.
์์ ๊ทธ๋ฆผ์์ Hash Tabledp 1, 2๋ฒ Data๊ฐ ๋น์ด์์์๋ ๋ง๋ค์ด ์ค ๊ฒ์ ๋ง์ฝ ๋ด๊ฐ ๋ฃ์ Data ๊ฐ์ ๋งํผ ๊ธธ์ด๋ฅผ ์ก๊ฑฐ๋ ๊ทธ ๋ณด๋ค ์ ๊ฒ ์ก๊ฒ ๋๋ฉด '์ถฉ๋'์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ณ๋ ์๋ฃ ๊ตฌ์กฐ๊ฐ ํ์ํด ์ง๋ ๊ฒ์ด์์. ๋ง์ฝ Andy๋ผ๋ ๊ฐ์ Key์ ์ถ๊ฐ๋ก ๋ฃ์ Harang์ด๋ผ๋ Data์ Key๊ฐ ๋์ผํ๋ค๋ฉด ์ด๊ฒ์ ๊ตฌ๋ถํ๊ธฐ ์ํด Hash Table์ ๊ธธ์ด๊ฐ ์์ผ๋ฉด ์์์๋ก ์ด๋ฌํ ํ๋ฅ ์ด ์ฌ๋ผ๊ฐ๋ค๋ ๋จ์ ์ด ์๋ต๋๋ค!
๐ ์ถฉ๋(Collision)
ํด์ฌ ํ ์ด๋ธ์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ์ถฉ๋์ธ ๊ฒ์ด์์. ์ด ๋ฌธ์ ๋ฅผ ์ถฉ๋ ๋๋ ํด์ฌ ์ถฉ๋(Hash Collision)์ด๋ผ ํ๋ต๋๋ค!
๐ ์ถฉ๋ ํด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ
๐ Chaning ๊ธฐ๋ฒ
๊ฐ๋ฐฉ ํด์ฑ ํน์ Open Hashaing ๊ธฐ๋ฒ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฒ์ด์์. ์ด๊ฒ์ ํด์ฌ ํ ์ด๋ธ ์ ์ฅ ๊ณต๊ฐ ์ธ ์ถ๊ฐ๋ก ๊ณต๊ฐ์ ํ์ฉํ๋ ๊ธฐ๋ฒ์ธ ๊ฒ์ด์์.
์ถฉ๋์ด ์ผ์ด๋๋ฉด, ๋งํฌ๋ ๋ฆฌ์คํธ๋ผ๋ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ํ์ํ์ฌ ๋งํฌ๋ ๋ฆฌ์คํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ๋ผ๊ณ ๋ค์ ์ฐ๊ฒฐ ์์ผ์ ์ ์ฅํ๋ ๊ธฐ๋ฒ์ธ ๊ฒ์ด๋๋๋ค.
CollisionChainning.py
# HashTable ์ถฉ๋ ํด๊ฒฐ ํ์ต
print("์ฐ์ต ๋ฌธ์ : ์ฐ์ต ๋ฌธ์ 1๋ฒ(hashTable.py)์ Hash Table Code์ Chaining ๊ธฐ๋ฒ์ผ๋ก ์ถฉ๋ํด๊ฒฐ Code ์์ฑ")
print('-' * 100)
print("Hash Function : key % 8 \n Hash Key : hash(data)")
print('-' * 100 + '\n')
hash_table = list([0 for i in range(10)])
def hash_function(key_1):
return key_1 % 10
def hash_key_maker(data1):
return hash(data1)
def save_data(data1, value):
# Hash Table์ ์ถฉ๋๋ก ์ธํ์ฌ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ํตํ์ฌ chainning๊ธฐ๋ฒ์ ํตํด ํด๊ฒฐ์ ํ๊ณ ์ ํ ๋, ํด๋น ๊ฐ์ ํ๋ณํ๊ธฐ ์ํ์ฌ key๋ฅผ ๋ฐ๋ก ์ ์ฅ
index_key = hash_key_maker(data1)
hash_address = hash_function(index_key)
if hash_table[hash_address] != 0:
for index in range(len(hash_table[hash_address])):
if hash_table[hash_address][index][0] == index_key:
hash_table[hash_address][index][1] = value
return
hash_table[hash_address].append(index_key, value)
else:
hash_table[hash_address] = [[index_key, value]]
def output_data(data1):
index_key = hash_key_maker(data1)
hash_address = hash_function(index_key)
if hash_table[hash_address] != 0:
for index in range(len(hash_table[hash_address])):
if hash_table[hash_address][index][0] == index_key:
return hash_table[hash_address][index][1]
return None
else:
return None
return hash_table[hash_address]
# hash ์ถฉ๋์ ๋ฐ์ ์ํค๊ธฐ ์ํด Test
print(hash('Juny') % 10)
print(hash('Harang') % 10)
print(hash('Dev') % 10)
print('-' * 100 + '\n')
save_data('Juny', '12345678')
save_data('Dev', '22293848')
print(output_data('Juny'))
print('-' * 100 + '\n')
print(hash_table)
print('=' * 100 + '\n')
๐ Linear Probing ๊ธฐ๋ฒ
ํ์ ํด์ ๋๋ Close Hashing ๊ธฐ๋ฒ ์ค ํ๋๋ก ํด์ฌ ํ ์ด๋ธ ์ ์ฅ ๊ณต๊ฐ ์์์ ์ถฉ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ธฐ๋ฒ์ธ ๊ฒ์ด์์.
์ถฉ๋์ด ์ผ์ด๋๋ฉด, ํด๋น hash address์ ๋ค์ address๋ถํฐ ๋งจ ์ฒ์ ๋์ค๋ ๋น ๊ณต๊ฐ์ Data๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฒ์ด๋๋๋ค!
์ ์ฅ ๊ณต๊ฐ ํ์ฉ๋๋ฅผ ๋์ด๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค๊ณ ํด์!
CollisionLinearProbing.py
# HashTable ์ถฉ๋ ํด๊ฒฐ ํ์ต
print("์ฐ์ต ๋ฌธ์ : ์ฐ์ต ๋ฌธ์ 1๋ฒ(hashTable.py) Hash Table Code์ Linear Probing ๊ธฐ๋ฒ์ผ๋ก ์ถฉ๋ ํด๊ฒฐ")
print('-' * 100)
print("Hash Function : key % 8 \n Hash Key : hash(data)")
print('-' * 100 + '\n')
hash_table = list([0 for i in range(10)])
def hash_function(key_1):
return key_1 % 10
def hash_key_maker(data1):
return hash(data1)
def save_data(data1, value):
index_key = hash_key_maker(data1)
hash_address = hash_function(index_key)
if hash_table[hash_address] != 0:
for index in range(hash_address, len(hash_table)):
if hash_table[index] == 0:
hash_table[index] = [index_key, value]
return
elif hash_table[index][0] == index_key: # ๊ฐ์ด ๋ค๋ฅด์ง๋ง, index Key๊ฐ ๋์ผํ๋ค๋ฉด?
hash_table[index][1] = value # ๊ทธ ๋ค์ ์์น์ ๊ฐ์ ์ ์ฅํ๋ค.
return
else:
hash_table[hash_address] = [index_key, value]
def output_data(data1):
index_key = hash_key_maker(data1)
hash_address = hash_function(index_key)
if hash_table[hash_address] != 0:
for index in range(hash_address, len(hash_table)):
if hash_table[index] == 0:
return None
elif hash_table[index][0] == index_key:
return hash_table[index][1]
else:
return None
print(hash('dk') % 10)
print(hash('da') % 10)
print('-' * 100 + '\n')
save_data('dk', '010393838')
save_data('da', '020393838')
print(output_data('dk'))
print(output_data('da'))
print('-' * 100 + '\n')
๐ ๋น๋ฒํ ์ถฉ๋์ ๊ฐ์ ํ๋ ๊ธฐ๋ฒ
ํด์ฌ ํจ์๋ฅผ ์ฌ์ ์ ํ๊ฑฐ๋, ํด์ฌ ํ ์ด๋ธ ์ ์ฅ ๊ณต๊ฐ์ ํ๋ํ๋ค๋ฉด ์ถฉ๋์ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ ์ ์๋ ๊ฒ์ด์์.
์๋ฅผ ๋ค์ด 5๊ฐ์ Data๋ฅผ ์ ์ฅํด์ผ ํ๋ค๋ฉด 50%๊ฐ ๋๋ ์ ์ฅ ๊ณต๊ฐ์ธ 10๊ฐ ์ด์์ผ๋ก ํด์ฌ ํ ์ด๋ธ ๊ณต๊ฐ์ ๋ง๋๋ ๊ฒ์ด์ง์!
๐ก์ฐธ๊ณ : ํด์ฌ ํจ์์ ํค ์์ฑ ํจ์
- Python์ hash()๋ ์คํํ ๋๋ง๋ค, Value๊ฐ ๋ค๋ฅผ ์ ์๋ค.
- ์ ๋ช ํ Hash ํจ์ ์ข ๋ฅ : SHA(Secure Hash Alogorithm, ์์ ํ ํด์ ์๊ณ ๋ฆฌ์ฆ)
* ์ด๋ค Data๋ ์ ์ผํ ๊ณ ์ ํฌ๊ธฐ์ ๊ณ ์ ๊ฐ์ ๋ฐํํด์ฃผ๋ฏ๋ก, ํด์ฌ ํจ์๋ก ์ ์ฉํ๊ฒ ํ์ฉ ๊ฐ๋ฅ
๐ SHA-1
import hashlib
data = 'test'.encode() # test String์ Byte ํํ๋ก ๋ฐ๊ฟ์ค๋ค.
hash_obj = hashlib.sha1()
hash_obj.update(b'test') # test String์ Byte ํํ๋ก ๋ฐ๊ฟ์ค๋ค.
print('test์ sha1 ๊ฐ์ \'' + str(hash_obj) + '\' ์
๋๋ค.')
print('-' * 100 + '\n')
hex_dig = hash_obj.hexdigest() # 16์ง์๋ก Byte ํํ๋ก ๋ฐ๊พผ ๊ฐ์ hex_dig์ ๋ด๋๋ค.
print('test์ sha1์ผ๋ก ๋ณํํ ๊ฐ์ ๋ค์ 16์ง์๋ก ๋ณํํ ๊ฐ์ \'' + hex_dig + '\' ์
๋๋ค.')
print('-' * 100 + '\n')
๐ SHA-256
import hashlib
data = 'test'.encode() # test String์ Byte ํํ๋ก ๋ฐ๊ฟ์ค๋ค.
hash_obj = hashlib.sha256()
hash_obj.update(b'test') # test String์ Byte ํํ๋ก ๋ฐ๊ฟ์ค๋ค.
print('test์ sha256 ๊ฐ์ \'' + str(hash_obj) + '\' ์
๋๋ค.')
print('-' * 100 + '\n')
hex_dig = hash_obj.hexdigest() # 16์ง์๋ก Byte ํํ๋ก ๋ฐ๊พผ ๊ฐ์ hex_dig์ ๋ด๋๋ค.
print('test์ sha256์ผ๋ก ๋ณํํ ๊ฐ์ ๋ค์ 16์ง์๋ก ๋ณํํ ๊ฐ์ \'' + hex_dig + '\' ์
๋๋ค.')
print('-' * 100 + '\n')
# HashTable ์ถฉ๋ ํด๊ฒฐ ํ์ต
print("์ฐ์ต ๋ฌธ์ : ์ฐ์ต ๋ฌธ์ 2๋ฒ(CollistionChainning.py)์ Chaining ๊ธฐ๋ฒ์ ์ ์ฉํ Hash Table Code์ Key ์์ฑ ํ ์๋ฅผ SHA-256์ผ๋ก ๋ณ๊ฒฝ ํด ๋ณด๊ธฐ")
print('-' * 100)
print("Hash Function : key % 8 \n Hash Key : hash(data)")
print('-' * 100 + '\n')
hash_table = list([0 for i in range(10)])
def hash_function(key_1):
return key_1 % 10
def hash_key_maker(data1):
hash_object = hashlib.sha256()
hash_object.update(data1.encode())
hex_digest = hash_object.hexdigest()
return int(hex_digest, 16) # ๋ฌธ์์ด์ธ hex_digest๋ 16์ง์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ด ๋์ด ์์ผ๋ฏ๋ก, ์ด๊ฒ์ 10์ง์ int๋ก ๋ณํํ๋ค.
def save_data(data1, value):
# Hash Table์ ์ถฉ๋๋ก ์ธํ์ฌ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ํตํ์ฌ chainning๊ธฐ๋ฒ์ ํตํด ํด๊ฒฐ์ ํ๊ณ ์ ํ ๋, ํด๋น ๊ฐ์ ํ๋ณํ๊ธฐ ์ํ์ฌ key๋ฅผ ๋ฐ๋ก ์ ์ฅ
index_key = hash_key_maker(data1)
hash_address = hash_function(index_key)
if hash_table[hash_address] != 0:
for index in range(len(hash_table[hash_address])):
if hash_table[hash_address][index][0] == index_key:
hash_table[hash_address][index][1] = value
return
hash_table[hash_address].append(index_key, value)
else:
hash_table[hash_address] = [[index_key, value]]
def output_data(data1):
index_key = hash_key_maker(data1)
hash_address = hash_function(index_key)
if hash_table[hash_address] != 0:
for index in range(len(hash_table[hash_address])):
if hash_table[hash_address][index][0] == index_key:
return hash_table[hash_address][index][1]
return None
else:
return None
return hash_table[hash_address]
# hash ์ถฉ๋์ ๋ฐ์ ์ํค๊ธฐ ์ํด Test
print(hash_key_maker('dbaa') % 10)
print(hash_key_maker('daaa') % 10)
print(hash_key_maker('dh') % 10)
print('-' * 100 + '\n')
save_data('dbaa', '12345678')
save_data('daaa', '22293848')
print(output_data('dbaa'))
print(output_data('daaa'))
print('-' * 100 + '\n')
print(hash_table)
print('=' * 100 + '\n')
๐ ์๊ฐ ๋ณต์ก๋
์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ (Collision์ด ์๋ค๊ณ ๊ฐ์ )๋ O(Big O)(1)์ด๊ณ , ์ต์ ์ ๊ฒฝ์ฐ(Collision์ด ๋ชจ๋ ๋ฐ์ํ์์ ๋๋ฅผ ๊ฐ์ )๋ O(n)์ด ๊ฑธ๋ฆฝ๋๋ค!
ํด์ฌ ํ ์ด๋ธ์ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ๊ธฐ๋ํ๊ณ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๋ O(1)์ด๋ผ๊ณ ๋งํ๋ต๋๋ค.
๐ ๊ฒ์์์ Hash Table ์ฌ์ฉ ์
16๊ฐ์ ๋ฐฐ์ด์ Data๋ฅผ ์ ์ฅํ๊ณ , ๊ฒ์ํ ๋ O(n)์ธ ๊ฒ์ด๊ณ , 16๊ฐ์ Data ์ ์ฅ ๊ณต๊ฐ์ ๊ฐ์ง ์์ Hash Table์ Data๋ฅผ ์ ์ฅํ๊ณ , ๊ฒ์ํ ๋ O(1)์ด๋๋๋ค!
'์ฝ๋ฉ ํ ์คํธ ์ค๋น > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] Tree ๊ตฌ์กฐ(1) (0) | 2021.08.29 |
---|---|
[์๋ฃ๊ตฌ์กฐ] Tree ๊ตฌ์กฐ(2) (0) | 2021.08.29 |
[์๋ฃ๊ตฌ์กฐ] 04. Linked List (0) | 2021.08.15 |
[์๋ฃ๊ตฌ์กฐ] 03. Stack (0) | 2021.08.10 |
[์๋ฃ๊ตฌ์กฐ] 02. Queue (0) | 2021.08.09 |