Algorithm - low-hill/Knowledge GitHub Wiki

System design์—์„œ ํ™œ์šฉ๋˜๋Š” Algorithm

Sliding Window, Two Pointers, Two Heaps, backtracking, Breadth-First Search (BFS), Depth-First Search (DFS), Topological Sort, Merge Intervals, Trie (Prefix Tree), Union-Find (Disjoint Set), Flood Fill, Segment Tree

Sliding Window

Sliding window pattern์€ array๋‚˜ list๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ โ€œwindowโ€(๋‹ค์ˆ˜๊ฐœ elements) elements์„ ์ถ”์ ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. sliding window์˜ window๋Š” ๊ณ ์ •๋œ ํฌ๊ธฐ ๋˜๋Š” ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ํ™•์žฅ๋˜๊ฑฐ๋‚˜ ์ถ•์†Œ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋ณ€ ํฌ๊ธฐ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ํŒจํ„ด์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” window๋ฅผ minimizing ํ˜น์€ maximizingํ•˜์—ฌ ์š”์†Œ๋“ค์˜ ํ•ฉ์ด๋‚˜ unique elements์˜ ๊ฐฏ์ˆ˜์™€ ๊ฐ™์€ ์ตœ์ ์˜ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

image

์ ์šฉ ์‚ฌ๋ก€

  • streaming application(video์™€ audio)
    • ๋„คํŠธ์›Œํฌ ์ƒํƒœ์— ๋”ฐ๋ผ ์žฌ์ƒ ํ’ˆ์งˆ์„ ๋ฒ„ํผ๋งํ•˜๊ณ  ์ œ์–ด
  • ๋ฐ์ดํ„ฐ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • Lempel-Ziv-Welch(LZW) ์•Œ๊ณ ๋ฆฌ์ฆ˜: sliding window๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต ํŒจํ„ด์„ ์‹๋ณ„ํ•˜์—ฌ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ์ธ์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅ
  • ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ํŒจํ„ด์„ ๋ถ„์„ํ•˜์—ฌ ์ด์ƒ ์ง•ํ›„๋‚˜ ์ž ์žฌ์ ์ธ DDoS ๊ณต๊ฒฉ์„ ํƒ์ง€
  • Text search ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • Boyer-Moore: large text๋‚ด์˜ substring์„ ํšจ์œจ์ ์œผ๋กœ ๊ฒ€์ƒ‰

Two Pointers

๋ฐฐ์—ด, list๋‚˜ string๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ตฌ์กฐ๋ฅผ ๋‘๊ฐœ์˜ ํฌ์ธํ„ฐ ํ˜น์€ iterator๋ฅผ ํ†ตํ•ด ์ˆœํšŒํ•˜์—ฌ ํƒ์ƒ‰ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ํ•ด๋‹น ํŒจํ„ด์€ ๋ฐ์ดํ„ฐ ๋‚ด ์š”์†Œ(elements) ๋น„๊ต ํ˜น์€ ์š”์†Œ์Œ(pairs of elements)์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์‚ฌ์šฉ๋œ๋‹ค. ๋‘๊ฐœ์˜ ํฌ์ธํ„ฐ๋Š” ๋™์ผํ•œ ๋ฐฉํ–ฅ ํ˜น์€ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ณ , ํ•ด๋‹น ์ด๋™์€ ํŠน์ • ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฒฐ์ •๋  ์ˆ˜ ์žˆ๋‹ค.

image

์ ์šฉ ์‚ฌ๋ก€

  • Binary search
    • ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ(left, right)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ ์š”์†Œ๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ขํ˜€ ๋Œ€์ƒ ๊ฐ’์„ ๊ฒ€์ƒ‰
  • bioinformatics applications์—์„œ DNA sequence ๋น„๊ต
    • ํ•ด๋‹น ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘๊ฐœ์˜ DNA sequence๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋ฐฐ์น˜
  • merge-sort ์•Œ๊ณ ๋ฆฌ์ฆ˜ -> Merge sort ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…
    • left ~ midํŒŒํŠธ์™€ mid+1 ~ right๋กœ ๋‘๊ฐœ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์ •๋ ฌ ํ›„ ๋‹ค์‹œ ๋ณ‘ํ•ฉ
  • string์ด palindromes ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” search ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๋‘๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์˜ ์–‘ ๋ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜๋ฉด์„œ ์ด๋™

Breadth-First Search (BFS)

๋ฃจํŠธ ๋…ธ๋“œ(ํ˜น์€ ๋‹ค๋ฅธ ์ž„์˜์˜ ๋…ธ๋“œ)์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•œ๋‹ค. BFS๋Š” queue๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉ๋ฌธํ•  ์ •์ ์„ ์ถ”์ ํ•˜์—ฌ ํ์— ์ถ”๊ฐ€๋œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ ์šฉ ์‚ฌ๋ก€

  • ์†Œ์…œ ๋„คํŠธ์›Œํฌ: ์†Œ์…œ ๋„คํŠธ์›Œํฌ์—์„œ ๋‘ ์‚ฌ์šฉ์ž ๊ฐ„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” ์‚ฌ์šฉ์ž ๊ฐ„์˜ ๋ถ„๋ฆฌ ์ •๋„๋‚˜ ์ƒํ˜ธ ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์›น ํฌ๋กค๋Ÿฌ: Google๊ณผ ๊ฐ™์€ ๊ฒ€์ƒ‰ ์—”์ง„์€ BFS ๊ธฐ๋ฐ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๊ธฐ URL์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•˜์ดํผ๋งํฌ๋ฅผ ๋„ˆ๋น„ ์šฐ์„  ์ˆœ์„œ๋กœ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ์›น ํŽ˜์ด์ง€๋ฅผ ํฌ๋กค๋งํ•˜๊ณ  ์ƒ‰์ธ์„ ์ƒ์„ฑํ•œ๋‹ค.
  • GPS ๋‚ด๋น„๊ฒŒ์ด์…˜: ๋„๋กœ ์œ ํ˜•, ๊ตํ†ต ์ƒํ™ฉ ๋ฐ ๊ฑฐ๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ณ ๋ คํ•˜์—ฌ ์ง€๋„์—์„œ ๋‘ ์œ„์น˜ ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฐ BFS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ๋ฐฉ์†ก: ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ์—์„œ BFS๋Š” ๋„คํŠธ์›Œํฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜์—ฌ ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜์‹ ํ•˜๋„๋ก ํ•˜๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Merge Intervals

๊ตฌ๊ฐ„์˜ ์ง‘ํ•ฉ์—์„œ ๊ฒน์น˜๋Š” ๊ตฌ๊ฐ„์„ ํ•˜๋‚˜์˜ ๊ตฌ๊ฐ„์œผ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์‹œ์ž‘ ์ง€์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ ๋‹ค์Œ ์ •๋ ฌ๋œ ๊ตฌ๊ฐ„์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฒน์น˜๋Š” ๊ตฌ๊ฐ„์„ ๋ณ‘ํ•ฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ ์šฉ ์‚ฌ๋ก€

  • ์บ˜๋ฆฐ๋” ์ผ์ • ๊ด€๋ฆฌ: ๊ฒน์น˜๋Š” ์•ฝ์†์ด๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ๋ณ‘ํ•ฉํ•˜์—ฌ ์ผ์ •๊ด€๋ฆฌ์—์„œ ์—ฌ์œ  ์‹œ๊ฐ„๋Œ€๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž์› ํ• ๋‹น: ์ˆ˜์š”๊ฐ€ ๋†’์€ ๊ธฐ๊ฐ„์ด๋‚˜ ์ค‘๋ณต ์‚ฌ์šฉ ๊ธฐ๊ฐ„์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๋ถ„์„: ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ณผ๋„ํ•œ ํŠธ๋ž˜ํ”ฝ์ด๋‚˜ ํ˜ผ์žก ๊ธฐ๊ฐ„์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
  • Genome ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ: ๊ฒน์น˜๋Š” ์œ ์ „์ž ์„œ์—ด์„ ์‹๋ณ„ํ•˜๊ฑฐ๋‚˜ ์œ ์ „์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

Flood Fill

Flood Fill์€ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์—์„œ ํŠน์ • ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ๋œ ์˜์—ญ์„ ๊ฒฐ์ •ํ•˜๋Š” ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ฐ ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ target ์ƒ‰์ƒ์ด๋‚˜ ๊ฐ’์„ ์ƒˆ๋กœ์šด ์ƒ‰์ƒ/๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•˜๊ณ  ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. target ์ƒ‰์ƒ/๊ฐ’(ํŠน์ • ์กฐ๊ฑด)์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ visited๋˜์–ด update๋ ๋•Œ๊นŒ์ง€ ๊ณ„์†๋œ๋‹ค.

image

์ ์šฉ ์‚ฌ๋ก€

  • ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋„๊ตฌ
    • ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋„๊ตฌ ๋‚ด "bucket fill" ํ˜น์€ "paint fill"๊ธฐ๋Šฅ(์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์ƒ‰์ƒ์œผ๋กœ ์˜์—ญ์„ ์ฑ„์šธ ์ˆ˜ ์žˆ๋Š”)์— ์‚ฌ์šฉ

Reference