7 gierige algorithmen (greedy algorithms) file7 gierige algorithmen (greedy algorithms) ! " c...

37
7 Gierige Algorithmen (Greedy Algorithms) c B. M¨ oller Informatik III WS 2011/12 Gierige Algorithmen (Greedy Algorithms) Prinzip c B. M¨ oller Informatik III WS 2011/12

Upload: truongliem

Post on 12-Aug-2019

272 views

Category:

Documents


0 download

TRANSCRIPT

7 Gierige Algorithmen (Greedy

Algorithms)

�� ��������� ��� ������� � ����� ������ ������ ���������� ������� �������� ��� ���� �������� ��� ����� ��������� �������� ������

��� ���������� ������ ���� ���������� ��� �� ������ �����

��� ���� ���� �������� ���� ���� ������� ��������� ���������������� !��������� ���� �� "������ �� ����� ���������������������

c© B. Moller # $# Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

Prinzip�• %�������� �� �����&������ � �• !�� ���������� ���� ����������� �������� � ��� �� �� %���'����

• ���� � � ��� ���� ��� ���� ���(��� ����� ����� �������������� ��� ���� ��� ����� �������� ����� ��������� ��� ��������������

c© B. Moller # ) # Informatik III WS 2011/12

7.1 Minimale Spannbaume

Aufgabe:

• Gegeben: ��������� � ����� �������� ��� ������ ��������� ���

• Gesucht: ��������� ������� ��� � ������ ������������� ����� ���� ��� &� ��� �� ��� ����� �� ��� ����'������

• ����� ��� "��������� ��� �� ���� ��������� ����� ���� �������Anwendungsbeispiel:

���� � ��������������� ����������������� ���������������� ��� ���� � ������������ ��!��������������� "������������

c© B. Moller # � # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

7.1.1 Charakterisierung von Baumen

������������� ��� ��������� �� �������� ������"������� ���� �� !� �����Lemma 7.1.1 &�� T = (V, E)

��� ! ������ ���� � v, w ∈ V

��������� ��� � ������ �� v � ��w�� T �

��� ���� �v, w ∈ V

���( ��� vw /∈ E� � � �

T ∪ {vw}��� � �����

������ ������ ����� � vw�� � &��u ∈ V

���|N(u)| = k� � �� ����� � ��� ! �� ����� "��'

������ ��u��

k����������

�!�m = n − 1�

c© B. Moller # " # Informatik III WS 2011/12

Beweis:��� � T ��� ������ ����� ���� ���� �� �������� �� v

� ��w�

• �������� P1, P2

����� ���������������� ��v� ��

w�• � ������ �� ���� ������ ���v ′w ′ �� P2

� ��� ����� ��P1������(

P1

v ′ •

EEEEEE

EE

*j*j

*j*j*j

*j*j

*j*j

*j*j

*j*j

*j

v •

7w7w

7w7w

7w7w

7w7w

w ′ • /o/o/o/o/o/o/o •w

P2

• � P2

��� ���� ���v ′ 6= w ′ ��� v ′ 6= w�

c© B. Moller # � # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

1. Fall: "� ��� ���w ′ 6= w�• � �� ��� ��� v ′ · · ·w · · ·w ′v ′ ��� ������• ����������� ��� ! ���������� ���

2. Fall: "� ��� w ′ = w�• � �� ����� � � � ��������� v ′ · · ·w ���������� ����� �������������� ���� ��� � ���

v ′w��� � ���� ��

P2 ����� ������• � ��� � ������ ��� � ������� v ′ · · ·wv ′

� ��� ����� ����� ���'� ��� ����� � ������ ����� ����������� ��� ! �������'��� ���

c© B. Moller # � # Informatik III WS 2011/12

��� ��� � �� ��� ������������� ��v� ��

w����� ���

vw�����

����� K� ��� vw

����� ��• ����

���� T ∪ {vw}�� ��� ����� �������� �����

K ′ �• ������ ���� ��� ��� vw

���� ���� � T������ ����

• ������������ ���� ��v���

w��

T���������� ���������������

��� ��� � �� ��� ���������� �� ���������� ������ � ��� ���&����� ��

K���

vw���������

• � ��� ����K ���K ′����������

c© B. Moller # � # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

� � ��� ���� ����� �� ��� G�• !��� ���� ���� �������� � ��� �� v 6= w

�� u�• ��� �� u

��� ��� �� ��� ���������� � ���� ������������� �� ���

G ′ �• � �� �� ���� �� ��G

��� � �������� ��v� ��

w����� ����� ��

vuw�����

• ������ ������� ����� "�������� �� u ���������• �� �����

v���

w�� ������������� ��������� ��

G ′ �• �� � �

G ′ ���������� k����������

c© B. Moller # � # Informatik III WS 2011/12

"� ��� ���x 6= u

��� ��������� ����� ��G�

• ������ � �� �� ���� �� ��G��� � �������� ��

x� ��

u�• ������ ������ ����� ����� � ��� ��

v��

u�v = x

��� ���������� ����� �

u������

• � ���������� �� x� ��

v����� ��

G ′ ��� ���� � ���� x��

��� �������� �� v�• � ��� ���� �� ��� ����� ���� � k

����������

c© B. Moller # � # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

�!���� ������� ���� �������� � ��n�• ��� ��������� �� �� n = 1

��� � ��• &�� � ���

n > 1���� ��������� ����� ��������� ����� u�• &��

k =�� |N(u)|���� � �� � ������������k��������� ����

������ !� ���� ������� � �� ����������� ��������� �mi =

ni − 1�

c© B. Moller # $� # Informatik III WS 2011/12

"� ���m

= k +

k∑

i=1

mi

= k +

k∑

i=1

(ni − 1)

= k +

k∑

i=1

ni − k

=

k∑

i=1

ni

= n − 1 ,

� u� �������� ������ ut

c© B. Moller # $$# Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

���� �� ��� ��� ��� ���

Lemma 7.1.2 (Charakterisierung von Baumen)���� �����

�� ����G���

n ≥ 1����� ���� ������ ���� ��� � ���� ����

���G��� ! ���

���G��� ��� ������ ��������m = n − 1 � �����

� �G��� ������ ���m = n − 1�

c© B. Moller # $) # Informatik III WS 2011/12

Beweis: ��� ���� ��� (1) ⇒ (2)���

(1) ⇒ (3)������ �� ���

������ ���� � ��������

(2) ⇒ (1)(• ��� ���(G ��� ���� ! ��� ����G ����� � ����� ������• !��� ���� ����� &� ��� ��

B = (V, E ′)����

G�• � G

����� ����� ����� �� ����E ′ ⊂ E

� �|E ′| < |E|

������• �����

(1) ⇒ (2)��� ���

|E ′| = n − 1 = |E|�������������

c© B. Moller # $� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

(3) ⇒ (1)(• � ���� ��������� ��� G

���� �� &�� k ��� ��� � ��� ��'��������

• ���� �������� ��� ����� ! �����mi = ni − 1� ���������'��� ������

m =

k∑

i=1

mi =

k∑

i=1

(ni − 1) =

k∑

i=1

ni − k = n − k .

• �����m = n − 1

���k = 1

� �G ��� ������ ������ ut

c© B. Moller # $" # Informatik III WS 2011/12

��� ���� ����� ���� ���� ����� ��� "�������� �� &� ���� ���� ����� �(• !��������� ����� ��� ������ ����������� ���� ��������������������� ������������ ���

m = n − 1�������� ��� �������

• !��������� ����� ������������� ��������������� ����������'�� ����� !����� ���� ��� ������������ ��� m = n − 1

����������� ��������

c© B. Moller # $� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

7.1.2 Losung nach Prim

�� ��s ∈ V

�������� ����� T0 = ({s}, ∅)�

• "��� ��� Tk�� Tk+1

�� ���� ������� � ���vw

���v ∈ Tk

���w /∈ Tk

����������

• Tn−1

��� ���� ������ ��� ���� ���

c© B. Moller # $� # Informatik III WS 2011/12

Beispiel 7.1.3 !��� ���� ������� ���� ����� ���� ����� �� �

s ��� ����� ���� ����•

2

4 •8

6 •1

•5

�������7

•2

�������3

•����� ��������� ������ ����&!

•2

4 • 6 •1

• •2

������� •ut

c© B. Moller # $� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

Korrektheit���� Tk���� !� ������ k + 1 ����� ��� k � �����

� ��� ��� Tn−1&� ��� ���

������������������ � ����� ��� �� ��� ��� �� ������������

∀ k : ∃ �&!M : Tk ⊆ M .

Beweis:�������� ����� k�

• k = 0 :� ��

c© B. Moller # $� # Informatik III WS 2011/12

k → k + 1 :

• &��Tk ⊆ M

� ����M�&!� ���

Tk+1 = Tk ∪ {e}�• ���

e��

M� � ������� �������

• ������� � � �M ∪ {e}

��� � ����� �����K���

e��

K� ��

���� ������• e

��������� ����� ����� �� Tk��� ���������� ����� � ��

Tk �• � K ����� e

� �������� �� ���� ������� � ��� v ′w ′��K

��������� ����� � ��

Tk��� ���������

• &����M ′ =�� M\{v ′w ′} ∪ {e} .

• ��� ������� ����� ��M ∪ {e}��� ��

M ′ ������ ������������• ������������ ����� �

M ′ ��� M � ����� ��� ��� � �� ��'

�������� ��� ��� ������ ������ � &� ��� ���c© B. Moller # $� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

• � � ��� ��������� g(M ′)��������� ���� ��

g(M ′) = g(M) − g(v ′w ′) + g(e).

• � �� � � ��e��� ���

g(e) ≤ g(v ′w ′)� �

e���� ��������

�� Tk��� ����������� � ��� ����

• �� ��� g(M ′) ≤ g(M)� � M �&!� ��� g(M) ≤ g(M ′)� ����

g(M) = g(M ′)� ����M ′

��� ����� ��&!� ut

c© B. Moller # )� # Informatik III WS 2011/12

Implementierung:��� �� ��� ���������� '���������� ����

• dd[v]� � ������� ����� �������� � ��� ��

v�� ��������

OK��� ���• OK

������ ��� ����� ��Tk����� ��

c© B. Moller # )$# Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

waehle s in V beliebig ; // Zeile 0

for all (v != s) // Zeile 1

{ dd[v] = g(sv) ; pre[v] = s ; } // g im erw. Graphen

dd[s] = 0 ; OK = single(s) ; // Zeile 2

while (!OK.equals(V)) // Zeile 3

{ finde w mit !(OK.contains(w)) und

dd[w] minimal ; // Zeile 4

OK = OK.union(w) ; // Zeile 5

for all (v mit !(OK.contains(v))) // Zeile 6

if (dd[v] > g(wv))

{ dd[v] = g(wv) ;

pre[v] = w ;

}

}

c© B. Moller # )) # Informatik III WS 2011/12

���������� ��������� � � ���� ��� ��� � ��� �����������

pre������ ��� � ���� ��� &� ��� ���� ������������

����������� ��( ��� ��� ������� ��O(n2)

���O(m · �n)�

c© B. Moller # )� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

7.1.3 Losung nach Kruskal

• &���� T0 = (V, ∅)�• "��� ��� Tk

�� Tk+1�� ���� ������� � ���� ��� ������ �����

������� ����������• � �� ��� Tn−1

���� �������

c© B. Moller # )" # Informatik III WS 2011/12

Korrektheit� ��� ��������������� Tk���� ������ ���

k� ����

��� �� ���∀ k : ∃ �&!M : Tk ⊆ M.

Beweis:

• k = 0��� &������� �������( � ��

• k → k + 1( &�� Tk ⊆ M���� ������&!

M�• Tk+1

� �k + 1

� ���� ��� ��� �������• &��

Tk+1 = Tk ∪ {e}� ��� e��

M� � ������� �������

• &��� � �M ∪ {e}

��� � ����� �����K� ���

e����� ��

• ��� � ��� e��������� ���� ��������� �� Tk

� ������ ��� ���

Tk+1����� ����� �� ����� ������ ����� ������

• �������� � �� K\{e} ����� � �� �� Tk

������ � e� ���� ��

������ � ��Tk ∪ {e}

������ ������c© B. Moller # )� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

• �� ���� �� �� K���� ������� � ��� vw

������ ��� ���� ��'������� ��

Tk����������

• &����M ′ = M\{vw} ∪ {e}�• ��� ������� ����� K

��M ∪ {e}

��� ��M ′ ������������

• ����M ′

��� ��� ������ �������� ����� � � ������ ��� �&� ��� ���

• ������ ���

g(M ′) = g(M) − g(vw) + g(e) ≤ g(M) ,

� � ��� � g(e) ≤ g(vw)�• "� ���

g(M) = g(M ′)� ���� ���M ′

����&!����Tk+1

��� ����ut

c© B. Moller # )� # Informatik III WS 2011/12

"� �� � ��� � �� ��� !����� ���� � ����� �� ������ �������������� ���� ����� ��� ����� ���� �� ���� ��������� ����� ����(��� � ���� �������&��������� ��� ���� ������������� ��� ��������� �� ��������� ����� ������� ����������������� ���� �������'��������� ��� ���� �� ���� ����� ���� �� ��� ����� ��� ��� ����

c© B. Moller # )� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

7.1.4 Implementierung

���� �� &������ ��� � � ������ �� � ������� ����� �������������� � �� �� ���� ����� ����������� ������(• &������� ��

O(m · �m)�• � �� � ���� �����'� ��(� ���� � ��� � �� ��O(m)�� �������� ��m

� ���� ��������m'� deletemin�

��� ����O(m · �m)�

c© B. Moller # )� # Informatik III WS 2011/12

�� ��� �� ��� ���� � � ��� �� ���� ��� ������ � ���� � � ��������� ������� ��� ��� � ����� ���� �� ������ ������ �������������� �������������������(• �� ��������� � ���� ���� � ��� ���������� �������� ������ � � ��� � �� ���

Tk�������� ���� ���������� ������������

���� �� ������ ���� ���� �����• ������ ��� �� vw

������� ��� � � �� ����� ������ ���� v, w������� ����������� ��� ����� ����� ������� ������ ����'��� ����������� ��� �� v, w ���� ��������� �������������� ���� � ���� ��� ����������

• � � ���� ��� � ��� � ���� �� ����� union-find'&��������• � ����������� �� ���� ��� ���� �� �������� ��O(m ·α(m, n))�• � ��� ����� ��� ��� �� ��� �� ��O(m · �n)�

c© B. Moller # )� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

Satz 7.1.4 "���&! � ��� ���� ��O(n2)

���O(m · �n)����������

Beispiel 7.1.5 � � ���� ���� ���� � !������ ���� � ����� ���������� ������ ���� � � ���� "������� ��� ����� ������������ ������������ ��� ��� ������ "������� ���������� ut

c© B. Moller # �� # Informatik III WS 2011/12

7.2 Ein einfaches Planungsverfahren

(scheduling)

Gegeben: n���� ���� ��� ��� � �������� t1, . . . , tn

�� �� ������������Gesucht: !� ������������������� � � �� ��� ����������������!�������������� ����� �����

Beispiel 7.2.1 &����t1 = 15, t2 = 8, t3 = 3

���t4 = 10� !��

��������1234

��� ��� ���������������� !��������������

1

4· (15 + (15 + 8) + (23 + 3) + (26 + 10)) = 25

ut

c© B. Moller # �$# Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

�� �������� ��� ��� ���������������� !�������������� �����������

i1, . . . , in

T

= 1n·

n∑

l=1

[

(

l−1∑

j=1

tij) + til

]

= 1n·

n∑

k=1

(n − k + 1) · tik

= 1n·[

(n + 1) ·n∑

k=1

tik−

n∑

k=1

k · tik

︸ ︷︷ ︸(∗)

]

T ��������� � ���� (∗) � ��� ����

c© B. Moller # �) # Informatik III WS 2011/12

���� ��� ����� ��� ������������� k� �� ��� � � ���� ���

� ����������� � ��������k� ������ �

i1, . . . , in ����������

� �� ����������� � �������� ������� �����

�� ������(�� �� ���� �� i1��� ���������� � ������ ����������

���� � �� ��� ��������� ���� ��� � ���������� ��� �������

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

7.3 Huffman-Codes

7.3.1 Grundbegriffe

�����( !��� �� ������� ����� ������� ����A� ����

c : A → {0, 1}∗ ���� ������� c

������ ��� ���� �������� ���� ���� � a, b ∈ A��� a 6= b

���� � �� c(a)���� ��� �� �� c(b)

����

Prinzip der Baumdarstellung fur Binarcodes(• ��������� ��������� � ������������������� ������������� ������ �� �������������������� ���

• ��� �������� �� "���� �������� ��������� � ��� ����������������

c© B. Moller # �" # Informatik III WS 2011/12

Beispiel 7.3.1 !��� ���� ��� �������

c :

a 7−→ 000

b 7−→ 001

d 7−→ 01

f 7−→ 10

k 7−→ 11

��� ���������� ��� �� ���

•0

ppppp 1IIII

•0

���� 1999 •

0 122

•0 ��

�1//

/ d f k

a b

� ��� ��� c−1(001011011) = c−1(001|01|10|11) =����� ut

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

"�� �� ������ � ��� � �'!�������� ��� � � ��� ���� ����� ����� !� ���� ����������� �����• &�� ��� ����� ����������� ��������� ����� �� ���� ���

c�������� ����• %�� ��� �� ��� ����������� ��� ��� ��� ��� ���� �� ��� ��'������ ������� �� �� ��� ��� �� ������ ���� ���������

• � ��� ���� ����������� &������� ��������� �������� ������������ �� ��� � �'!��������� ���� ��� ����� ��� ������ ��'������ ������� �������������� ������ �������

• ���� ��� ����������� ��� �� ��������� ��� ���� %! �� ������ �� ��� �� ���� ��� ���� �������������

c© B. Moller # �� # Informatik III WS 2011/12

"��� ��������� ������ ���� �� ��� � �������������&��� ����� ������������� ����� �������� � ���� ������ ��� ������� ��� ������������ ������ � � � ��� ���� ����� ���������� ����

Bemerkung 7.3.2������������� ������� �����

"������������ ������ ����� ����������( �� � ���������� ������������ ��� ��� ��� ��� �� ����� � ���� ut

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

Beispiel 7.3.3 "������ ���� �� ��� a, e, n, s, t,t,←↩��������� ��������� ����� ��������(

a e n s t t ←↩

10 15 12 3 4 10 1

��� ��� ��� ��� ���� �� ���� !���� ���

•0

iiiiiiii 1UUUUUUUU

•0

ttttt 1

LLLLL •0

rrrrr 1

NNNNN

•0 ��� 1222 •

0 1222 •0 1444 •

0���

a e n s t t ←↩

←↩

������ ����� "�� � ��� � �'!�������� ������ 11������

������� � � �� �� � ����� �� !���� ut

c© B. Moller # �� # Informatik III WS 2011/12

!�� ��������(��� � � ��� ����� �� ��� �� ��� ����� &��� � � �� ������

����� ���� ���� � ��������������� ��������� �������� '��� �������� ��� ������������ ��� ��� � �'!�������� �������� ������� ���� ������ �� !� ����� ������� ����� ���� � ��� ��� ���'��� ��� ���� ��� ����������������

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

����� ��� �������� � �

Definition 7.3.4 "�� !��� �� ������� ���������� ���� ����������� ����� ��� � ���� &���� � ��%���� � ���� ��� ���� � ��������

��� ������������� ���� ���� ��� ������� ���� �� ���(�� ��� ������ �������������� ���� ����� �� ��� ! ��� �� ���� �������� ��������� �� � ��� �� ���� ������ ����� ���� ������ ������� ����� ����

c© B. Moller # "� # Informatik III WS 2011/12

7.3.2 Konstruktion des gewunschten Codes

� ��� ������������ ������ �� &����� ������� ����� ��� ����(• !������ ��� ������ � �� ���� "��������� ���• � ��� ������ ���� !� ��� �� ������������� ��� �����• � �� ������� ����� ����� !� ��� ��� "������������ ������� ������� ��� &���� ��� �� ��������� ����� !� ���� ����

• � ��� ������ ��� ��������� ������ ��� �����

c© B. Moller # "$# Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

Beispiel 7.3.5��� ���� ����� ���� � ��� �������

c ��

!������ �� ���• ��� ���� ������ ��� ������ ��������� ������

s���←↩

�� ��'���! �� ��� ������� ��� ��� � ��� ������ ��� �� �������! ���� ��(

•0 �� 1;;;

s ←↩

• ����� ���� t��� ��� ���� ����� ����� ! ����� ��������� ��'

������������� �� ����������� ��� ������� �������� ������

•0

���� 1>>

>

•0 ��

� 1555 t

s ←↩

��� �� �������4 + 4 = 8�

c© B. Moller # ") # Informatik III WS 2011/12

• �� � ���� � � ���� �� �������18

•0

~~~~ 1:::

•0

1::

: a

•0 ��

� 1555 t

s ←↩

• ��� ������ ��������� ������ �������n ���t� �������� ����� ����� ��������� �� �������

22 ��� ������� ����• ����� � � � � ��� 3

������( e� ���n't'! �������� �����! ���

c© B. Moller # "� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

• � ���� �����&���� ��� ��� ������������� � ����������������� �� ��� �� ������� ������(

•0

qqqqq 1LLL

LL

•0

���� 1::: •

0 155

•0

����

� 1555 e n t

•0

1::

: a

•0 ��

� 1555 t

s ←↩

ut

c© B. Moller # "" # Informatik III WS 2011/12

Huffmans Algorithmus:� ��� ��� ������

a1, . . . , an �� �

{T1, . . . , Tn} �� ��� ��������� ��� f(Ti)

��� �� ������� ��ai

����������������W = Forest(T1,...,Tn) ;

for (k = 1 ; k <= n ; k++)

{ waehle in W Baeume S und U mit minimalen f-Werten ;

fuege S und U zu einem neuen Binaerbaum T zusammen,

mit einer neuen Wurzel, und setze f(T) = f(S)+f(U) ;

W = W.minus(S,U).union(T) ;

}

��"��� ��� &������ ���W������������ ������ � � ������� "�����

� ���� �� ��� �� ��

c© B. Moller # "� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

7.3.3 Korrektheit

��������������� ��� ����� ��� "��������� � �� �� ������� ���������� ��� ��� �� ���� ������������ ��������� ������������ ��� ��������� �� !� ���� ������������• ������� ����� ��� ��������� !��� �� ��

B� ������ !� ���� ��

���� � �� ������ ��� ����� ������ ��� ��1, . . . , n

���������������� ���� ���� �W = {T1, . . . , Tn}

������ �����• � �� ������������� ��� B ◦ W

��� ! ��� ��� ��������� �������

B������ � � ! ����� !�����������

i��������! ��

Ti ∈ W������� �����

• � � � �� ���� B��� ��� ��� �������������� ��� Ti

��� ��� ��'��������� � ���� �������� � �� ��� B ◦ W

� � ������ ��� �'����������� !����

c© B. Moller # "� # Informatik III WS 2011/12

• ��� ���������T = B ◦ W

���� ����� ! ��T� � ���� � � � �

(B, W)���� �������� ��

T� ��

• ��� ������ ��� ������ �W

�������� ����� ! ���T� �� ��'

���� W v T� ���� �� ����� ��������� !��� �� �� B

����� �� �� (B, W)

������� �� T����

• ���� ��������� � �� � !� ��� ��W��

T ��������� ��� �� �

�� � �� �������� ���� !� ���� ��� !� �������T ��� ����� '�������� �������������������

T��������� ����� �����

c© B. Moller # "� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

� ��� �� ��� ��� ��� ������ ���������� I���� ���� ��

���������(∃ %! T : W v T .

� � �� ���� ��� ��� � ����������� �� ��� ��� �� ���� ���� ������������ �� ������� ����� �

Initialisierung:

I��� �� ���

for'&������� ����� ��� �� � T����� ���������

%!� ��� ����� ��� "��������� ��� ���� �� ����������

c© B. Moller # "� # Informatik III WS 2011/12

Invarianz:

• "� ���� I ��� %! T ��� ������� (B, W)�� T �

• &����S = Ti���U = Tj

�������� �� f'������ ��W���� ���

• ��� ������ ���� ����� � �� T� �� T ′ ����� �� ������ � ���

� �� ��� ������ �� Ti���

Tj

��T ′ !������ � ��� �� �����

���� ���I���

T ′ �� �� T����

• �� ������� ��� ������dl��� ����� ��� ! ����

l��

B�

c© B. Moller # "� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

Fall 1: di��� dj

���� ������� � ��� � � ����������� �������• � �� ������ ��� � �� ����� !�� ������ ��� ����� ���

�������������� ��B��� !� ����

i���

j �� !�������� �����• ��� ����������� ! �� ���

B ′ �� �� ��� ��� T ′ =�� B ′ ◦ W���

%!� � � �� I���

T ′ �� �� T����

c© B. Moller # �� # Informatik III WS 2011/12

Fall 2: &�� ��� di����� � ��� �� B�

• � �� ���� �� ��� ! �� l� ��� �� ����� dl

���di < dl � B ′′

�������� ��B��������� ������ ��

l���

i�• ��

B ′′ ◦ W���� ��� ��� ���

f(Ti)'� �� ���� ����������� ��������

Ti������ ��

dl −di!��� � ������� �����������

��� ������ ��Tl��

dl − di

������� �����• !�� ������ ������ �� � ����� ���� � ��� ��� ��� ��� ���������� ������� ��

f(Ti) · (dl − di) − f(Tl) · (dl − di) = [f(Ti) − f(Tl)] · (dl − di) ≤ 0 .

���� ������ ��� ���≤ 0� � Ti f'����� ���� �� ���� ��� ������

> 0 � ��� � �� l��• �� ��� ��� ��� ������ ��� ��������

B ′′◦W����� �����������

• � ��� ����� T��������� � �� ��� ��� ������ ����� �

c© B. Moller # �$# Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

• �� ���B ′′ ◦W

������ ��� %! �� B ′′ � ������������ ���

������� ����� ���i� � ��

B ′′ � ��� � ������• ��� ��� ���� ��� ���������� ���� j �� ���������� &������������ � ���� � � �� � ��

B ′ ���� ��� T ′���������� ������

�������• ��� ���

W =�� W\{Ti, Tj} ∪{ •0 ��

� 1>>>

Ti Tj

}

.

• ������ ��������B ��

B ′ ����� &����������� !� ���� i���

j���

�����������������������• � �� ��� (B, W)

���� ���� ������� ��T ′� ����� ���� �

W��� �� ��� ���� ��� � �� ���

W� �� ��� &������������� ��

�����������• �� ��� � ��������

I���

T ′ �� �� T �c© B. Moller # �) # Informatik III WS 2011/12

Schlussbetrachtung:

• !���k'��� &������������� �� ��� |W| = n − k + 1�• !�� &������������������� ��� k = n

� �|W| = 1�

• � ��� � � � � � �� I������������B

��� ����! ��� ������� ������ ��� �������������� ��� �� ������! ���

• "������� ������ ! ���� ����� T1������ ����� %!� ����W ��'

����� � �� �� ��� � �����%!� ut

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

7.3.4 Implementierung

� � �� � ��� !� ��� �� ��������'� �� ��� �����≤ n�• ���� ��( ���� buildheap� n − 2 insert'%��� ����� ���� ������ ��������� !� ��� ��� 2(n − 1) deletemin

�� � ������ ��O(n · �n)�

• ��� ��� �� ���������� ��� ���� ������ ���������� �� n� �

� �� � � ��� ���� �������� ����� �� �� ��� � �� �������������� ��(O(n2)

��• ����� �� ��� ��� ���� �� ���� ��������������� ������������� ������������������ ������������� �������

c© B. Moller # �" # Informatik III WS 2011/12

7.4 Eine Packaufgabe (Bin Packing)

7.4.1 Aufgabenstellung

• ������������ ������ !��� ��� �������� ����� ������� ������• �� ����� ��� n %������ ��� ������ s1, . . . , sn

��� si > 0���

����� �� !��� ���� � ��� ��� �������• � ��� ���� ������������� � �� ��� !��� �������� 1

��� ������%����������� �� ������

]0, 1]������

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

Beispiel 7.4.1 ��� %����������� ����� 0.2, 0.3, 0.7, 0.3, 0.3, 0.8���

0.4�� �� ��� ��!����������� �

�� ��� ��! ����� �����

������������� �

�� �� ����� ��� �����!

����� ��� ���� ���� ut

c© B. Moller # �� # Informatik III WS 2011/12

"� ��� ������ ���� ��������� ��������� ��� ���� ��� ��� ���� ���� ����������� ����

��� ��������������� ���� � � � ��� ���������� ��� ����� ������ ��%������ ��������� ��� � �� ���� ������ ���� �� ����• �������(��� %������ ���� �� !����� � �� ����� ��� ����• �������(��� %������ ������ � �� ��� � �� ��������� ��� ��������� �� ���� ���� ���� ���� ������ � ����� ���������� ���� �'��� ���� ��� �������

�� ������� � ������ �� �� !��� ���� ������� � ������ ������� � � ����� � ���� �� ��� %�������������

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

7.4.2 On-line-Verfahren

��� ���� ����� �������� "��� ������� ��� ��� ������ ����� ������������� ��%�������������• ���������( "�� �'���'���� ���� � �� �� ����� �������� ����� ��� ��� � ��� ��������� ��� ��������� ��� "��� ����� ��� �����

• !��� ����m ∈ ����� ���0 < ε < 0.1

������ ���� "��� ������

I1 : m %������ ��� ����� 12

− ε

I2 : I1����� ��m %������� ��� ����� 1

2+ ε

c© B. Moller # �� # Informatik III WS 2011/12

• ����I1���� m

2

�� ���� ���� � ����I2��������

m��� ��� �����

��� ������ %����� �� ������ ������• "������ ����� � � ����

I2���� �������� � ���� ����� �������

%����� ����� ����� � ���� ���������� ������� ��� � �� I1��� �� �����������������

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

Satz 7.4.2���� ����� �'���'���� ����A �� ������ ���� �� ����

�� "��� ������� ��� ���������� 4/3 ��� ������ ���� ��� ����� � �� ������Beweis:

��� ��� (∗)(A � � ������ < 43%���

• A�������� ����

I1 k�� ����� �� ��� k < 4

3· m

2= 2

3m�

• ����I2����

A����� �� ������� ���������

2k %���������� ����� ���������

2m−2k %������������ ����� �������� ������ �'�����

• ������ �� �� ����A����

I2����������

k + 2m − 2k = 2m − k�� �����

• �����(∗) ���� 2m−k < 4

3m���������� 2

3m < k�������������

• ������ �����������( ���� I1���� ���� ���� � �� I2

��������� ���������� ut

c© B. Moller # �� # Informatik III WS 2011/12

"�� ���������� ����� ������ ����� ���� �� ���� ���

NEXT-FIT (NF): � ��� � � �� ����� %����� �� ��� ������������� � ����� ����������� ������� ��������� ������

� ����� ���� ��� ���� �� �� ���� �������� ��� ����� ������������ ����

Satz 7.4.3 �� �� ���� �� � ��������� 2 ·%���� ����� � ���� ��� 2 ·%��− 2�

c© B. Moller # �$# Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

Beweis: �� �������� ���� ���� �������� "��� ����� k �� �����• � ��� ��� � ��� ���� j+ 1 ����� ���� �� ���� ���� j � ����� ��� ��� ��� ���� ����� ��� � > 1

�������������• �� ��� ��� ��� ����� � ���

k�� ����

> k2

���� k−12��� � �����

k��� �� ��� ����� �� �����

• �� �� ���� ���� ���� � � �����> k

2

���� k−12

�� �����• �� �� ��� ���� ��� � n �� %�������� ��� ����� 4

���� � ����• ��� "��� ����� I

������� ��n %�������� ������������������� 1

2

��� 2n�

• %���� � � �����( %������ ��� ����� 12

� ������� ��� ��������n2

��� ����� 2n

�� ����� � �����• �� ��� n

4+ 1

���� �

c© B. Moller # �) # Informatik III WS 2011/12

• � ����� ���� �� ��� ����� %����� ��� ����� 12

����� ������ ���� ������� �� ���� �

n

2= 2 · (n

4+ 1) − 2

�� ����� ut

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

!����� ��� ��� �� ������ ��� ��� ������� ��(• ���������� ���� ����� %����� ��� ���������� �� ���� ��� ����� ���

• � ��� �� �� ��� ��������� ��������� ������� ���• ���� �� ������� � �� ��������� ����� � �����

���� ��� ����� �� ���� �������� � � ��� ��� � ������ O(n2)� �

����� � ���� ������ �������� ������� �� ��� ���� &��� ��� � �� 1.7 · %��� ������������������� ������ ��� ��� ��� ������� �� �

1.02 · %��� �� ��� ���������� ���� �� ������ ���� ��� ���������

c© B. Moller # �" # Informatik III WS 2011/12

7.4.3 Off-line-Verfahren

• � � � �������� ��� �'���'���� ���� ���� � ���� � �� ����%������� ��� ��� � ������ ����� ��� ��������������� �������

• &������ � ��� ��� %������ ��������� � �� ����� ����� �� ����O(n · �n)

������� � �� �����'��� ��• ���������� ���� ����� � �First-Fit-Decreasing (FFD)�• ����� ��( ������ ����� ��� � ����� ��

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

&��m��� ���� � � ����� �� s1 ≥ . . . ≥ sn

��� ��������%��������� ����� � ����� ��� ��� ���� ���

m���� ��

��������� ����� ������������

Lemma 7.4.4 !�� ���� ��� � %������ �� "��� �� ���� ���������≤ 13�

c© B. Moller # �� # Informatik III WS 2011/12

Beweis:���������� � �

i'�� %����� ��� � � ����� %������ � � ������� "��� � ���� ����������� � � � ��� ������m + 1�• ��� ���( si > 1

3�

• �� ���� ���s1, . . . , si−1 > 1

3

� ���� ��� �� ���� k1, . . . , km���'

� ��� �� ��������� ���� %���������� ������ ��� ���• ��

��������� "� ���� ��� j ≤ m� � � �� ��� �� ����

k1, . . . , kj��

��� %����� ��� kj+1, . . . , km�� ���� %������ ���� ����

• ���������� ���(���� x < y ≤ m

���� �� kx���� %������ ���������

x1, x2

� ���ky

��� ��� %����� ��� ����� y1 �• � ������� x1

��y1� ����� ��� x2

��si �

• �� ���x1 ≥ y1

���x2 ≥ si,

���� 1 ≥ x1 + x2 ≥ y1 + si �• � �� ��� �� ��� si

��� � �� �� ky��� ��� ����� ����� �����

"��� � ����(������������

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

• ��������� ���������������s1, . . . , sj

����������������� ��������� ���� �� ��� ��� ���� ��� ������� ����

• !�� ������ � ����� ���� ���2(m − j) + 1 %������ sj+1, . . . , si�� �������� �� ����

k1, . . . , kj

� ���� ���� �� ��� ��� ��� ���� ����� ��� ����

• �� ���� ������ ����� ���� ��� ����������%������ ��m−j�� �����

• !�� ����� ��������� ��2l + 1 %������� �� l

�� ���� ������� � ���� ���������� ���� %������ ���� ��� ���� ��������'��� &����� �����������

• � ��� �����%������> 13

������ ������ ������������������� ���si ≤ 1

3�

• � ��� sx ��������� ������� ����� ������

sx���

x ≥ i�� �����

"��� � ���� ����� ���� � �����≤ 13� ut

c© B. Moller # �� # Informatik III WS 2011/12

Lemma 7.4.5���� ��� ���������

m − 1 %������ ��"��� �� �����

Beweis:��� ���(����������m %������ ���� �� "��� �� �����

• !��� ����m� ����� ������

x1, . . . , xm �• ��� ����� ��� �� ���� ki

����� ������ ��� ��� ���� hi�������

� �� ���(n∑

i=1

si

≥m∑

i=1

hi +

m∑

i=1

xi

=

m∑

i=1

(hi + xi)

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

• ��� ����� ������ ����� ������ ����� � ���m��� %������ �� ���

"��� �� ���� ���� ����� �������• xi

� ��� ����� ��ki

����� �� ��� ��� ����� ��� ����� � ���hi + xi > 1�

• "� ���n∑

i=1

si >

m∑

i=1

1 = m .

• ������������� � m� � %������ ���� ��� n∑

i=1

si ≤ m� � ���

������������ ut

c© B. Moller # �� # Informatik III WS 2011/12

Satz 7.4.6 (Zusammenfassung)����� ���� ���������

43m + 1

3

�� ���� ���������� ���� m ��� ���� � � ����

Beweis: � �� ���� ��!�� ���� ��� ��� "��� �� ���� ���������m − 1 %������� ��� � �� ���� ��!�! �� ��������� 1

3

��� �����• �� � �������������� ���� ������ %������ �� ����� � �����• � ��� ������� ��������� ⌈

m−13

≤ m+13

"��� �� ����� � �����'� ��

m + m+13

= 43m + 1

3� ut

c© B. Moller # �$# Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

"��� ��� ���� �� ��� ������� � �� ������ ���������119· %��+ 4

�� ���� �������"� ���� ��� ����� ���� ��� ��� 11

9· %���� ���� �� �����

Beispiel 7.4.7 •"��� ���� ��� ������� �� ��

6m %������� ��� ������ 12

+ ε�

14

+ 2ε ��� 14

+ ��� 12m %������� ��� ����� 1

4− 2ε�

• "��� ���� � � ����� �� ����9m

�� ����( ��� ������ 6m���'

� ����� ���%����� �������� 14−2ε

� 14+ε

��� 12+ε� ��� ��������

�� ���� %������ ��� ����� 14

− 2ε ��� ���� ��� ����� 14

+ 2ε�

c© B. Moller # �) # Informatik III WS 2011/12

• � ����� �� ���� ��� 11m�� ����(

� ����� ������6m���� �� ���%����� ��� ����� 1

2+ε ��� 1

4+2ε

�� �� ��� �� ������

2m�� ���� %������ ��� ����� 1

4+ ε

� ��� �� ��� ������ 3m�� ���� %������ ��� ����� 1

4− 2ε� ut

c© B. Moller # �� # Informatik III WS 2011/12

Gierige Algorithmen (Greedy Algorithms)

�� ��� �� ��� ����� � ���� ��� ��� ���� ���(

&��� ��� %����������� ������� ��� ����� � � ������ ]0, 1]��������

���� ��� "�� ���������� ���� ��� � ��� "��� �� ���� ��Θ(√

n)�

c© B. Moller # �" # Informatik III WS 2011/12