22
Greedy Algorithms

Greedy Algorithms

  • Upload
    nathan

  • View
    89

  • Download
    0

Embed Size (px)

DESCRIPTION

Greedy Algorithms. Greedy Methods ( 描述1 ). 解最佳化問題的演算法 , 其解題過程可看成是由一連串的決策步驟所組成 , 而每一步驟都有一組選擇要選定 . 一個 greedy method 在每一決策步驟總是選定那目前 看來最好 的選擇 . Greedy methods 並不保證總是得到最佳解 , 但在有些問題卻可以得到最佳解 . Greedy Methods ( 描述2 ). Greedy 演算法經常 是非常有效率且簡單的演算 ; 但 但較難證明其正確性 ( 與 DP 演算法比較 ). - PowerPoint PPT Presentation

Citation preview

Page 1: Greedy Algorithms

Greedy Algorithms

Page 2: Greedy Algorithms

Greedy Algorithms 2

Greedy Methods ( 描述 1)

解最佳化問題的演算法 , 其解題過程可看成是由一連串的決策步驟所組成 , 而每一步驟都有一組選擇要選定 .

一個 greedy method 在每一決策步驟總是選定那目前看來最好 的選擇 .

Greedy methods 並不保證總是得到最佳解 , 但在有些問題卻可以得到最佳解 .

Page 3: Greedy Algorithms

Greedy Algorithms 3

Greedy Methods ( 描述 2)

Greedy 演算法經常是非常有效率且簡單的演算 ; 但 但較難證明其正確性 ( 與 DP 演算法比較 ).

很多 heuristic algorithms 都採用 greedy methods 的策略 .

Page 4: Greedy Algorithms

Greedy Algorithms 4

一個活動選擇問題 ( 定義 )

假設有 n 個 活動 提出申請要使用一個場地 , 而這場地在同一時間點時最多只能讓一個活動使用 . 問題是:從這 n 個活動選一組數量最多 , 且可以在這場地舉辦的活動集 .

12

3

4

56

78

911

10

時間軸

假設活動 i, 其提出申請使用場地的時段為一半關半開的區間 [si, fi), 並以符號 Ii 代表 .

Page 5: Greedy Algorithms

Greedy Algorithms 5

一個活動選擇問題 ( 設計 1)

Let P(A) denote the problem with A as the given set of proposed activities and S denote an optimal solution of P(A). For any activity i in A, we have

1. i S S is an optimal solution of P(A\{ i }).2. i S S \{ i } is an optimal solution of P(A\N[ i ])

but not necessary an optima solution of P(A\{ i }).

iN[ i ] :N[ i ]={jA: Ij Ii }

Page 6: Greedy Algorithms

Greedy Algorithms 6

一個活動選擇問題 ( 設計 2) What kind of activity i in A will be contained in an

optimal solution of P(A) : an activity with

1. minimum fi si or 2.minimum |N[ i ]| or

3. minimum fi or 4.minimum si.

Answer : .

Proof : Let f1 = min { fi } and S be an optimal solution of P(A). If 1S then there is one and only one activity in S, say j, such that Ij I1 . Then S \{ j} { 1} is also an optimal solution.

Page 7: Greedy Algorithms

Greedy Algorithms 7

一個活動選擇問題 ( 程式 + 例子 )

Greedy-ASP(s, f, n) { /* f[1] f[2] … f[n]*/ Ans = {1}; for(i=2, j=1; in; i++) if(s[ i ]f[ j ]) {Ans = Ans { i }; j = i; }}

12

3

4

56

78

911

10

time

Input: i si

fi

1 142 353 064 575 386 597 6108 8119 81210 91311 1214

Page 8: Greedy Algorithms

Greedy Algorithms 8

Greedy 演算法的要素 Optimal substructure (a problem exhibits optimal

substructure if an optimal solution to the problem contains within it optimal solutions to subproblems)

Greedy-choice property Priority queue or sorting

Page 9: Greedy Algorithms

Greedy Algorithms 9

Knapsack Problem (Greedy vs. DP)

Given n items: weights: w1 w2 … wn

values: v1 v2 … vn

a knapsack of capacity W

Find the most valuable load of the items that fit into the knapsackExample:item weight value Knapsack capacity W=16 1 2 $20 2 5 $30 3 10 $50 4 5 $10

Page 10: Greedy Algorithms

Greedy Algorithms 10

Knapsack Problem

Given n items: weights: w1 w2 … wn

values: v1 v2 … vn

a knapsack of capacity W

T[i, j]: the optimal solution using item 1,...,i with weight at most j.

If wi> j T[i, j] = T[i-1, j]; otherwise T[i, j] = max{ T[i-1, j], wi +T[i-1, j - wi]}.

How good is this method?

Page 11: Greedy Algorithms

Greedy Algorithms 11

0-1 and Fractional Knapsack Problem

Constraints of 2 variants of the knapsack problem: 0-1 knapsack problem: each item must either be

taken or left behind.Fractional knapsack problem: the thief can take

fractions of items. The greedy strategy of taking as mush as possible

of the item with greatest vi / wi only works for the fractional knapsack problem.

Page 12: Greedy Algorithms

Greedy Algorithms 12

Huffman Codes

Alphabet: a b c d e f Frequency in a file 45 13 12 16 9 5 Fixed-length codeword 000 001 010 011 100 101Variable-length codeword 0 101 100 111 1101 1100

file length 1 = 300; file length 2 = 224Compression ratio = (300224)/300100% 25%

A very effective technique for compressing data Consider the problem of designing a binary

character code Fixed length code vs. variable-length code, e.g.:

Page 13: Greedy Algorithms

Greedy Algorithms 13

Prefix Codes & Coding Trees

We consider only codes in which no codeword is also a prefix of some other codeword.

The assumption is crucial for decoding variable-length code (using a binary tree). E.g.:

a:45

c:12 b:13 d:16

f: 5 e: 9

10

0 1

0 1

1

10

0

Page 14: Greedy Algorithms

Greedy Algorithms 14

Optimal Coding Trees For a alphabet C, and its corresponding coding

tree T, let f(c) denote the frequency of cC in a file, and let dT(c) denote the depth of c’s leaf in T. (dT(c) is also the length of the codeword for c.)

The size required to encode the file is thus: B(T) = cC f(c) dT(c)

We want to find a coding tree with minimum B(T).

Page 15: Greedy Algorithms

Greedy Algorithms 15

Observation 1 Any optimal coding tree for C, |C| > 1, must be

a full binary tree, in which every nonleaf node has two children. E.g.: for the fixed-length code:

a:45 c:12b:13 d:16

f: 5e: 9

Page 16: Greedy Algorithms

Greedy Algorithms 16

Observation 2 Assume C = { c1, c2, … , cn}, and f(c1) f(c2)

… f(cn). Then there exists an optimal coding tree T such that :

c1 c2

T: and dT(c1) = dT(c2) = maxcC dT(c)

Page 17: Greedy Algorithms

Greedy Algorithms 17

Observation 3 If is T an optimal coding tree for C , then T' is

an optimal coding tree for C \{c1, c2} {c'} with f(c') = f(c1) + f(c2).

c1 c2

T:

c1 c2

T':

c'

Page 18: Greedy Algorithms

Greedy Algorithms 18

Huffman’s Algorithm ( 例 )

a:45c:12 b:13 d:16f: 5 e: 9

a:45c:12 b:13 d:16

f: 5 e: 9

14

a:45

c:12 b:13

d:16

f: 5 e: 9

14 25

Page 19: Greedy Algorithms

Greedy Algorithms 19

Huffman’s Algorithm ( 例 - 續 1)

a:45

c:12 b:13

d:16

f: 5 e: 9

14 25

d:16

f: 5 e: 9

14

30

c:12 b:13

25 a:45

Page 20: Greedy Algorithms

Greedy Algorithms 20

Huffman’s Algorithm ( 例 - 續 2)

d:16

f: 5 e: 9

14

30

c:12 b:13

25 a:45

a:45 55

d:16

f: 5 e: 9

14

30

c:12 b:13

25

Page 21: Greedy Algorithms

Greedy Algorithms 21

Huffman’s Algorithm ( 例 - 續 3)

a:45 55

d:16

f: 5 e: 9

14

30

c:12 b:13

25a:45

c:12 b:13 d:16

25

f: 5 e: 9

14

30

55

10010

0 1

0 1

1

10

0

Page 22: Greedy Algorithms

Greedy Algorithms 22

Huffman’s Algorithm (pseudo-code)

Huffman(C) Q C // Q :priority queue while(|Q| > 1) z Allocate-Node( ) x left[z] Extract-Min(Q) y right[z] Extract-Min(Q) f [z] f [x] + f [y] insert(Q, z) return Extract-Min(Q)

Time efficiency: .