๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Hash Table

๐Ÿค” Hash Table(ํ•ด์‹œ ํ…Œ์ด๋ธ”)์ด๋ž€?โ€‹

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ด๋ก  ์ค‘ Key์™€ Value๋ฅผ ์Œ์„ ์ด๋ค„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
  • Key ๊ฐ’์„ Hash Function์— ์ž…๋ ฅํ•˜์—ฌ ๋„์ถœ๋œ ๊ฐ’(Hash Value)์„ index๋กœ ์‚ผ์•„ Table์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

Key ๊ฐ’์„ Hash function์— ์ž…๋ ฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

Key ๊ฐ’์„ Hash function์— ์ž…๋ ฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

๐Ÿค” Hash Table(ํ•ด์‹œ ํ…Œ์ด๋ธ”)์„ ์™œ ์“ธ๊นŒ์š”?โ€‹

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ Array์— ๋‹จ์ˆœ Index๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅํ•˜๊ณค ํ•˜๋Š”๋ฐ Hash function์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค๋ฅผ Mappingํ•˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ข€ ๋” ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋ณดํ†ต ๋ณต์žกํ•œ Bruth-force ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค

  • ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ์˜ ๊ณผ์ • ๋ชจ๋‘ O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(1))

๐Ÿค” Hash Table(ํ•ด์‹œ ํ…Œ์ด๋ธ”)์˜ ๊ณผ์ •์€?โ€‹

  1. ํ•ด๋‹น Key ๊ฐ’์„ Hash Function์„ ํ†ตํ•ด Hash Table๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  2. ์ด ๋•Œ, ์ „๋‹ฌ๋˜๋Š” ๊ฐ’์€ Hash Table์˜ Index๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด๋กœ ์‚ฌ์šฉํ•˜๋˜, ์ธ๋ฑ์Šค๋ฅผ Hash Function์„ ํ†ตํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Hash Function์˜ ๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜โ€‹

  1. Division Method
    • ๋‚˜๋ˆ—์…ˆ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ์ž…๋ ฅ๊ฐ’์„ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ„์–ด ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค

      (Index = Input % Table Size)

  2. Multiplication Method
    • ์ˆซ์ž๋กœ ๋œ Key๊ฐ’ K์™€ 0๊ณผ 1 ์‚ฌ์ด์˜ ์‹ค์ˆ˜ A, ํŠน์ • ์ œ๊ณฑ์ˆ˜์ธ M์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹์„ ํ†ตํ•ด ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

      (h(K) = (K A mod 1) M)

  3. Universal Hashing
    • ๋‹ค์ˆ˜์˜ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ง‘ํ•ฉ H์— ๋„ฃ์–ด๋‘๊ณ , ๋ฌด์ž‘์œ„๋กœ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์„ ํƒํ•˜์—ฌ ํ•ด์‹œ๊ฐ’์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๐Ÿ˜ฅ Hash Table(ํ•ด์‹œ ํ…Œ์ด๋ธ”)์˜ ๋ฌธ์ œ์ โ€‹

  • Hash Function์€ ๋‹ค๋ฅธ Key๊ฐ’์„ ๋„ฃ์—ˆ์„ ๋•Œ, ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด, ๋‹ค๋ฅธ Input์— ๋™์ผํ•œ Output์„ ๋‚ด๋†“์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜จ.

    ์ด๋ฅผ Hash Collision(ํ•ด์‹œ ์ถฉ๋Œ)์ด๋ผ๊ณ  ์ผ์ปซ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•โ€‹

  1. Separate Chaining

    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๋ฒ„ํ‚ท์— ๊ฐ’์ด ์žˆ์œผ๋ฉด, Linked List ํ˜น์€ Tree ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด ํ•ด๋‹น Value ๋’ค์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

      ๋ฐ์ดํ„ฐ ๋งจ ๋์— ์—ฐ๊ฒฐํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋ฒ•์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

  2. Open Addressing

    • Hash Table์—์„œ ๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„์ด ์žˆ๋‹ค๋ฉด ์ด๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
    • ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•
    1. Linear Probing

      Linear_Probing

    • ํ˜„์žฌ์˜ Index๋กœ๋ถ€ํ„ฐ ๊ณ ์ •ํญ ๋งŒํผ์”ฉ ์ด๋™ํ•˜์—ฌ ์ฐจ๋ก€๋Œ€๋กœ ๊ฒ€์ƒ‰ํ•ด ๋น„์–ด ์žˆ๋Š” ๊ณต๊ฐ„์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
    • ๋ฌธ์ œ์ 
      • Load Factor๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

        ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š” Hash Value์— ํ•ญ์ƒ ๊ฐ’์ด ์ฐจ์žˆ๋‹ค๋ฉด, ๊ณ„์† ๋ฐ€๋ฆฌ๊ณ  ๋ฐ€๋ ค์„œ ์‹œ๊ฐ„์ด ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๊ฑธ๋ฆด ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    1. Quadratic Probing

    Quadratic_Probing

    • ํ˜„์žฌ์˜ Index๋กœ๋ถ€ํ„ฐ ๊ณ ์ •ํญ์ด ์•„๋‹Œ, ๋‹ค์Œ ์นธ์˜ ์ œ๊ณฑ์„ ์ด์šฉํ•˜์—ฌ ์ฐจ๋ก€๋Œ€๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋น„์–ด ์žˆ๋Š” ๊ณต๊ฐ„์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
    • ๋ฌธ์ œ์ 
      • ์—ญ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Load Factor๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. Cuckoo Hashing

    Cuckoo Hashing

  • ๋‹ค์ˆ˜์˜ Table๊ณผ ๋‹ค์ˆ˜์˜ Hash Function์„ ์‚ฌ์šฉํ•ด ๋ณด๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ํ…Œ์ด๋ธ”๋งˆ๋‹ค Hash Function์ด ๋‹ค๋ฅด๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์—ญ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋นˆ์นธ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์ด๋ ‡๊ฒŒ Hash Coliision๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์€ ๊ณต๊ฐ„์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋˜ํ•œ, Hash Table์€ C++์˜ Vector๋‚˜ LinkedList์ฒ˜๋Ÿผ ํ™•์žฅํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค๋ฉด ํšจ์œจ์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ํ•ญ์ƒ ํ…Œ์ด๋ธ”์„ ์„ค๊ณ„ํ•  ๋•Œ ๊ฐ€๊ธ‰์  ํ™•์žฅ์„ ํ•˜์ง€ ์•Š๋„๋ก ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ํ…Œ์ด๋ธ”์˜ ๊ณต๊ฐ„์‚ฌ์šฉ๋ฅ ์ด 80% ์ด์ƒ์ด๋ผ๋ฉด, ํ•ด์‹œ ์ถฉ๋Œ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ›  ๊ด€๋ จ ๋ฌธ์ œโ€‹