๋ฉด์ ‘ ์ค€๋น„๋ฅผ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ

2022. 6. 26. 22:09ใ†๐Ÿคฟ ์ˆจ์ฐธ๊ณ  Deep Dive

 

์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ?

ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํƒ์ƒ‰, ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์˜๋ฏธ

 

Q. Array ๋Š” ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ์ธ๊ฐ€?

A. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์—ฐ์†์ ์ด๋ฉฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฏธ๋ฆฌ ํ• ๋‹น๋œ ํฌ๊ธฐ๋งŒํผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ.

-> point 1.  ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋œ๋‹ค.

-> point 2. ๋ฏธ๋ฆฌ ํ• ๋‹น๋œ ์ €์žฅ ๊ณต๊ฐ„ = ๊ณ ์ •์ ์ธ ์ €์žฅ๊ณต๊ฐ„

 

์žฅ์   : ์กฐํšŒ์™€ append ๊ฐ€ ๋น ๋ฅด๋‹ค. 

๋‹จ์  : fixed Size ํŠน์„ฑ์ƒ ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ, ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋‚˜ ์ถ”๊ฐ€์ ์ธ overhead ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Q.  array ์˜ ๋ฏธ๋ฆฌ ๊ณ ์ •๋œ ํฌ๊ธฐ๋ณด๋‹ค ๋” ๋งŽ์€ data ๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋‚˜?

A. ๊ธฐ์กด size ๋ณด๋‹ค ๋” ํฐ Array ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ ํ• ๋‹นํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ, ๋™์ ์œผ๋กœ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ Dynamic Array ๋ผ๊ณ  ํ•œ๋‹ค.

 

Q. Dynamic Array ๋ž€?

A. ์ €์žฅ๊ณต๊ฐ„์ด ๊ฐ€๋“์ฐจ๋ฉด, ๋™์ ์œผ๋กœ resize ํ•˜์—ฌ size ๋ฅผ ์กฐ์ ˆํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

-> resize ๋ฐฉ์‹ - Doubling : ๊ธฐ์กด ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด, size ๋ฅผ 2๋ฐฐ ๋Š˜๋ฆฐ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ , ๊ทธ๊ณณ์œผ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ ๋Š˜์–ด๋‚œ ํฌ๊ธฐ์˜ size ๋ฅผ ๊ฐ€์ง„ ๋ฐฐ์—ด์ด ๋œ๋‹ค. 

 

Q. Array ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€?

A.

- append() ํ•  ๋•Œ, ํ‰์ƒ์‹œ์—” O(1) ์ด์ง€๋งŒ, Resize ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด array ์— ์˜ฎ๊ฒจ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค. ํ‰๊ท ์ ์œผ๋กœ๋Š” O(1) ์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

- ๋ฐ์ดํ„ฐ ์กฐํšŒ์‹œ, ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ๊ณง๋ฐ”๋กœ ์กฐํšŒํ•˜๊ธฐ์— O(1) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค.

 

Q. LinkedList ๋ž€?

A. Node ๋ผ๋Š” ๊ตฌ์กฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ ธ, ํ•˜๋‚˜์˜ Node ์— ๋ฐ์ดํ„ฐ ๊ฐ’๊ณผ ๋‹ค์Œ Node ์˜ Address ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

- Array ์™€ ๋‹ฌ๋ฆฌ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—๋Š” ๋น„์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์ง€๋งŒ, Linked List ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ Node ๊ฐ€ ๋‹ค์Œ Node ์˜ address ๋ฅผ ๊ฐ€๋ฅดํ‚ด์œผ๋กœ ๋…ผ๋ฆฌ์ ์ธ ์—ฐ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค. 

- ๊ณ ์ • ํฌ๊ธฐ์˜ Array ์™€ ๋‹ฌ๋ฆฌ, Linked List ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์‹œ์ ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ธฐ์—, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Q. ์–ด๋Š ์ƒํ™ฉ์—์„œ Array ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด Linked List ๋ณด๋‹ค ๋‚˜์€ ์„ ํƒ์ธ๊ฐ€?

A. 

  • ์ฃผ๋กœ ์กฐํšŒ ์ž‘์—…์„ ์ž์ฃผํ•  ๋•Œ
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ์ˆœํšŒํ•  ๋•Œ
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ์“ฐ๋Š”๊ฒŒ ์ค‘์š”ํ•œ ์ƒํ™ฉ์ผ ๋•Œ. ๊ณ ์ • ํฌ๊ธฐ ๋ฐฉ์‹์ด์ง€๋งŒ, Linked List ๋ณด๋‹จ array ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด Array ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. Linked List ๋Š” Node ๋กœ ์ด๋ฃจ์–ด์กŒ๊ธฐ์— ์›๋ž˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋Ÿ‰์ด ํฌ๋‹ค. 

Q. Array ์™€ LinkedList ๋น„๊ตํ•ด์„œ ์„ค๋ช…ํ•ด๋ณด๋ผ

A. ์šฐ์„  ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ฐจ์ด๋กœ ์ธํ•œ ์ฐจ์ด์ ์ด ์กด์žฌํ•œ๋‹ค.

  • 1. Operation ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๊ณ ,
  • 2. ์‹œ๊ฐ„ ๋ณต์žก๋„๋„ ๋‹ค๋ฅด๋‹ค. 
    • Linked List 
    • O(N) : access / search <- ๋ฉ”๋ชจ๋ฆฌ์— ๋น„ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋ผ ์žˆ๊ธฐ ๋•Œ๋ฌธ. 
    • O(1) : insertion / delete <- ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋น„ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋ผ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋Š” ์‰ฝ๋‹ค. 
  • 3. ๋ฉ”๋ชจ๋ฆฌ ํ™œ์šฉ๋„์—์„œ๋„ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
    • Array๋Š” ์šฐ์„  ์—ฐ์†์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด๋ผ๋Š” ํŠน์„ฑ์—์„œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๊ณผ append ๊ฐ€ ๋น ๋ฅด์ง€๋งŒ, ๊ณ ์ • ํฌ๊ธฐ ํ• ๋‹น์ด๊ธฐ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ผ๋Š” ๋‹จ์ ๋„ ์กด์žฌํ•œ๋‹ค. 
    • Linked List ๋Š” runtime ์ค‘์—๋„ size ๋ฅผ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ array ์™€ ๋‹ฌ๋ฆฌ memory allocation ๊ด€์ ์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋น„์—ฐ์†์  ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๊ณผ ํƒ์ƒ‰์ด ๋น„๊ต์  ๋Š๋ฆฌ๋‹ค. 

 

Q. Array ์™€ LinkedList ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์€ ์–ธ์ œ ์ผ์–ด๋‚˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์˜ ์–ด๋Š ์˜์—ญ์„ ํ• ๋‹น๋ฐ›๋‚˜?

A. 

  • Array ๋Š”  ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์ผ์–ด๋‚œ๋‹ค. ์ด๋ฅผ static memory allocation ์ด๋ผ ๋ถ€๋ฅด๋ฉฐ, Stack Memory  ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค. 
  • LInked List ๋Š” ๋Ÿฐํƒ€์ž„ ๋‹จ๊ณ„์—์„œ ์ƒˆ๋กœ์šด node ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค memory allocation ์ด ์ผ์–ด๋‚œ๋‹ค. ์ด๋ฅผ dynamic memory allocation ์ด๋ผ ๋ถ€๋ฅด๋ฉฐ, heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค. 

 

Q. Queue ๋Š” ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ์ธ๊ฐ€?

A. ์„ ์ž…์„ ์ถœ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ !! 

  • ์‹œ๊ฐ„๋ณต์žก๋„
    • Enqueue : ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ : O(1)
    • Dequeue : ๋ฐ์ดํ„ฐ ์‚ญ์ œ : O(1)
  • ํ™œ์šฉ ์˜ˆ์‹œ
    • Cache ๊ตฌํ˜„, Process ๊ด€๋ฆฌ, BFS ๋“ฑ

 

Q. Array Based Queue ์™€ List Based Queue ๋ฅผ ์„ค๋ช…ํ•ด๋‹ฌ๋ผ

A. 

  • Array-Base ๋Š” circular queue ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ธ๋ฐ, enqueue ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒ์‹œ fixed size ๋ฅผ ๋„˜์–ด์„œ๋”๋ผ๋„, ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1) ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • List-Base ๋Š” ๋ณดํ†ต linked list ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. enqueue ๋Š” ๋‹จ์ˆœํžˆ linked list ์—์„œ append ๋ฅผ ํ•˜๋Š”๊ฒƒ์œผ๋กœ ๊ตฌํ˜„๋˜๊ณ , ์ด ๋•Œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1) ์ด ๋œ๋‹ค. dequeue ๋Š” ๋งจ ์•ž์˜ ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  first head ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ญ์‹œ O(1) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค.

 

Q. Queue vs Priority Queue ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์„ค๋ช…ํ•ด๋ณด๋ผ

A. 

Queue ๋Š” ์‹œ๊ฐ„์ˆœ์„œ์ƒ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ์ถœ๋ ฅ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, 

Priority queue ๋Š” ๋“ค์–ด๊ฐ„ ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ์ถœ๋ ฅ๋œ๋‹ค. 

 

Q. Heap ์€ ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ์ธ๊ฐ€? 

A. Heap ์€ ๊ทธ ์ž์ฒด๋กœ ์šฐ์„ ์ˆœ์œ„ ํ์˜ ๊ตฌํ˜„๊ณผ ์ผ์น˜ํ•œ๋‹ค. 

  • Heap ์€ ์™„์ „์ด์ง„ํŠธ๋ฆฌ๋กœ ์•„๋ž˜์˜ ์กฐ๊ฑด์„ ๊ฐ€์ง„๋‹ค. 
    • 1) Max Heap : ๊ฐ ๋…ธ๋“œ์— ์ €์žฅ๋œ ๊ฐ’์€ child node ์˜ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. 
    • 2) Min Heap : ๊ฐ ๋…ธ๋“œ์— ์ €์žฅ๋œ ๊ฐ’์€ child node ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. 

 

Q. Heap ์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

A. ๋ณดํ†ต์˜ Tree ๋Š” linked list ๋กœ ๊ตฌํ˜„ํ•˜์ง€๋งŒ, Heap ์€ ํŠธ๋ฆฌ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Array ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. 

์ƒˆ๋กœ์šด node ๋ฅผ heap ์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋Š” ํŠน์ง• ๋•Œ๋ฌธ์ธ๋ฐ, array ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ๋” ์ˆ˜์›”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ์ถ”๊ฐ€ํ•˜๊ธด ํ•˜์ง€๋งŒ, swap ๊ณผ์ •์„ ๊ฑฐ์ณ ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„๊ฐ„๋‹ค. 

 

 

Q. Stack ์€ ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ์ธ๊ฐ€?

A. ํ›„์ž…์„ ์ถœ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ. 

  • ์‹œ๊ฐ„๋ณต์žก๋„๋Š” push, pop ๋ชจ๋‘ O(1) 
  • ํ™œ์šฉ ์˜ˆ์‹œ : ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ์—ฐ์‚ฐ, ๊ด„ํ˜ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๋ธŒ๋ผ์šฐ์ € ๋’ค๋กœ๊ฐ€๊ธฐ ๊ธฐ๋Šฅ, DFS ๋“ฑ 

 

Q. BST(Binary Search Tree) ๋Š” ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ์ธ๊ฐ€?

A. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ •๋ ฌ๋œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ, ์–ด๋–ค ๋…ธ๋“œ์˜ left ์— ์œ„์น˜ํ•˜๋Š” ๋ชจ๋“  ๊ฐ’์€ ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, right ์— ์œ„์น˜ํ•œ ๊ฐ’์€ ํ•ด๋‹น node ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.

  • BST ๋Š” ์ €์žฅ๊ณผ ๋™์‹œ์— ์ •๋ ฌ์„ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ์ƒˆ๋กœ์šด Data ์ €์žฅ์‹œ ์ผ์ •ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. 
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ 
    • ๊ฒ€์ƒ‰, ์ €์žฅ, ์‚ญ์ œ : O(logN) -> ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ logN ์ด๊ธฐ ๋•Œ๋ฌธ
    • worst case ์ผ ๋•Œ : O(logN) -> ์„ ํ˜• ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ

 

Q. ์ด์ง„ ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋งํ•ด๋‹ฌ๋ผ. 

A. ๊ฒ€์ƒ‰๊ณผ ์ €์žฅ, ์‚ญ์ œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋ชจ๋‘ O(logN) ์ด๊ณ , Worst Case ๋Š” ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ Tree ๊ฐ€ ๋์„ ๋•Œ O(N) ์ด ๋œ๋‹ค. 

 

Q. ์ด์ง„ ํŠธ๋ฆฌ๋Š” ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ์ธ๊ฐ€?

A. ๋ชจ๋“  Nodes ์˜ Child nodes ๊ฐฏ์ˆ˜๊ฐ€ 2 ์ดํ•˜์ธ ํŠธ๋ฆฌ.

 

Q. ์ด์ง„ ํŠธ๋ฆฌ์˜ worst case ๋Š” ์–ด๋–ค ๊ฒฝ์šฐ์ธ๊ฐ€?

A. ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ ํŠธ๋ฆฌ๊ตฌ์กฐ๊ฐ€ ๋  ๋•Œ, ์ฆ‰ ์„ ํ˜•์ฒ˜๋Ÿผ ๋ณด์ผ ๋•Œ worst case ๊ฐ€ ๋œ๋‹ค. (linked list ์™€ ๋‹ค๋ฅผ๊ฒŒ ์—†์–ด์ง€๊ธฐ ๋•Œ๋ฌธ)

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ BST ์˜ Worst case ๋„ ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ ํŠธ๋ฆฌํ˜•ํƒœ ์ผ ๋•Œ๋‹ค. 

 

Q. Hash Table ์€ ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ์ธ๊ฐ€?

A. key-value ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”, ํšจ์œจ์ ์ธ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ. 

  • hash function h() ๋ฅผ ์ด์šฉํ•ด key - value ๋ฅผ Hash Table ์— ์ €์žฅํ•œ๋‹ค.
  • key ๋Š” ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผํ•˜๋ฉฐ, ์ค‘๋ณต๋ผ์„  ์•ˆ๋œ๋‹ค.
  • Hash Table ์„ ๊ตฌ์„ฑํ•˜๋Š” key - value ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์„ bucket ํ˜น์€ slot ์ด๋ผ ๋ถ€๋ฅธ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ์ €์žฅ, ํƒ์ƒ‰, ์‚ญ์ œ : O(1)
    • collision : O(n)

Q. ์ข‹์€ Hash function ์˜ ํŠน์ง•์€ ?

A. ๊ฐ ์ƒํ™ฉ๋งˆ๋‹ค ์ข‹์€ hash function ์˜ ํŠน์ง•์€ ๋‹ค๋ฅด์ง€๋งŒ, ๋Œ€๋žต์ ์ธ ๊ธฐ์ค€์€ 1) ์—ฐ์‚ฐ์†๋„๊ฐ€ ๋นจ๋ผ์•ผํ•˜๊ณ , 2) ํ•ด์‹œ ์ถฉ๋Œ์€ ๊ฐ€๋Šฅํ•œ ํ”ผํ•ด์•ผ ํ•œ๋‹ค. 

 

Q. collision ์ด๋ž€?

A. key ๊ฐ’์€ ๋‹ค๋ฅด์ง€๋งŒ, key ์˜ ํ•ด์‹œ๊ฐ’์ด ๊ฐ™์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ถฉ๋Œ์„ ์˜๋ฏธํ•œ๋‹ค. -> ์ค‘๋ณต๋˜๋Š” key ๋Š” ์—†์ง€๋งŒ, Hash ๊ฐ’์€ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป

 

Q. Collision ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€?

A. Seperate Chaining ๊ณผ Open Addressing 2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

  • Open Addressing : ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ์—, Seperate Chaining ์— ๋น„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ข‹๋‹ค.
    • Linear Probing : ์„ ํ˜• ์กฐ์‚ฌ๋ฒ• : ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํ•ด์‹œ๊ฐ’์œผ๋กœ๋ถ€ํ„ฐ ์ผ์ •ํ•œ ๊ฐ’ ๋งŒํผ ๊ฑด๋„ˆ๋›ฐ์–ด ๋น„์–ด์žˆ๋Š” Slot ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค ( + 1, +2, +3 ... )
    • Quadratic Probing : ์ด์ฐจ ์กฐ์‚ฌ๋ฒ• :์„ ํ˜• ์กฐ์‚ฌ๋ฒ•์ด 1๋‹จ์œ„๋กœ ๊ฑด๋„ˆ๋›ฐ์—ˆ๋‹ค๋ฉด, ์ด์ฐจ ์กฐ์‚ฌ๋ฒ•์€ ์ œ๊ณฑ์ˆ˜๋กœ ๊ฑด๋„ˆ๋›ฐ์–ด ๋นˆ slot ์„ ํƒ์ƒ‰ํ•œ๋‹ค (+1, +4, +9 ... )
    • Double Hashing : Linear / Quadratic Probing ์€ ํƒ์‚ฌ ์ด๋™ํญ์ด ์ผ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ฆฌ๋Š” clustering ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.(clustering -> ํƒ์ƒ‰์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ) Clustering ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 2๊ฐœ์˜ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ Double Hashing ์ด๋ผ ํ•œ๋‹ค. ํ•˜๋‚˜๋Š” ์ตœ์ดˆ์˜ Hash ๊ฐ’์„ ์–ป์„ ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , ๋‘๋ฒˆ ์งธ๋Š” collision ๋ฐœ์ƒ ์‹œ ํƒ์‚ฌ ์ด๋™ํญ์„ ์–ป๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
  • Seperate Chaining : Linked List (or Tree) ๋ฅผ ์ด์šฉํ•˜์—ฌ Collision ์„ ํ•ด๊ฒฐํ•œ๋‹ค. 
    • ์ถฉ๋Œ์ด ๋ฐœ์ƒ์‹œ Linked List ์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ฆ‰ ๊ฐ™์€ ์Šฌ๋กฏ์— ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 
    • ์‚ฝ์ž… ์‹œ : ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ key ๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๋ฉด, linked list ์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ key - value ๋ฅผ ์ €์žฅ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)
    • ์‚ญ์ œ ์‹œ : ๊ธฐ๋ณธ์ ์œผ๋กœ O(1), worst case ๋Š” O(N)
    • ์กฐํšŒ ์‹œ : ๊ธฐ๋ณธ์ ์œผ๋กœ O(1), worst case ๋Š” O(N). -> Worst case : ์„œ๋กœ ๋‹ค๋ฅธ n ๊ฐœ์˜ key ๊ฐ€ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋˜๋ฉด, ๊ธธ์ด n ์˜ linked list ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. => ์‹œ๊ฐ„๋ณต์žก๋„ O(N) ์œผ๋กœ ์ฆ๊ฐ€.