๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค TSP ๋ฌธ์ : ์์ ๊ทธ๋ํ์์ ๊ฐ์ฅ ์งง์ ํด๋ฐํ ๋์ ์ฌ์ดํด ์ฐพ๊ธฐ ๋น๋์นญ TSP ๋ฌธ์ : ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๋ TSP ๋ฌธ์ => ๋ฐฉํฅ๊ทธ๋ํ์ธ๋ฐ ๊ฐ๋ ๋ฐฉํฅ, ์ค๋ ๋ฐฉํฅ์ weight๊ฐ ๋ค๋ฅผ ์ ์๋ TSP ๋ฌธ์ State-Space Tree ์ํ ๊ณต๊ฐ ํธ๋ฆฌ : ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์ ์ค๊ฐ ์ํ๋ฅผ ๊ฐ๊ฐ ํ ๋
ธ๋๋ก ๋ํ๋ธ ํธ๋ฆฌ Backtracking ๋ฐฑํธ๋ํน : ์ํ ๊ณต๊ฐ ํธ๋ฆฌ๋ฅผ ํ์ํ์ฌ ํด๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ ํด๊ฐ ์๋ ๊ฒฝ์ฐ ๋๋์๊ฐ๋ค๋ ์๋ฏธ์์ ์ง์ด์ง ์ด๋ฆ๊น์ด ์ฐ์ ํ์ (DFS) ์๊ณ ๋ฆฌ์ฆ์ ์์ฉ์ํ ๊ณต๊ฐ ํธ๋ฆฌ๋ฅผ ๋ช
์์ ์ผ๋ก ๋ง๋ค์ง๋ ์์ Backtracking vs..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค NP-Completeness ๊ฐ์ P : ๋คํญ์๊ฐ์ ํ ์ ์๋ ๊ฒฐ์ ๋ฌธ์ ์งํฉ NP : ๋น๊ฒฐ์ ๋ก ์ ์ผ๋ก ๋คํญ์๊ฐ์ ํ ์ ์๋ ๊ฒฐ์ ๋ฌธ์ ์งํฉ => ๋ต์ ๋คํญ์๊ฐ์ ๊ฒ์ฆํ ์ ์๋ ๋ฌธ์ (๋คํญ์๊ฐ์ ๊ฒ์ฆํ ์ ์์ผ๋ฉด NP ๋ฌธ์ ) NP-Hard : ๋ชจ๋ NP ๋ฌธ์ ์์ ๋คํญ์๊ฐ ๋ณํ๋๋ ๋ฌธ์ ์งํฉ => ๊ฒ์ฆ์ด ์๋ ์ ๋ ์์ (NP - Complete์์ ์ฐจ์ด) NP-Complete : NP-Hard ์ด๋ฉด์ NP์ธ ๋ฌธ์ (๊ฒฐ๊ตญ NP์ด๊ธฐ์ yes/no์ ๊ฒฐ์ ๋ฌธ์ ์งํฉ์) NP-Hard ์ฆ๋ช
๋ฐฉ๋ฒ ๋ฌธ์ A๊ฐ NP-Hard ์์ ์ฆ๋ช
ํ๋ ๋ฐฉ๋ฒ์๋ 2๊ฐ์ง๊ฐ ์์ 1. NP-Hard ์ ์์ ๋ฐ๋ผ ๋ชจ..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค Motivation ์ธํ์ ์ํ ๋ฌธ์ (TSP : Travelling salesman problem) ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๊ณ ์์ ์ ์ ์ผ๋ก ๋์์ค๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ธ๋ฐ Brute-force ๋ฐฉ์์ผ๋ก n๊ฐ์ ์ ์ ์ ๋ชจ๋ permutation(์์ด)์ ์กฐ์ฌํด์ผํจ => O(n!) TSP ๋ฌธ์ ๋ฅผ ๋คํญ์๊ฐ์ ํธ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ ๊น? ์ด๋ก ์ ๋ถ๊ฐ๋ฅํจ Types of Problems Tractable Problem : ์
๋ ฅ n์ ๋ํ์ฌ ํธ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋คํญ ํจ์ f(n) ์ผ๋ก ํํ ๋๋ ๋ฌธ์ Intractable Problem: ๋คํญ ์๊ฐ์์ ํ ์ ์๋ ๋ฌธ์ => Θ(2^n) ..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค ์ด์ ํฌ์คํ
์์ String Match์ ๋ํด O(n + m) = O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง KMP ์๊ณ ๋ฆฌ์ฆ์ ๋ค๋ค์์ ์ด๋ฒ์๋ ์ต์ ์ ๊ฒฝ์ฐ O(n)๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ๋งค์นญํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ๋ค๋ฃฐ ์์ String Match ๊ด๋ จ ํฌ์คํ
์ฐธ๊ณ https://hanjungyo.tistory.com/101 L14 - KMP Algorithm๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค String Matching ๋ฌธ์์์ ๋จ์ด๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ผ๋ ค๋ฉด? ๋ฌธ์์์ ํนhanjungyo.tistory.com Boyer..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค String Matching ๋ฌธ์์์ ๋จ์ด๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ผ๋ ค๋ฉด? ๋ฌธ์์์ ํน์ ๋จ์ด๋ฅผ ๊ฒ์ํด์ ์ฐพ๋ ๊ฒฝ์ฐ๊ฐ ์ข
์ข
์์ํ
๋ฐ ์ด๋ ์ฐพ์ผ๋ ค๋ ๋จ์ด๋ฅผ pattern์ด๋ผ ํจ ์ด๋ ๊ฒ ๋ฌธ์์์ ๋จ์ด๋ฅผ ์ฐพ์ ๋ ๋น ๋ฅด๊ฒ ์ฐพ์ผ๋ ค๋ฉด ์ด๋ค ๋ฐฉ๋ฒ์ ์จ์ผํ ์ง์ ๋ํ ์๊ณ ๋ฆฌ์ฆ์ Problem Definition ์
๋ ฅ์ ๊ธธ์ด n์ธ ๋ฌธ์ ๋ฌธ์์ด A, ๊ธธ์ด m์ธ ํจํด ๋ฌธ์์ด P ๊ฐ ์ฃผ์ด์ง๊ณ ๋ณดํต n์ด m๋ณด๋ค ํจ์ฌ ํฐ ์ํฉ์ ์ด๋ ์ถ๋ ฅ์ ํจํด ๋ฌธ์์ด๊ณผ ์ผ์นํ๋ A์ ๋ถ๋ถ ๋ฌธ์์ด(sub-string) ์์น๋ฅผ ์ถ๋ ฅํ๊ฒ๋จ Naive Algorithm ๋ฌธ์ A์ ๋ชจ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์์ฐจ์ ์ผ๋ก ํจํด P์ ๋งค์นํด๋ณด๋ ์๊ณ ๋ฆฌ์ฆ์..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค Topological Sorting ์์์ ๋ ฌ์ด๋ ์์
๋ค์ ์ ํ ๊ด๊ณ๋ฅผ ๋ฐฉํฅ ๊ทธ๋ํ๋ก ํํํ ๋ ์ ํ ๊ด๊ณ๋ฅผ ์ด๊ธฐ์ง ์๋๋ก ์ ์ ์ ์ ๋ ฌํ๋ ๊ฒ์ => ๋ชจ๋ ๊ฐ์ (u, v)์ ๋ํด ์ ์ u๊ฐ ์ ์ v๋ณด๋ค ์์ ์์นํ๋๋ก ์ ๋ ฌ ๋์์ด directed graph๋ก cycle์ด ์์ด์ผํจ!= DAG Kahn's Algorithm ์์ด๋์ด๋ ์ง์
๊ฐ์ ์ด ์๋ ์ ์ ์ ์์ ๋๋ ๊ฒ์ ์์๋ฅผ ์ดํด๋ณด๋ฉด 1. ์ง์
๊ฐ์ ์ด ์๋ ์ ์ ์ ๊ณจ๋ผ ๋ฆฌ์คํธ์ ๋ฃ์2. ๊ณ ๋ฅธ ์ ์ ์ ์ ๊ฑฐํ๊ณ , ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ ์ ๊ฑฐํจ๋ชจ๋ ์ ์ ์ด ์ ๊ฑฐ๋ ๋๊น์ง ์ ๊ณผ์ ์ ๋ฐ๋ณต Implementation Details pseudo co..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค Shortest Paths Shortest Paths๋ ๋ง ๊ทธ๋๋ก ๋ ์ ์ฌ์ด์ ์ต๋จ ๊ฒฝ๋ก์ => ๋ ์ ์ฌ์ด์ ๊ฒฝ๋ก ์ค ๋น์ฉ์ด ์ต์์ธ ๊ฒฝ๋ก(๊ฒฝ๋ก ๋ด ๊ฐ์ ๋ค์ ๋น์ฉ ํฉ) Single Source Shortest Paths ๊ทธ๋ผ ์ด๋ฒ ํฌ์คํ
์ ์ฃผ์ ์ธ Single Source Shortest Paths๋ ๋ญ๊น? ์ด๋ ํ ์ ๊ณผ ๋ค๋ฅธ ๋ชจ๋ ์ ์ฌ์ด์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์๋ฏธํจ => ์์ ์ ์ (source node) s์์ ๋ค๋ฅธ ๋ชจ๋ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ๊ฐ ๊ณง, s๊ฐ root์ธ shortest-path tree ์ฐพ๊ธฐ์(์ผ์ข
์ spanning tree๋ผ๊ณ ๋ณผ ์ ์์) Dijkstra's Al..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค Minimum Spanning Trees Spanning Tree๋ ๊ทธ๋ํ G = (V, E)์์ ๊ฐ์ ์ |V| - 1 ๊ฐ๋ง ๋จ๊ฒจ ํธ๋ฆฌ๊ฐ ๋๋๋ก ๋ง๋ ๊ฒ Minimm Spanning Tree๋ Spanning Tree ์ค์์ edge weight์ ํฉ์ด ๊ฐ์ฅ ์์ ๊ฒ=> ํ ๊ทธ๋ํ์ ์ฌ๋ฌ๊ฐ์ MST๊ฐ ์กด์ฌํ ์ ์์ ์ด๋ป๊ฒ MST๋ฅผ ๊ตฌํ ๊น..? Naive Solution์ ์๊ฐํด๋ณด๋ฉด ๋ชจ๋ subgraph๋ฅผ ์ดํด๋ณด๊ณ , ๊ทธ ์ค์์ spanning tree์ด๋ฉด์ weight์ ํฉ์ด ๊ฐ์ฅ ์์ ๊ฒ์ ์ฐพ์ผ๋ฉด๋จ => subgraph์ ์๋ ๊ฐ๊ฐ์ edge๊ฐ ์๋ ์๋์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ฏ๋ก 2^|E..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค Disjoint Sets Disjoint Sets๋ ์๋ก ๊ฒน์น์ง ์๋ ์งํฉ๋ค์ ์๋ฏธํจ => ์ด์ฉํผ ๊ต์งํฉ์ด ๊ณต์งํฉ์ด๋ฏ๋ก intersect ์ฐ์ฐ์ ๋ฐ๋ก ์กด์ฌ X ∴ Disjoint Set ์ฐ์ฐ์๋ make-set(u) : u๋ฅผ ์ ์ผํ ์์๋ก ๊ฐ๋ ์งํฉ ์์ฑfind-set(u) : u๊ฐ ์ํ ์งํฉ ๋ฆฌํดunion(u, v) : u๊ฐ ์ํ ์งํฉ๊ณผ v๊ฐ ์ํ ์งํฉ์ ํฉ์นจ https://www.acmicpc.net/problem/1717 ์งํฉ์ ํํ ์ด๋ผ๋ ๋ฐฑ์ค ๋ฌธ์ ๋ฅผ Disjoint Set ์ฐ์ฐ์ผ๋ก ํด๊ฒฐํ๋ ์ฝ๋๋ฅผ ์ดํด๋ณด์ python์ set์ ์ด๋ค๋ฉด union(u, v)๋ฅผ ํ ๋ u, ..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค Greedy Algorithm ๊ฐ์ Algorithmic Paradigms Brute-force methods=> ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด๊ธฐDivide and conquer=> ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋ถํ ํ์ฌ ์ฌ๊ท์ ์ผ๋ก ํด๊ฒฐDynamic programming=> ์์ ๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจํด๋๊ณ ์ฌํ์ฉ์ค๋ ๋ค๋ฃฐ ์ฃผ์ ๋ Greedy algorithms ์! Greedy Strategy ์ง๊ธ ๋น์ฅ ๊ฐ์ฅ ์ข์๋ณด์ด๋ ๊ฒ์ ์ ํํ๋ ์ ๋ต์ => ๋ฏธ๋์ ์ํฉ์ ๊ณ ๋ คํ์ง ์์Greedy Algorithm ์ด๋ ์ต์ ํด๋ฅผ ํญ์ ๋ณด์ฅํ์ง๋ ์์ํ์ฌ์ ์ ํ์ด ๋ฏธ๋์ ๋ฏธ์น ์ํฅ์ ๊ณ ๋ คํ์ง ์๊ธฐ ๋๋ฌธ์Loca..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค Selection Problem Problem Definition (์ ๋ ฌ๋์ง ์์) ๋ฐฐ์ด arr์์ i ๋ฒ์งธ๋ก ์์ ๊ฐ ์ฐพ๊ธฐInput : arr, i (0 (์ฌ๊ธฐ์ i๋ 0๋ถํฐ ์์ํ๋ค๋ ์ ์ ์ผ๋ํ์)Output : arr์์ i ๋ฒ์งธ๋ก ์์ ๊ฐ ์๊ฐํด๋ณผ ์ ์๋ Methods ๋ก๋ 1. ์ต์๊ฐ ์ฐพ๊ธฐ๋ฅผ ๋ฐ๋ณต=> ์ต์
์ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋ Θ(i×n) = Θ(n^2)(์ต์
์ ๊ฒฝ์ฐ i๊ฐ n-1 ์ด๋ฏ๋ก)2. ์ ๋ ฌ ํ i ๋ฒ์งธ ๊ฐ ์ฐพ๊ธฐ => ์ ๋ ฌํ๋๋ฐ ํ์ํ ์๊ฐ Θ(n logn) Heapsort ์ฌ์ฉ์ Θ(n + i logn)(build-heap์ ํ๊ณ ๋ฝ๋๋ฐ logn ๊ฑธ๋ฆฌ๋๊ฒ i ๋ฒ ๋ฐ..
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช
๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์
๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค Lower Bounds of Comparision Sorting ๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (Comparision sort) ์์ Worst case์ O(nlogn) ๋ณด๋ค ๋น ๋ฅธ๊ฒ ์กด์ฌํ ๊น? ์ ๋ ฌ ๋ฌธ์ ์ ์ํ์ O(nlogn) ์ => quicksort ๋ผ๋ O(nlogn) ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ ์ ๋ ฌ ๋ฌธ์ ์ ํํ์ Ω(n log n) ์ => ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ์ด Ω(n log n) ์ธ ๊ฒ์ ์ฆ๋ช
ํด์ผํจ Comparison Sort๋ฅผ Decision Tree๋ก ์ถ์ํ ๊ฐ๋ฅํจ ์ ๊ทธ๋ฆผ ์ฒ๋ผ ๋ชจ๋ sort์ process๋ฅผ Decision Tree ํํ๋ก ์ถ์ํ๊ฐ ๊ฐ๋ฅํจ! => Tr..