DEVLOG

ํ•ด์‹œ(Hash) ๊ฐœ๋…๊ณผ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ํ™œ์šฉํ•˜๊ธฐ ๋ณธ๋ฌธ

frontend/log

ํ•ด์‹œ(Hash) ๊ฐœ๋…๊ณผ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ํ™œ์šฉํ•˜๊ธฐ

meroriiDev 2023. 7. 25. 15:55
728x90
๋ฐ˜์‘ํ˜•
๐Ÿ“–  ๋ชฉ์ฐจ

     

    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋ฉด ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ธฐ์ถœ ํ˜•ํƒœ์ธ ํ•ด์‹œ.
    ๋งค๋ฒˆ ๊ฒ€์ƒ‰ํ•ด๋ณด๊ณ  ํ•ด๊ฒฐ๋ฒ•์„ ์ฐพ์•„๋ณด๊ธดํ–ˆ์ง€๋งŒ ์ด๋ฒˆ ๊ธฐํšŒ์— ๊ฐœ๋…์„ ํ™•์‹คํžˆ ์žก๊ณ ์ž ๊ฐœ๋…๊ณผ ํ™œ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ธฐ๋กœ ํ•ด๋ณด์•˜๋‹ค.

     

    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๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋˜๋ฉด ํ•˜๋‚˜์˜ ์นธ์— ์—ฌ๋Ÿฌ ๊ฐ’์ด ๋ชฐ๋ฆฌ๋Š” ํ•ด์‹œ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค.)
    ํ•ด์‹œ์ถฉ๋Œ ํ•ด๊ฒฐ๋ฒ•

    1. ์„ ํ˜•ํƒ์‚ฌ๋ฒ• ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์˜†์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•œ๋‹ค.
      ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n)์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ
    2. ์ œ๊ณฑํƒ์‚ฌ๋ฒ• ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํšŸ์ˆ˜์˜ ์ œ๊ณฑ๋งŒํผ ์ด๋™
    3. ์ด์ค‘ํ•ด์‹ฑ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค๋ฅธ ํ•ด์‹œ ํ•จ์ˆ˜ ์ด์šฉ
    4. ๋ถ„๋ฆฌ ์—ฐ๊ฒฐ๋ฒ• ๋ฒ„ํ‚ท์˜ ๊ฐ’์„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

     

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™œ์šฉ

    ๊ฐ์ฒด

    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




    ์ฐธ๊ณ 
    https://www.youtube.com/watch?v=zFL29ydL9D8

    728x90
    ๋ฐ˜์‘ํ˜•
    Comments