Greedy ¶
1. Friendly Coins ¶
Given the denominations of coins for a newly founded country, the Dairy Republic, and some monetary amount, find the smallest set of coins that sums to that amount. The Dairy Republic is guaranteed to have a 1 cent coin.
2. 0/1 knapsack ¶
Give a greedy method, which is heuristic, to solve the 0/1 knapsack problem and also give an example to show that it does not always yield an optimal solution.
3. kanpsack ¶
The kanpsack problem is defined as follows:
Given positive integers P<sub>1</sub>, P<sub>2</sub>, ..., P<sub>n</sub>, W<sub>1</sub>, W<sub>2</sub>,..., W<sub>n</sub> and M.
Find X<sub>1</sub>, X<sub>2</sub>, ..., X<sub>n</sub>, 0 ≤ X<sub>i</sub> such that
∑P<sub>i</sub>X<sub>i</sub> (1 ≤ i ≤ n) is maximized subject to ∑W<sub>i</sub>X<sub>i</sub> ≤ M (1 ≤ i ≤ n) .
Give a greedy method to find an optimal solution of the knapsack problem and prove its correctness.
Given positive integers P<sub>1</sub>, P<sub>2</sub>, ..., P<sub>n</sub>, W<sub>1</sub>, W<sub>2</sub>,..., W<sub>n</sub> and M.
Find X<sub>1</sub>, X<sub>2</sub>, ..., X<sub>n</sub>, 0 ≤ X<sub>i</sub> such that
∑P<sub>i</sub>X<sub>i</sub> (1 ≤ i ≤ n) is maximized subject to ∑W<sub>i</sub>X<sub>i</sub> ≤ M (1 ≤ i ≤ n) .
Give a greedy method to find an optimal solution of the knapsack problem and prove its correctness.
4. Job Scheduling ¶
Consider the problem of scheduling n jobs on one machine. Describe an algorithm to find a schedule such that its average completion time is minimum. Prove the correctness of your algorithm.
5. Optimal Binary Tree ¶
Optimal Binary Tree는 Dynamic Programming 기법으로 풀리는 ìœ ëª…í•œ ë¬¸ì œìž…ë‹ˆë‹¤. 그누스 형님 방법ì—� ì�˜í•˜ë©´ O(n<sup>2</sup>)으로 풀립니다. 그러나 우리는 ì�´ë³´ë‹¤ ì �ê·¼ì �으로 ë�” ë¹ ë¥¸ 휴리스틱 ë²„ì „ì�„ 작성해야 합니다.
다ì�Œê³¼ ê°™ì�´ input ì�´ ë“¤ì–´ì˜¨ë‹¤ê³ ê°€ì •í•©ì‹œë‹¤. 여기서 맨 앞 하나ì�˜ ì •ìˆ˜ëŠ” 노드ì�˜ 수를 나타냅니다. ê·¸ 밑으로 노드ì—� 대한 ì •ë³´ê°€ ìž…ë ¥ë�©ë‹ˆë‹¤. 노드ì�˜ 처ì�Œì�€ key ê°’ì�´ê³ , ê·¸ 다ì�Œ ê°’ì�€ í™•ë¥ (í™•ë¥ ì�€ 1ì�´ìƒ�ì�˜ ì •ìˆ˜ë¡œ ìž„ì�˜ë¡œ ìž…ë ¥) 입니다. 하나ì�˜ 노드를 검색했ì�„때 실패하는 경우는 ì—†ë‹¤ê³ ê°€ì •í•©ì‹œë‹¤. 최ì �ì�˜ í�‰ê· íƒ�색시간ì�„ 가지는 ì�´ì§„íƒ�색트리를 êµ¬í˜„í•˜ê³ ë‹¤ì�Œì�„ ì¶œë ¥í•˜ì‹œì˜¤.
Inorder 순회를 통해 ê°� 키값ì�„ 모ë‘� ì¶œë ¥í•˜ê³ , ë˜�한 ê°� 키값ì�˜ íƒ�색시간ì�˜ 합계를 ì¶œë ¥í•˜ì‹œì˜¤.
!! 주ì�˜ : 최ì �ì�„ 구하는 것ì�´ ì•„ë‹ˆê³ , ë¹ ë¥¸ 시간안ì—� 최ì �ì—� 가까운 ê°’ì�„ 구하는 것ì�´ 목ì �ìž„.
샘플 Output ì—�서는 beta를 root 값으로 본 것임. 여러 í’€ì�´ê°€ 나올 수 있ì�Œ. ì�´ 페ì�´ì§€ì�˜ 하위 페ì�´ì§€ì—� 코드와 설명ì�„ ì˜¬ë ¤ì£¼ì„¸ìš”.
다ì�Œê³¼ ê°™ì�´ input ì�´ ë“¤ì–´ì˜¨ë‹¤ê³ ê°€ì •í•©ì‹œë‹¤. 여기서 맨 앞 하나ì�˜ ì •ìˆ˜ëŠ” 노드ì�˜ 수를 나타냅니다. ê·¸ 밑으로 노드ì—� 대한 ì •ë³´ê°€ ìž…ë ¥ë�©ë‹ˆë‹¤. 노드ì�˜ 처ì�Œì�€ key ê°’ì�´ê³ , ê·¸ 다ì�Œ ê°’ì�€ í™•ë¥ (í™•ë¥ ì�€ 1ì�´ìƒ�ì�˜ ì •ìˆ˜ë¡œ ìž„ì�˜ë¡œ ìž…ë ¥) 입니다. 하나ì�˜ 노드를 검색했ì�„때 실패하는 경우는 ì—†ë‹¤ê³ ê°€ì •í•©ì‹œë‹¤. 최ì �ì�˜ í�‰ê· íƒ�색시간ì�„ 가지는 ì�´ì§„íƒ�색트리를 êµ¬í˜„í•˜ê³ ë‹¤ì�Œì�„ ì¶œë ¥í•˜ì‹œì˜¤.
Inorder 순회를 통해 ê°� 키값ì�„ 모ë‘� ì¶œë ¥í•˜ê³ , ë˜�한 ê°� 키값ì�˜ íƒ�색시간ì�˜ 합계를 ì¶œë ¥í•˜ì‹œì˜¤.
!! 주ì�˜ : 최ì �ì�„ 구하는 것ì�´ ì•„ë‹ˆê³ , ë¹ ë¥¸ 시간안ì—� 최ì �ì—� 가까운 ê°’ì�„ 구하는 것ì�´ 목ì �ìž„.
샘플 Output ì—�서는 beta를 root 값으로 본 것임. 여러 í’€ì�´ê°€ 나올 수 있ì�Œ. ì�´ 페ì�´ì§€ì�˜ 하위 페ì�´ì§€ì—� 코드와 설명ì�„ ì˜¬ë ¤ì£¼ì„¸ìš”.
input ¶
{{| 3
alph 3 beta 7 theta 10 |}}
alph 3 beta 7 theta 10 |}}
output ¶
{{| alph beta theta
33 |}}
33 |}}
í’€ì�´ ¶
| 작성� | 개발시간 | 풀� |
| Leonardong | 2h | http://wiki.zeropage.org/trac/leonardong/browser/AlgorithmTrainning/OptimalBST.py |
| ê¹€ìƒ�ì„ | ì—„ì² | AproximateBinaryTree/ê¹€ìƒ�ì„ |
| 문보창 | ìƒ�ì„ì�´í˜•보다많ì�´ | ì•Œê³ ë¦¬ì¦˜8ì£¼ìˆ™ì œ/문보창 |









