next up previous contents
Next: Eine untere Schranke für Up: Selektieren und Sortieren Previous: Randomisierter-Median-Algorithmus

Der Schönhage-Paterson-Pippenger-Median-Algorithmus Der SPP-Algorithmus

Definition: Sei $k \in \mathbbm{N}\backslash\{0\}.\ P_k$ ist die folgende partielle Ordnung:



\begin{picture}
(20,44)
 \multiput(0,17)(10,0){3}{\circle*{2}}
 \multiput(0,37)(...
 ...,27){\circle*{2}}
 \put(0,0){\makebox(20,5){$2k+1$\space Elemente}}\end{picture}






\begin{picture}
(25,44)
 \put(0,5){\circle*{2}}
 \put(0,5){\line(1,1){7.5}}
 \pu...
 ...(7.5,42.5){\circle*{2}}
 \put(0,0){\makebox(25,5){$\supseteq P_3$}}\end{picture}



Spezielle Binomialbäume mit ,,Zentren``.
Definition:
1.
Der Baum H0 besteht aus einem Knoten und dieser ist auch das Zentrum.
2.
H2h (h>0) besteht aus zwei H2h-1, deren Zentren durch eine neue Kante verbunden sind. Das Zentrum des H2h ist das kleinere der beiden Zentren der H2h-1.
3.
$H_{2h+1} (h \geq 0)$ besteht aus zwei H2h, deren Zentren durch eine neue Kante verbunden sind, sein Zentrum ist das größere dieser beiden Zentren.



\includegraphics {eps/2_4.eps}




Das Zerlegungslemma:
\includegraphics {eps/2_5.eps}



a)
Hh hat 2h Knoten, es werden 2h-1 Vergleiche benötigt, um Hh zu konstruieren.
b)
H2h kann zerlegt werden in
c)
H2k+1 kann so zerlegt werden, daß die Zusammenhangskomponente des Zentrums genau 2k Knoten $\geq$ dem Zentrum enthält, indem höchstens 2k+1-1 Kanten entfernt werden.
H2k kann so zerlegt werden, daß die Zusammenhangskomponente des Zentrums genau 2k Knoten enthält, die alle $\leq$ dem Zentrum sind, indem höchstens 2k-1 Kanten entfernt werden.
d)
Falls $k \leq 2^h-1$, dann kann H2h so zerlegt werden, daß die Zusammenhangskomponente des Zentrums genau 2k+1 Elemente enthält, von denen k größer und k kleiner als das Zentrum sind ($\Rightarrow P_k$).
Dazu genügt es, höchstens 3k+2h Kanten zu entfernen. Die restlichen Zusammenhangskomponenten sind wieder Hi.

Bemerkung: Bei jedem Konstruktionsschritt wird ein Vergleich durchgeführt, um zu bestimmen, welcher der beiden Teilbäume das kleinere Zentrum hat. Im Algorithmus von Schönhage, Paterson und Pippenger werden aus Teilstücken Hr größere Bäume Hr+1 zusammengebaut, wodurch schrittweise eine partielle Ordnung auf den Eingabewerten bestimmt wird. Wurde ein Baum H2h hinreichender Größe hergestellt, so wird er durch Zerlegung in einen Baum umgewandelt, der nur noch sein altes Zentrum, sowie k darüberliegende und k darunterliegende Elemente enthält, wobei $k \le 2^h-1$. Im folgenden Beispiel wollen wir H4 zerlegen und wählen k = 3:

\includegraphics {eps/2_30.eps}
Um einen H4 derart zu zerlegen, müssen wir 5 Kanten aufbrechen. Dabei werden drei H0, ein H1 sowie ein H2 abgespalten.
\includegraphics {eps/2_31.eps}
Übrig bleibt die gewünschte Struktur mit k Knoten über dem Zentrum und k unter dem Zentrum, wodurch eine partielle Ordnung auf 2k+1 Eingabewerten bestimmt wurde:


\begin{picture}
(20,44)
 \multiput(0,17)(10,0){3}{\circle*{2}}
 \multiput(0,37)(...
 ...,27){\circle*{2}}
 \put(0,0){\makebox(20,5){$2k+1$\space Elemente}}\end{picture}

Die bei der Zerlegung angefallenen Reststücke werden beim Aufbau weiterer Bäume benutzt. So geht das bereits angesammelte Wissen über die Ordnung der Elemente nicht verloren. Beweis der Teile a) bis d) des Zerlegungslemmas:
a)
Lemma 1: Hr hat 2r Knoten, es werden 2r-1 Vergleiche benötigt, um Hr aufzubauen.

Beweis: In jedem der r Konstruktionsschritte wird die Anzahl der Knoten verdoppelt. Da wir mit einem Knoten beginnen, hat Hr folglich 2r Knoten. Die Anzahl der notwendigen Vergleiche Cr unterliegt folgender Rekursionsgleichung ($r\ge 1$): Cr=1+2Cr-1 und C0=0. Damit folgt sofort Cr=2r-1. $\Diamond$
b)
Lemma 2: Hr kann in folgende disjunkte Bereiche unterteilt werden: Beweis: durch Induktion über r. Induktionsanfang: für H0 gilt die Behauptung. Induktionsannahme: die Behauptung gelte für Hr-1.
1.
Sei r = 2h, h > 0. H2h besteht aus zwei H2h-1, wobei das kleinere der beiden alten Zentren das neue Zentrum z bildet. Wende auf den H2h-1, der z enthält, die Induktionsannahme an. Wir können diesen Unterbaum also in z, sowie H1, H3, ..., H2h-3 (Zentren über z) und H0, H2, ..., H2h-2 (Zentren unter z) partitionieren. Zusammen mit dem H2h-1, dessen Zentrum über z liegt, ergibt sich die Induktionsbehauptung für H2h.
2.
Sei $r = 2h+1, h \ge 0$. H2h+1 besteht aus zwei H2h, wobei das größere der beiden alten Zentren das neue Zentrum z bildet. Wende auf den H2h, der z enthält, die Induktionsannahme an. Wir können diesen Unterbaum also in z, sowie H1, H3, ..., H2h-1 (Zentren über z) und H0, H2, ..., H2h-2 (Zentren unter z) partitionieren. Zusammen mit dem H2h, dessen Zentrum unter z liegt, ergibt sich die Induktionsbehauptung für H2h+1.
$\Diamond$
Wir bezeichnen im folgenden mit H2h- den Baum, der entsteht, wenn wir H2h so zerlegen, daß alle Elemente oberhalb des Zentrums wegfallen. Mit H2h+1+ bezeichnen wir den Baum, der entsteht, wenn wir H2h+1 so zerlegen, daß alle Elemente unterhalb des Zentrums wegfallen.
c)
Lemma 3: H2h- und H2h+1+ haben jeweils 2h Knoten. Bei der Herstellung aus H2h bzw. H2h+1 werden 2h-1 bzw. 2h+1-1 Kanten aufgebrochen. Die wegfallenden Teile haben die Form Hs, s < 2h bzw. s < 2h+1.

Beweis: Durch Induktion über r. Induktionsanfang: für H0 und H1 gilt die Behauptung. Induktionsannahme: die Behauptung gilt für alle Hp, p < r.

1.
Sei r = 2h, h > 0. Wir betrachten die Partitionierung von H2h mit Zentrum z wie in Lemma 2. Die Unterbäume H1, H3, ..., H2h-1 haben ihre Zentren oberhalb von z. Wir trennen sie von H2h, indem wir h Kanten aufbrechen. Die abgetrennten Teile haben offensichtlich die Form Hs, s < 2h. Bei den Unterbäumen H0, H2, ..., H2h-2, mit Zentren unterhalb von z, wenden wir jeweils die Induktionsannahme an, d.h. wir erzeugen H0-, H2-, ..., H2h-2-. Als Ergebnis erhalten wir H2h-. Damit gilt für die Zahl der aufzubrechenden Kanten K-(2h) zur Herstellung von H2h-:

\begin{displaymath}
K^-(2h) = h + \sum_{i=0}^{h-1}K^-(2i)
 \stackrel{I.A.}{=} h + \sum_{i=0}^{h-1}(2^i-1)
 = \sum_{i=0}^{h-1}2^i
 = 2^h - 1.
 \end{displaymath}

Für die Zahl E-(2h) der Elemente in H2h- gilt:

\begin{displaymath}
E^-(2h) = 1 + \sum_{i=0}^{h-1}E^-(2i)
 \stackrel{I.A.}{=} 1 ...
 ...2^i
 = 1 + \underbrace{\sum_{i=1}^{h}2^{i-1}}_{2^h-1}
 = 2^h.
 \end{displaymath}

2.
Sei r = 2h+1, h > 0. Wir betrachten die Partitionierung von H2h+1 mit Zentrum z wie in Lemma 2. Die Unterbäume H0, H2, ..., H2h haben ihre Zentren unterhalb von z. Wir trennen sie von H2h+1, indem wir h+1 Kanten aufbrechen. Die abgetrennten Teile haben offensichtlich die Form Hs, s < 2h+1. Bei den Unterbäumen H1, H3, ..., H2h-1, mit Zentren oberhalb von z, wenden wir jeweils die Induktionsannahme an, d.h. wir erzeugen H1+, H3+, ..., H2h-1+. Als Ergebnis erhalten wir H2h+1+. Damit gilt für die Zahl der aufzubrechenden Kanten K+(2h+1) zur Herstellung von H2h+1+:

\begin{displaymath}
\begin{split}
 K^+(2h+1) = & h+1 + \sum_{i=1}^{h}K^+(2(i-1)+...
 ...um_{i=1}^{h+1}2^{i-1}}_{2^{h+1}-1} - 1
 = 2^{h+1}-1.\end{split}\end{displaymath}

Für die Zahl E+(2h+1) der Elemente in H2h+1+ gilt:

\begin{displaymath}
E^+(2h+1) = 1 + \sum_{i=1}^{h}E^+(2(i-1)+1)
 \stackrel{I.A.}{=} 1 + \underbrace{\sum_{i=1}^{h}2^{i-1}}_{2^h-1}
 = 2^h.
 \end{displaymath}

$\Diamond$
d)
Lemma 4: Falls $k \le 2^h-1$, dann kann H2h so zerlegt werden, daß die Komponente des Zentrums genau 2k+1 Elemente enthält, k davon über und k unter dem Zentrum. Dazu müssen $\le 3k + 2h$ Kanten entfernt werden. Die entfernten Teile sind von der Form Hs, s < 2h.

Beweis: Betrachte die Binärdarstellung von k = k0 20 + k1 21 + ... + kh-1 2h-1 und die Partitionierung von H2h mit Zentrum z wie in Lemma 2.

Damit ergibt sich für die Gesamtanzahl aufzubrechender Kanten eine obere Schranke von 3k+2h. Lemma 3 liefert uns darüberhinaus die gewünschte Aussage über die Form der abgetrennten Teile. $\Diamond$
Betrachte H2h
\includegraphics {eps/2_6.eps}
U(h):= Anzahl der Elemente in $H_{2h} \geq$ Zentrum: U(h)=2U(h-1)=2hU(0)=2h
D(h):= Anzahl der Elemente in $H_{2h} \leq$ Zentrum: D(h)=2D(h-1)=2hD(0)=2h

Anzahl der Kanten, die entfernt werden müssen:

\begin{displaymath}
\left.
 \begin{array}
{l}
 \begin{split}
 \text{C}_u(h)&\leq...
 ...ght\}
 \quad \text{C}_H \leq 2^{h+1}-2+2^h-1 \approx 3\cdot 2^h\end{displaymath}

Kette von Pk's:


\begin{picture}
(80,45)

 \put(15,15){\line(1,0){10}}
 \put(25,15){\line(-2,3){1...
 ...0,22.5){\line(3,1){15}}
 \multiput(35,27.5)(3,1){11}{\circle*{0.5}}\end{picture}

Gesamtzahl der Elemente:

\begin{displaymath}
\begin{split}
 &n\\  &t(2k+1)\ \text{in den}\ P_k\text{'s}\\  &r=n-t(2k+1)\ \text{Rest}
 \end{split}\end{displaymath}

Wenn r<t-1, dann wissen wir, daß top größer ist als

\begin{displaymath}
k+(t-1)(k+1)\gt k+(k+1)\left(\frac{n+1}{2k+2}-1\right)=\frac{n-1}{2}\end{displaymath}

$ \Rightarrow $ top > Median

\begin{displaymath}
\begin{split}
 &k:=\left\lfloor n^{\frac{1}{4}} \right\rfloor\\  &h\text{ sdg. }2^{h-1}\leq k < 2^h
 \end{split}\end{displaymath}

\includegraphics {eps/2_8.eps}
Definiere: r:= Anzahl der noch im H2h Produktionsprozeß steckenden Elemente. (für jedes i<2h höchstens ein $H_i \Rightarrow r \leq \sum\limits^{2h-1}_{i=0} = 2^{2h}-1$)
R:= Anzahl der im letzten Schritt zu sortierenden Elemente. Es gilt: $t \leq r+1$, und damit

\begin{displaymath}
R=t(2k+1)+r \leq 2^{2h}(2k+1)+2^{2h}-1\end{displaymath}

m:= Gesamtzahl der im Algorithmus produzierten Pk's.

\begin{displaymath}
m=t+2\frac{n-R}{2(k+1)}= t + \frac{n-R}{k+1}\end{displaymath}

Gesamtzahl der vom Algorithmus durchgeführten Vergleiche =
1.
Anzahl der Kanten in allen Pk's
2.
+ Anzahl der Kanten, die gelöscht werden, um die Pk's zu formen
3.
+ Anzahl der Kanten, die zum Schluß in übriggebliebenen $H_i\text{'s}\ (i < 2h)$ stecken
4.
+ Anzahl der Vergleiche, um jedes Zentrum der Pk's in die (sortierte) Kette einzufügen
5.
+ Anzahl der Vergleiche, um die zum Schluß übriggebliebenenen R Elemente zu sortieren

\begin{displaymath}
\leq \left( \frac{n-R}{k+1}+t \right) \left[ \underbrace{2k}...
 ...c{n}{2k+1}}_4 \right] + \underbrace{R\log R}_5+\underbrace{r}_3\end{displaymath}

$k:= \left\lfloor n^{\frac{1}{4}} \right\rfloor$, h so daß $2^{h-1} \leq k < 2^h$

\begin{displaymath}
\begin{split}
\text{Damit } r &= \mathcal{O}(k^2)\\  t &= \m...
 ...hl der Vergleiche } &= \text{T}(n) \leq 5n + o(n)\\ \end{split}\end{displaymath}

Verbesserte Version: T(n) = 3n + o(n)
Dor/Zwick: 2,95n + o(n)

Bester bekannter Algorithmus: K.Zwick ( 2.95n+o(n) )
Literatur: SPP: Finding the Median. JCSS 13(1976) p.84-199

next up previous contents
Next: Eine untere Schranke für Up: Selektieren und Sortieren Previous: Randomisierter-Median-Algorithmus
Abbas-Bardia Kabiri-Jarghouyeh
3/3/1999