Upload
truongliem
View
268
Download
0
Embed Size (px)
Citation preview
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