DEVLOG
ํด์(Hash) ๊ฐ๋ ๊ณผ ์ฝ๋ฉํ ์คํธ์์ ํ์ฉํ๊ธฐ ๋ณธ๋ฌธ
ํด์(Hash) ๊ฐ๋ ๊ณผ ์ฝ๋ฉํ ์คํธ์์ ํ์ฉํ๊ธฐ
meroriiDev 2023. 7. 25. 15:55๐ ๋ชฉ์ฐจ
์ฝ๋ฉํ
์คํธ ๋ฌธ์ ๋ฅผ ํ๋ค๋ณด๋ฉด ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ค๋ ๊ธฐ์ถ ํํ์ธ ํด์.
๋งค๋ฒ ๊ฒ์ํด๋ณด๊ณ ํด๊ฒฐ๋ฒ์ ์ฐพ์๋ณด๊ธดํ์ง๋ง ์ด๋ฒ ๊ธฐํ์ ๊ฐ๋
์ ํ์คํ ์ก๊ณ ์ ๊ฐ๋
๊ณผ ํ์ฉ๋ฒ์ ๋ํด ์ ๋ฆฌํ๊ธฐ๋ก ํด๋ณด์๋ค.
Hash, Hash Function, Hash Table
๋จผ์ ์ ์ผ ํฐ ๊ฐ๋ ์ ํด์ํ ์ด๋ธ์ ํด์ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํค๋ฅผ ํด์๊ฐ์ผ๋ก ๋งคํํ๊ณ , ์ด ํด์๊ฐ์ index๋ก ์ฃผ์์ผ์ key์ ํจ๊ป ๊ฐ์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๋จ์ํ๊ฒ key - value๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํค๋ฅผ ํด์ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋งคํํ๋ค๊ณ ํ๋๋ฐ, ์ด๋ ์ํ๋ ๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฐพ์ ์ ์๊ฒ ํ๊ธฐ ์ํด ์ ์ฅํ๋ ์์น๋ฅผ ์ ๊ณจ๋ผ์ผ ํ๋๋ฐ ํด์ํจ์๋ key๋ฅผ ๊ณ ์ ๋ ๊ธธ์ด์ ํด์๋ก ๋ณ๊ฒฝํด์ฃผ๋ ์ญํ ์ ํ๋ค.
์ ๋ฆฌํ์๋ฉด,
hash๋ ์์ธ ๋๋ ์ธ๋ฑ์ค
hash function์ key->hash๋ก ๋ง๋ค์ด ์ฃผ๋ ํจ์
hash table์ hash๋ฅผ ์ฃผ์๋ก ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
Hash Table
์ ๋ฆฌํ๊ฒ์ ๋ฐ๋ผ ์ฃผ๋ก ์ฝ๋ฉํ ์คํธ์์ ์ฌ์ฉ๋๋ ๊ฒ์ ํด์ํ ์ด๋ธ์ด๊ณ , ํด์ํ ์ด๋ธ์ ๋ํด ๊ณต๋ถํด๋ณด์.
์์์ ํด์ํ
์ด๋ธ์ด๋ key - value๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ์ค๋ช
ํ๋ค.
์ด๋ key๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐพ๊ธฐ ์ํ ๊ฒ์์ด, value๋ ๊ฒ์์ด๋ก ๋์จ ๊ฒฐ๊ณผ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ณ ์ฝ๊ฒ ์ ํ๋ฒํธ๋ถ๋ฅผ ์์๋ก ๋ค๋ฉด ์ด๋ฆ์ด key, ์ ํ๋ฒํธ๊ฐ value์ธ ์
์ด๋ค.
์๊ฐ๋ณต์ก๋
ํด์ํ ์ด๋ธ์ key-value๊ฐ 1:1๋ก ๋งคํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฝ์ , ์ญ์ , ํ์ ๋ชจ๋ O(1)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ฌ์ฉ ๋ชฉ์
๊ทธ๋ ๋ค๋ฉด, ์ด๋ค ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ๋ฅผ ๋ง๋ฌ์ ๋ ํด์๋ฅผ ์ฌ์ฉํด์ผํ ๊น?
- ๋น ๋ฅด๊ฒ ๊ฐ์ ์ฐพ์์ผํ๋ ๊ฒฝ์ฐ
- string์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ณ ๊ด๋ฆฌํด์ผํ ๋
๋ฌธ์ ์
ํด์์ถฉ๋(๊ฐ์ index๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ๋๋ฉด ํ๋์ ์นธ์ ์ฌ๋ฌ ๊ฐ์ด ๋ชฐ๋ฆฌ๋ ํด์์ถฉ๋์ด ๋ฐ์ํ๋ค.)
ํด์์ถฉ๋ ํด๊ฒฐ๋ฒ
- ์ ํํ์ฌ๋ฒ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์์ผ๋ก ํ ์นธ ์ด๋ํ๋ค.
์ต์ ์ ๊ฒฝ์ฐ O(n)์๊ฐ์ด ๊ฑธ๋ฆผ - ์ ๊ณฑํ์ฌ๋ฒ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์ถฉ๋์ด ๋ฐ์ํ ํ์์ ์ ๊ณฑ๋งํผ ์ด๋
- ์ด์คํด์ฑ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋ค๋ฅธ ํด์ ํจ์ ์ด์ฉ
- ๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ ๋ฒํท์ ๊ฐ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ์ฌ์ฉํ์ฌ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋ฆฌ์คํธ์ ๊ฐ์ ์ถ๊ฐํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ์ฉ
๊ฐ์ฒด
const table = {};
table["key"] = 100;
table["key2"] = "hello";
console.log(table["key"]) //100
table["key"] = 486;
console.log(table["key"]) //486
delete table["key"];
console.log(table["key"]) //undefined
Map
key๊ฐ์ผ๋ก object๋ array ๋ฑ ๋ณต์กํ ๊ฐ์ผ๋ก ๋ฃ์ ์ ์๋ค.
get, set๋ฑ ํธ๋ฆฌํ๊ฒ ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ด ์๋ค.
- .set(key, value) : ์ถ๊ฐ
- .get(key) : ์กฐํ
- .delete(key) : ์ญ์
- .keys() : key object ๋ฐํ
- .values() : value object ๋ฐํ
- .clear() : map ์ด๊ธฐํ
example
const table = new Map();
table.set("key", 100);
table.set("key2", "hello");
console.log(table['key']); //undefined
console.log(table.get('key')); //100
const object = {a:1};
table.set(object, "A1"); //object, array๋ฑ ๋ณต์กํ key๊ฐ์ด ๊ฐ๋ฅ
console.log(table.get(object)); //A1
table.delete(object);
console.log(table.get(object)); //undefined
console.log(table.keys()); //{ 'key', 'key2' }
console.log(table.values()); //{ 100, 'Hello' }
table.clear();
console.log(table.values()); //{ }
Set
set์ key์ value๊ฐ ๋์ผํ๊ฒ ๋ค์ด๊ฐ๋ฉฐ ์ค๋ณต์ด ์ ๊ฑฐ๋๋ค.
map์ฒ๋ผ ์ ๊ณต๋๋ ํธ๋ฆฌํ ๊ธฐ๋ฅ๋ค์ด ์๋ค.
- .add(key) : key์ value๊ฐ ๋์ผํ๊ฒ ๋ค์ด๊ฐ๋ค.
- .has(key) : key๋ผ๋ ๊ฐ์ด ์กด์ฌํ๋์ง ์ฌ๋ถ
- .delete(key) : ์ญ์
- .clear() : ์ด๊ธฐํ
example
const table = new Set();
table.add('key');
table.add('key2');
console.log(table.has('key')); //true
console.log(table.has('key3')); //false
table.delete('key2');
console.log(table.has('key2')); //false
table.add('key3');
console.log(table.size); //2
table.clear();
console.log(table.size); //0