Brute-force (=exhaustive search)
μ»΄ν¨ν°μ κ³μ° λ₯λ ₯μ μ΄μ©ν΄ κ°λ₯ν κ²½μ°μ μλ₯Ό λͺ¨λ λμ΄νλ©΄μ λ΅μ μ°Ύλ λ°©λ²
1. μ¬κ· νΈμΆκ³Ό μμ νμ
β½ μ¬κ· νΈμΆ
-
μμ μ΄ μνν μμ μ μ μ¬ν ννμ μ¬λ¬ μ‘°κ°μΌλ‘ μͺΌκ° λ€ κ·Έ μ€ ν μ‘°κ°μ μννκ³ , λλ¨Έμ§λ₯Ό μκΈ° μμ μ νΈμΆν΄ μ€ννλ κ³Όμ
-
μ¬κ· νΈμΆμ μ¬μ©λλ ν¨μκ° μ¬κ· ν¨μ ex) 1λΆν° nκΉμ§μ ν©
-
Base case : λ μ΄μ λλ μ μλ κ°μ₯ μμ λ¨μμ μμ ex) 1λΆν° nκΉμ§μ ν©μμ nμ΄ 1μ΄λ©΄ return 1
-
μ‘΄μ¬νλ λͺ¨λ μ λ ₯μ΄ base caseμ λ΅μ μ΄μ©ν΄ κ³μ°λ μ μλλ‘ base caseλ₯Ό μ νν΄μΌ ν¨
π Boggle game
β λ¬Έμ μ λΆν
β« μμ μμΉ κΈμκ° μ£Όμ΄μ§ λ¨μ΄ 첫 κΈμμ λ€λ₯΄λ©΄ False
β« wordμ 첫 κΈμλ₯Ό μ μΈν word[1..]μ wordμ μΈμ ν μνμ’μ° λκ°μ μ¬λ μΉΈμμ μ°ΎκΈ°
β‘ κΈ°μ μ¬λ‘μ μ ν
β« μμΉ (x, y)μ μλ κΈμκ° μ£Όμ΄μ§ λ¨μ΄μ 첫 κΈμκ° μλ λ
β« μνλ λ¨μ΄κ° ν κΈμμΌ λ(νμ μ±κ³΅νλ μΌμ΄μ€)
cf. μ λ ₯μ΄ μλͺ»λκ±°λ λ²μμμ λ²μ΄λ κ²½μ°λ κΈ°μ μ¬λ‘λ‘ μ νν΄ λ§¨ μ²μμ μ²λ¦¬ν΄μ€λ€λ©΄ μ½λκ° κ°κ²°ν΄μ§
⒠ꡬν
β« μμ νμμ μκ° λ³΅μ‘λ λΆμ
-
κ°λ₯ν ν보μ μκ° μκ° λ³΅μ‘λ
β« μμ νμ μ κ·Ό λ°©λ²
-
μμ νμμ λλ μκ°μ κ°λ₯ν λ΅μ μμ μ νν λΉλ‘νκΈ° λλ¬Έμ μ΅λ ν¬κΈ°μ μ λ ₯ κ°μ ν λ΅ κ°μλ₯Ό κ³μ°ν΄μ λͺ¨λ μ ν μκ° μμ μ²λ¦¬ν μ μμμ§ μκ°
-
κ°λ₯ν λͺ¨λ λ΅μ ν보λ₯Ό λ§λλ κ³Όμ μ μ¬λ¬ κ°μ μ νμΌλ‘ λΆν
-
νλλ₯Ό μ νν΄ λ΅μ μΌλΆλ₯Ό λ§λ€κ³ , λλ¨Έμ§ λ΅μ μ¬κ· νΈμΆμ ν΅ν΄ μμ±
-
μ νμ§κ° νλ λ°μ λ¨μ§ μμκ±°λ νλλ λ¨μ§ μμ κ²½μ°λ₯Ό κΈ°μ μ¬λ‘λ‘ μ ν
2. μ΅μ ν λ¬Έμ
π Traveling Sales-man Problem(TSP) μ¬κ· νΈμΆ μκ³ λ¦¬μ¦
int n; // λμμ μ
double distance[MAX][MAX]; // λ λμ κ° κ±°λ¦¬ μ μ₯ λ°°μ΄
/*
path : μ§κΈκΉμ§ λ§λ κ²½λ‘
visited : κ° λμμ λ°©λ¬Έ μ¬λΆ
currentLength : μ§κΈκΉμ§ λ§λ κ²½λ‘μ κΈΈμ΄
*/
double shortestPath(vector<int>& path, vector<bool>& visited, double currentLength) {
if (path.size() == n) {
return currentLength + distance[path[0]][path.back()]'
double ret = INF; // λ§€μ° ν° κ°μΌλ‘ μ΄κΈ°ν
// λ€μ λ°©λ¬Έν λμ λͺ¨λ νμΈ
for (int next = 0; next < n; ++next) {
if (visited[next]) continue;
int here = path.back();
path.push_back(next);
visited[next] = true;
// λλ¨Έμ§ κ²½λ‘λ₯Ό μ¬κ· νΈμΆ ν΅ν΄ μμ±νκ³ μ΅λ¨ κ²½λ‘μ κΈΈμ΄ μ»κΈ°
double cand = shortestPath(path, visited, currentLength + distance[here][next]);
ret = min(ret, cand);
visited[next] = false;
path.pop_back();
}
return ret;
}
3. λ§μ΄ λ±μ₯νλ μμ νμ μ ν
β½ λͺ¨λ μμ΄/μ‘°ν© λ§λ€κΈ°
β½ 2^nκ°μ§ κ²½μ°μ μ λ§λ€κΈ°
κ΄λ ¨ λ¬Έμ λ λ°±μ€κ³Ό νλ‘κ·Έλλ¨Έμ€μμ νμ΄λ΄μΌκ² λ€.
'Computer Science > DS & Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Shortest Path Algorithm: 벨λ§-ν¬λ μκ³ λ¦¬μ¦ (0) | 2024.11.25 |
---|---|
Linear Data Structure: μ€ν, ν, λ± (0) | 2021.07.04 |
Divide and Conquer: λΆν μ 볡 - ν΅ μ λ ¬ (0) | 2021.04.18 |
Divide and Conquer: λΆν μ 볡 - μ΄λΆνμ, ν©λ³μ λ ¬ (0) | 2021.04.16 |
Greedy: νμλ² (0) | 2021.02.23 |