BST & Hash Table

Icarus_wยท2023๋…„ 1์›” 3์ผ
0

CS๊ณต๋ถ€

๋ชฉ๋ก ๋ณด๊ธฐ
25/25

BST(Binary Search Tree)

์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ๋Š” ์ •๋ ฌ๋œ ํŠธ๋ฆฌ์ด๋‹ค.

์–ด๋Š ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๋“  ํ•ด๋‹น ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—๋Š” ๊ทธ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’๋“ค์„ ์ง€๋‹Œ ๋…ธ๋“œ๋“ค๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—๋Š” ๊ทธ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’๋“ค์„ ์ง€๋‹Œ ๋…ธ๋“œ๋“ค๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ , ์ €์žฅ๊ณผ ๋™์‹œ์— ์ •๋ ฌํ•œ๋‹ค.

๊ฒ€์ƒ‰, ์ €์žฅ, ์‚ญ์ œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋ชจ๋‘ O(logn)์ด๊ณ , worst case๋Š” ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ ํŠธ๋ฆฌ๊ฐ€ ๋์„ ๋•Œ O(n)์ด๋‹ค.

image

worst case๋Š” ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ ํŠธ๋ฆฌ์ธ๋ฐ, Linked List์™€ ๋‹ค๋ฅผ๊ฒŒ ์—†๋‹ค.

image

์ž๊ฐ€ ๊ท ํ˜• BST๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์ด ์ž˜ ๋งž๋„๋ก ์œ ์ง€ํ•˜์—ฌ ๋†’์ด๋ฅผ ๊ฐ€๋Šฅํ•œ ๋‚ฎ๊ฒŒ ์œ ์ง€ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ AVLํŠธ๋ฆฌ์™€ Red-black tree๊ฐ€ ์žˆ๋‹ค.

Hash table

ํšจ์œจ์ ์ธ ํƒ์ƒ‰(๋น ๋ฅธ ํƒ์ƒ‰)์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ์จ key - value์Œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

hash function h ์— key๊ฐ’์„ ์ž…๋ ฅ์œผ๋กœ ๋„ฃ์–ด ์–ป์€ ํ•ด์‹œ๊ฐ’ h(k)๋ฅผ ์œ„์น˜๋กœ ์ง€์ •ํ•˜์—ฌ ์ €์žฅ

์ €์žฅ, ์‚ญ์ œ, ๊ฒ€์ƒ‰์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋ชจ๋‘ O(1)์ด๋‹ค.

image

๐Ÿฅ‡Collision ๋ฐœ์ƒ

์„œ๋กœ ๋‹ค๋ฅธ key์˜ ํ•ด์‹œ๊ฐ’์ด ๋˜‘๊ฐ™์„ ๋•Œ ๋ฐœ์ƒ

์ฆ‰, ์ค‘๋ณต๋˜๋Š” key๋Š” ์—†์ง€๋งŒ ํ•ด์‹œ๊ฐ’์€ ์ค‘๋ณต ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋•Œ Collision์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ตœ๋Œ€ํ•œ hash function์„ ์ž˜ ์„ค๊ณ„ํ•ด์•ผํ•˜๊ณ , ์–ด์ฉ” ์ˆ˜ ์—†์ด collision์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ separate chaining ์ด๋‚˜ open addressing๋“ฑ์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•œ๋‹ค.

image

[ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•]

  1. Open addressing

    ๋ฏธ๋ฆฌ ์ •ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ hash table์˜ ๋น„์–ด์žˆ๋Š” slot์„ ์ฐพ๋Š”๋‹ค. ๋นˆ ์Šฌ๋กฏ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ Linear Probing, Quadratic Probing, Double Hashing์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

    ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค.

    • Linear Probing & Quadratic Probing

      ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋ถ€ํ„ฐ ์ผ์ •ํ•œ ๊ฐ’๋งŒํผ ๊ฑด๋„ˆ๋›ฐ์–ด ๋น„์–ด์žˆ๋Š” slot์— ์ €์žฅ

      -> ํƒ์‚ฌ์ด๋™ํญ์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ง‘์ค‘์ ์œผ๋กœ ๋ชฐ๋ฆฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

      image

    • Double Hashing

      ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก 2๊ฐœ์˜ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

      ํ•˜๋‚˜๋Š” ์ตœ์ดˆ์˜ ํ•ด์‹œ๊ฐ’์„ ์–ป์„ ๋•Œ ์‚ฌ์šฉ, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๋•Œ ํƒ์‚ฌ ์ด๋™ํญ์„ ์–ป๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

      ์ด๋™ํญ์ด ๋‹ค๋ฅด๊ฒŒ ๋ฐœ์ƒ

  1. Separete chaining

    Linked list๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋…ธํŠธ(slot)์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ

    image

โ€‹ [Worst Case]

โ€‹ n๊ฐœ์˜ ๋ชจ๋“  key๊ฐ€ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋˜๋ฉด ๊ธธ์ด n์˜ linked list๊ฐ€ ์ƒ์„ฑ๋˜๊ฒŒ ๋œ๋‹ค.

โ€‹ ์ด๋•Œ, ํŠน์ • key๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธธ์ด n์˜ linked list๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” O(n)์˜ ์‚ฌ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

profile
ํ•˜๋ฃจ์— ํ•˜๋‚˜

0๊ฐœ์˜ ๋Œ“๊ธ€