Upload
halien
View
214
Download
0
Embed Size (px)
Citation preview
Kapitel 1 Divide-and-Conquer Mergesort
1.3 Erinnerung: Mergesort
Um n Zahlen/Objekte a1, . . . , an zu sortieren, geht derMergesort-Algorithmus so vor:
Falls n ! n0:Sortiere mit einem naiven Algorithmus (z. B. Insertion Sort).
Sonst: k := "n/2#.Sortiere a1, . . . , ak (erste Halfte) rekursiv, Ergebnis b1, . . . , bk ;
sortiere ak+1, . . . , an (zweite Halfte) rekursiv, Ergebnis bk+1, . . . , bn.
”Mische“ die Folgen b1, . . . , bk und bk+1, . . . , bn zu einer sortierten Folgezusammen
”Reißverschlussverfahren“ – Aufwand: ! n $ 1 Vergleiche.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 42
Kapitel 1 Divide-and-Conquer Mergesort
Analyse uber”Rekurrenzungleichungen“:
Wir zahlen nur Vergleiche.
C (n) = Anzahl der Vergleiche beim Sortieren von n Eingaben,schlechtester Fall.
C (1) = 0, C (2) = 1, C (3) = 3.
C (n) = C ("n/2#) + C (%n/2&) + n $ 1.
Behauptung: C (n) = n%log n& $ (2!log n" $ 1).
n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 . . .C (n) 0 1 3 5 8 11 14 17 21 25 29 33 37 41 . . .
Beweis: Tafel.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 43
Kapitel 1 Divide-and-Conquer Mergesort
Satz 1.3.1Fur die Vergleichsanzahl im schlechtesten Fall bei Mergesort gilt:
C (n) ! n log n.
Beweis: Tafel.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 44
Kapitel 1 Divide-and-Conquer Master-Theorem
1.4 Das Master-Theorem
Wir betrachten Rekurrenzungleichungen der folgenden Form:
B(n) !!
g , falls n = 1a · B(n/b) + f (n) , sonst.
Dabei: a ' 1 eine ganze Zahl, b > 1 ist eine Konstante, f (n) ist einemonoton wachsende Funktion.
Falls n/b keine ganze Zahl ist, sollte man sich an Stelle von B(n/b) z. B.B(%n/b&) denken.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 45
Kapitel 1 Divide-and-Conquer Master-Theorem
Ergibt sich bei Divide-and-Conquer-Algorithmus mit:
Trivialer Basisfall (Große 1) hat hochstens Kosten g ,
aus Instanz der Große n > 1 werden (”divide“) a Teilinstanzen der Große
n/b (passend gerundet) gebildet,
es erfolgen a rekursive Aufrufe,
und die a Losungen werden kombiniert.
Kosten fur das Aufspalten und das Kombinieren: f (n).
O.B.d.A.: B(n) monoton wachsend. – Sonst definiere:
B(n) = max{B(i) | 1 ! i ! n}.
B(n) ist monoton und erfullt die Rekurrenzungleichung.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 46
Kapitel 1 Divide-and-Conquer Master-Theorem
Vereinfachende Annahmen (nicht wesentlich):
n = b!.
b > 1 ist ganzzahlig.
Level 0: Wurzel, hat Eintrag f (n) und hat a Kinder auf Level 1.
Knoten v auf Level i < ! hat Eintrag f (n/bi ) und hat a Kinder auf Leveli + 1.
Knoten auf Level ! sind Blatter, sie haben Eintrag g .
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 47
Kapitel 1 Divide-and-Conquer Master-Theorem
f (n)
f (n/b) f (n/b)
f (n/b2) f (n/b2) f (n/b2) f (n/b2)
g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g
!
f (n)
a · f (n/b)
a2 · f (n/b2)
a! · g
a
a
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 48
Kapitel 1 Divide-and-Conquer Master-Theorem
Lemma 1.4.1Wenn v ein Knoten auf Level i ist, dann gilt:B(n/bi ) ! Summe der Eintrage im Unterbaum unter v .
(Beweis durch Induktion uber !$ i .)
Also: B(n) ! Summe aller Eintrage im Baum.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 49
Kapitel 1 Divide-and-Conquer Master-Theorem
Auf Level i gibt es ai Knoten mit Eintrag f (n/bi ).
Summation liefert:
B(n) !"
0#i<!
ai · f (n/bi ) + a! · g .
Erster Term B1: Beitrag zu Gesamtkosten aus dem Inneren des Baums.
Zweiter Term B2: Beitrag von den Blattern.(Algorithmisch: Die a! Basisfalle.) – Leicht:
B2(n) = a! · g = (blogb a)! · g = (b!)logb a · g = nlogb a · g .
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 50
Kapitel 1 Divide-and-Conquer Master-Theorem
Erster Term: B1(n) =#
0#i<! ai · f (n/bi ).
3 Falle, je nach Verhalten des Gesamtaufwandes ai · f (n/bi ) auf Level i ,fur i = 0, . . . , !$ 1.
Intuitiv:
1. Fall: ai · f (n/bi ) wachst mit i an.
2. Fall: ai · f (n/bi ) bleibt in etwa gleich uber alle i .
3. Fall: ai · f (n/bi ) schrumpft mit i .
Genaueres folgt.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 51
Kapitel 1 Divide-and-Conquer Master-Theorem
1. Fall: f (n) = O(n") mit b" < a.
Die Beitrage aus den unteren Baumebenen (kleine Instanzen) dominieren,nicht wegen ihrer Große, sondern wegen ihrer Anzahl.
f (n)
f (n/b) f (n/b) f (n/b)
f (n/b2) f (n/b2) f (n/b2) f (n/b2) f (n/b2) f (n/b2) f (n/b2) f (n/b2) f (n/b2)
g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 52
Kapitel 1 Divide-and-Conquer Master-Theorem
Wir benutzen immer die Summenformel fur geometrische Reihen:
(()"
0#i<!
qi =q! $ 1
q $ 1, fur q ' 0, q )= 1.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 53
Kapitel 1 Divide-and-Conquer Master-Theorem
B1(n) ="
0#i<!
ai · f (n/bi )
= O$ "
0#i<!
ai ·% n
bi
&"'
= O$n" ·
"
0#i<!
% a
b"
&i'
= O
(n" · (a/b")!
(a/b")$ 1
)
= O
(n" · a! · 1
(b!)"
)
= O(a!).
Also: B(n) ! B1(n) + B2(n) = O(a!) = O(nlogb a).
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 54
Kapitel 1 Divide-and-Conquer Master-Theorem
1. Fall: f (n) = O(n") mit b" < a.
Typische Beispiele:
Karatsuba-Algorithmus, Strassen-Algorithmus.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 55
Kapitel 1 Divide-and-Conquer Master-Theorem
2. Fall: f (n) = O(nlogb a).
f (n/bi ) wachst mit n/bi , i = !$ 1, . . . , 0, hochstens mit einer Rate, diedurch das Schrumpfen der Große der Baumebene ausgeglichen wird.
Der Gesamtaufwand ist beschrankt durch den Aufwand fur die Ebenedirekt uber den Blattern, multipliziert mit der Anzahl der Levels.
f (n)
f (n/b) f (n/b)
f (n/b2) f (n/b2) f (n/b2) f (n/b2)
g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 56
Kapitel 1 Divide-and-Conquer Master-Theorem
B1(n) ="
0#i<!
ai · f (n/bi )
= O
*
+"
0#i<!
ai ·% n
bi
&logb a
,
-
= O
*
+"
0#i<!
ai · nlogb a
ai
,
-
= O%! · nlogb a
&.
Also:B(n) ! B1(n) + B2(n) = O(! · nlogb a) + O(nlogb a) = O((log n) · nlogb a).Typische Beispiele: Mergesort, Binare Suche.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 57
Kapitel 1 Divide-and-Conquer Master-Theorem
3. Fall: f (n) = !(n"), mit b" > a
UND
(Regularitatsbedingung:f wachst stets mit der entsprechenden Rate)Es gibt ein c < 1 mit: f (n) ' (a/c) · f (n/b).Wenn man die Große des Inputs von n/b auf n erhoht, wachsen die Kostenim Knoten von f (n/b) auf f (n), mindestens um den Faktor a/c > a.
f (n) wachst sehr rasch mit n, so dass der Beitrag der oberen Baumebenenund insbesondere der Wurzel uberwiegt.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 58
Kapitel 1 Divide-and-Conquer Master-Theorem
f (n)
f (n/b) f (n/b)
f (n/b2) f (n/b2) f (n/b2) f (n/b2)
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 59
Kapitel 1 Divide-and-Conquer Master-Theorem
Aus der Regularitatsbedingung gewinnen wir:
f (n/b) ! c
a· f (n)
f (n/b2) !%ca
&2· f (n)
...
f (n/bi ) !%ca
&i· f (n) , also:
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 60
Kapitel 1 Divide-and-Conquer Master-Theorem
B1(n) ="
0#i<!
ai · f (n/bi )
!"
0#i<!
ai ·%ca
&i· f (n)
="
0#i<!
c i · f (n)
= f (n) ·"
0#i<!
c i
= O(f (n)),
weil#
0#i<! ci = 1$c!
1$c = O(1).
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 61
Kapitel 1 Divide-and-Conquer Master-Theorem
Satz 1.4.2 (Das Master-Theorem)
Es gelte B(n) !!
g , falls n = 1a · B(n/b) + f (n) , sonst,
wobei b > 1 und a ganzzahlige Konstante sind.Dann gilt fur n = b!:
1 Falls f (n) = O(n") mit " < logb a, dann istB(n) = O(nlogb a).
2 Falls f (n) = O(nlogb a), dann ist B(n) = O(nlogb a · log n).3 Falls f (n) = !(n") mit " > logb a und f (n) ' a
c · f (n/b), fur c < 1konstant, dann ist B(n) = O(f (n)).
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 62
Kapitel 1 Divide-and-Conquer Master-Theorem
Erweiterungen: Dieselben Formeln gelten fur:
Beliebige n, nicht nur n = b!.
Verallgemeinerte RelationB(n) ! a · B(n%) + f (n), n% ! %n/b&+ d .
b > 1 nicht ganzzahlig.
Analoge untere Schranken.
Genaueres im Buch von Cormen, Leiserson, Rivest und Stein.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 63
Kapitel 1 Divide-and-Conquer Quicksort
1.5 Quicksort (Hoare1) – Neue Analyse
Input: Folge/Array (a1, . . . , an). – Falls n = 1, Ausgabe (a1).
Falls n = 2, sortiere mit einem Vergleich. – Sonst:
Wahle Element x * {a1, . . . , an} als”Pivotelement“ oder
”partitionierendes Element“.(Z.B.: x = a1 oder x = ai mit i zufallig.)
Zerlege (a1, . . . , an) in eine Teilfolge b1, . . . , bp$1, alle ! x , in das Elementx , und eine Teilfolge cp+1, . . . , cn, alle ' x .
Sortiere diese beiden Folgen rekursiv,Ergebnis (d1, . . . , dp$1) und (ep+1, . . . , en).
Ausgabe: Folge/Array (d1, . . . , dp$1, x , ep+1, . . . , en).
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 64
Kapitel 1 Divide-and-Conquer Quicksort
1 C.A. R. Hoare (&1934), brit. Informatiker,erfand Quicksort & Korrektheitskalkul.
”I conclude that there are two ways of constructing a software design: Oneway is to make it so simple that there are obviously no deficiencies and theother way is to make it so complicated that there are no obviousdeficiencies. The first method is far more di"cult.“
(Dankesrede fur den Turingpreis 1980)
”I think Quicksort is the only really interesting algorithm that I’ve everdeveloped.“
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 65
Kapitel 1 Divide-and-Conquer Quicksort
Analyse: Wir nehmen an, alle Schlussel sind verschieden. Wir wahlenimmer das erste Element als Pivotelement – betrachten alsodeterministisches Quicksort.
Weiter nehmen wir an, jede der n! Anordnungen sind gleich wahrscheinlich(Wahrscheinlichkeit 1/n!),
und berechnen die erwartete Anzahl A(n) von Vergleichen.
Falls n ! 1: kein Vergleich. Falls n = 2: 1 Vergleich. – Sonst:
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 66
Kapitel 1 Divide-and-Conquer Quicksort
Es seien b1 < · · · < bn die Eingabe-Elemente in sortierter Reihenfolge.
Es ist klar, dass bi und bj maximal einmal miteinander verglichen werden.
(Wenn bi und bj verglichen werden, ist eines der beiden Pivotelement undwird nie mehr mit etwas anderem verglichen.)
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 67
Kapitel 1 Divide-and-Conquer Quicksort
C := Gesamtanzahl der Vergleiche.
(Zufallsvariable, abhangig von der zufalligen Anordnung am Anfang.)
SeiC =
"
1#i<j#n
Xij ,
wobei
Xij =
!1 , falls bi und bj verglichen werden0 , sonst.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 68
Kapitel 1 Divide-and-Conquer Quicksort
Daraus:E(C ) =
"
1#i<j#n
E(Xij) ="
1#i<j#n
Pr(Xij = 1).
(Das folgt aus der Linearitat des Erwartungswertes, normalerweisegeschrieben als E(X + Y ) = E(X ) +E(Y ).)
Was ist Pr(Xij = 1) = Pr(bi und bj werden verglichen)?
Wir beobachten den Algorithmus.
Klar: Im Zuge der Rekursion werden durch Aufspalten immer kleinereTeillisten gebildet.
Solange kein Element von Iij = {bi , bi+1, . . . , bj} Pivotelement wird,landen alle Elemente von Iij immer in derselben Teilliste (alle großer alsPivot oder alle kleiner als Pivot).
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 69
Kapitel 1 Divide-and-Conquer Quicksort
In dem Moment, in dem zum ersten Mal ein Element von Iijpartitionierendes Element wird, fallt die Entscheidung:Wenn dies bi oder bj ist, werden bi und bj verglichen.Wenn dies ein Element von {bi+1, . . . , bj$1} ist, nicht(jetzt nicht, aber auch nicht spater, da sie in verschiedenen Teillistenlanden).
Weil alle Elemente in Iij die gleiche Wahrscheinlichkeit haben, zuerst alsPivotelement gewahlt zu werden, gilt
Pr(bi und bj werden verglichen) =2
|Iij |=
2
j $ i + 1.
Also:
E(C ) ="
1#i<j#n
2
j $ i + 1.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 70
Kapitel 1 Divide-and-Conquer Quicksort
"
1#i<j#n
2
j $ i + 1=
"
1#i#n
"
i<j#n
2
j $ i + 1
= 2 ·"
1#i#n
"
2#k#n$i+1
1
k
! 2 ·"
1#i#n
"
2#k#n
1
k
= 2 · n · (Hn $ 1)
! 2 · n · ln n= (2 ln 2) · n · log n< 1,3863n log n.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 71
Kapitel 1 Divide-and-Conquer Quicksort
Dabei ist Hn = 1 + 12 + · · ·+ 1
n * [ln n + 12 , ln n + 1]
(n-te harmonische Zahl).
Satz 1.5.1Die durchschnittliche Anzahl von Vergleichen von Quicksort auf einerEingabe aus n verschiedenen Zahlen, die zufallig angeordnet ist, isthochstens
2 · n · (Hn $ 1) < 1,3863n log n.
Fur die, die es genau wissen wollen:
E(C ) = 2(n + 1)Hn $ 4n = (2 log2 e)n log n $#(n).
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 72
Kapitel 1 Divide-and-Conquer Quicksort
Variation:”Randomisiertes Quicksort“.
Das Pivotelement wird jeweils zufallig gewahlt.
In diesem Fall ist die gleiche Analyse anwendbar.
Aber: Es gibt keine worst-case-Inputs mehr.
Satz 1.5.2Wenn man das Pivot-Element stets zufallig wahlt, ist auf einer beliebigen,festen Eingabe aus n verschiedenen Zahlen die erwartete Anzahl vonVergleichen, die Quicksort ausfuhrt, hochstens
2 · n · (Hn $ 1) < 1,3863n log n.
(Siehe hierzu:”Randomisierte Algorithmen“.)
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 73
Kapitel 1 Divide-and-Conquer Selektionsproblem
1.6 Das SelektionsproblemGegeben ist eine Folge (a1, . . . , an) von n Objekten aus einer totalenOrdnung (D, <) (in Array oder als Liste),sowie eine Zahl k , 1 ! k ! n.
O.B.d.A.: Alle Eintrage verschieden.
Aufgabe
Finde das Element der Folge, das Rang k hat, d. h. ein Objekt x in derListe mit |{i | ai ! x}| = k .
Spezialfall: Der Median einer Folge mit n Eintragen ist das Element mitRang %n/2&. Median({2, 4, 7, 9}) = 4, Median({4, 7, 9}) = 7.
Einfache Losung: Sortiere, mit Ergebnis (b1, . . . , bn), nun wahle x = bk . –Kosten: n log n Vergleiche, Zeit O(n log n).
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 74
Kapitel 1 Divide-and-Conquer Selektionsproblem
Zunachst:Ein randomisierter Algorithmus fur das Auswahlproblem.
Quickselect (Hoare)
Ansatz: Wie bei Quicksort.
Gegeben: Folge (a1, . . . , an), Zahl k , 1 ! k ! n.
O.B.d.A.: Die ai sind verschieden.
Falls n = 1, ist nichts zu tun.
Falls n = 2, sortiere mit einem Vergleich, Ergebnis (b1, b2), gib Element bkzuruck.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 75
Kapitel 1 Divide-and-Conquer Selektionsproblem
Falls n ' 3:
Wahle ein Element x aus {a1, . . . , an} als partitionierendes Elementzufallig.
Zerlege (a1, . . . , an) mit n $ 1 Vergleichen in eine Teilfolge b1, . . . , bp$1,alle < x , in das Element x , und eine Teilfolge cp+1, . . . , cn, alle > x .
1. Fall: k = p. Das Ergebnis ist x .
2. Fall: k < p. Finde (rekursiv) in (b1, . . . , bp$1) das Element vom Rangk .
3. Fall: k > p. Finde (rekursiv) in (cp+1, . . . , cn) das Element vom Rangk $ p.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 76
Kapitel 1 Divide-and-Conquer Selektionsproblem
Korrektheit: Klar.
Zu analysieren: (Erwartete) Rechenzeit.
Wir analysieren die erwartete Anzahl von Vergleichen.
Vorgehen: Wie bei Quicksort. Wieder ist die erwartete Anzahl vonVergleichen entscheidend.
Eingabezahlen, sortiert: b1 < · · · < bn.
Ck ="
1#i<j#n
Xij ,
wobei
Xij =
!1 , falls bi und bj verglichen werden0 , sonst.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 77
Kapitel 1 Divide-and-Conquer Selektionsproblem
Was ist E(Xij) = Pr(Xij = 1) = Pr(bi und bj werden verglichen)?
1. Fall: k ! i < j : Es kommt darauf an, ob bi oder bj vor allen anderenEintragen in {bk , . . . , bj} Pivot werden.
Pr(Xij = 1) = 2j$k+1 .
2. Fall: i < k < j : Es kommt darauf an, ob bi oder bj vor allen anderenEintragen in {bi , . . . , bj} Pivot werden.
Pr(Xij = 1) = 2j$i+1 .
3. Fall: i < j ! k : Es kommt darauf an, ob bi oder bj vor allen anderenEintragen in {bi , . . . , bk} Pivot werden.
Pr(Xij = 1) = 2k$i+1 .
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 78
Kapitel 1 Divide-and-Conquer Selektionsproblem
Also:
E(Ck) = 2 ·.
#k#i<j#n
1j$k+1 +
#1#i<k<j#n
1j$i+1 +
#1#i<j#k
1k$i+1
/.
Erste und dritte Summe lassen sich leicht als n $ k bzw. k $ 1 abschatzen(Ubung!).
Zusammen: 2(n $ 1).
In der Ubung zeigen wir:#
1#i<k<j#n
1j$i+1 ! n.
Zusammen: E(Ck) ! 4n.
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 79
Kapitel 1 Divide-and-Conquer Selektionsproblem
Satz 1.6.1Der Algorithmus Quickselect lost das Auswahlproblem und hat eineerwartete Vergleichsanzahl von ! 4n und eine erwartete Laufzeit von O(n).
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 80
Kapitel 1 Divide-and-Conquer Selektionsproblem
Mitteilung:
(a) Eine genauere Analyse ergibt fur " = k/n konstant eine erwarteteVergleichsanzahl von 2(1 + H(") ln 2 + o(1))n < (3.3863 + o(1)) · n.Dabei ist H(") = $" log"$ (1$ ") log(1$ ")die
”binare Entropie“.
Sie liegt zwischen 0 und 1; das Maximum 1 ist bei " = 12 , was der Suche
nach dem Median entspricht.
(b) Die beste Schranke fur die erwartete Vergleichsanzahl bei einemAlgorithmus fur das Auswahlproblem, namlich 3
2n + o(n), erreicht einanderer randomisierter Algorithmus (siehe Vorlesung
”Randomisierte
Algorithmen“).
FG KTuEA, TU Ilmenau E!ziente Algorithmen – Sommersemester 2012 81