Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Koch_Mathematik fur das Ingenieurstudium.pdf
Скачиваний:
107
Добавлен:
21.02.2016
Размер:
17.74 Mб
Скачать

17.4 Anwendungen

635

17.4 Anwendungen

Das Ziel der Komplexitätsanalyse besteht darin, den Ressourcenbedarf von Algorithmen zu ermitteln. Die beiden wesentlichen Kenngrößen für einen Algorithmus stellen Laufzeitverhalten und Speicherbedarf dar. Die Analyse rekursiver Algorithmen führt typischerweise zu Di erenzengleichungen, siehe [Sedgewick]. Wir illustrieren in diesem Abschnitt an einem typischen Beispiel, wie solche Di erenzengleichungen mithilfe der z-Transformation gelöst werden.

17.4.1 Zeitkomplexität von Quicksort

Quicksort ist ein Algorithmus, der oft zum Sortieren von Elementen verwendet wird. Das Laufzeitverhalten wird dabei im Wesentlichen von der Anzahl der Vergleiche zwischen den einzelnen Elementen bestimmt. Wir suchen nach einem funktionalen Zusammenhang zwischen der Laufzeit T und der Anzahl der zu sortierenden Elemente n. Die grundlegende Idee bei Quicksort besteht in einer „divide and conquer“ Strategie. Wir teilen die zu sortierenden Daten in einen linken und einen rechten Bereich auf und rufen für diese beiden Teilbereiche Quicksort rekursiv wieder auf. Die Arbeitsweise der Aufteilung, die sogenannte Partitionierung, lässt sich an folgendem Beispiel verdeutlichen.

Beispiel 17.6 (Partitionierung bei Quicksort)

Die Buchstabenfolge

A S O R T I N G E X A M P L E

soll alphabetisch sortiert werden. Dazu greifen wir zunächst ein Referenzelement heraus. Als Referenzelement wird üblicherweise das letzte Element, in unserem Fall also E , gewählt. Ziel ist nun, das Referenzelement an der richtigen Stelle zu positionieren. Dazu suchen wir von links das erste Element, das größer oder gleich als unser Referenzelement ist und von rechts das erste Element, das kleiner oder gleich als unser Referenzelement ist. In unserem Beispiel finden wir S und A .

A S O R T I N G E X A M P L E Diese beiden Elemente werden nun getauscht:

A A O R T I N G E X S M P L E

Entsprechend liefert die zweite Suche ab der aktuellen Stelle O und E :

A A O R T I N G E X S M P L E Auch diese Elemente werden getauscht:

A A E R T I N G O X S M P L E

Bei der nächsten Suche kann nun kein Tauschpartner für das R bestimmt werden:

A A E R T I N G O X S M P L E

Wenn wir das R mit unserem Referenzelement E tauschen, so haben wir ein Teilziel erreicht:

A A E E T I N G O X S M P L R

Das Referenzelement E steht nun an der richtigen Position. Alle Elemente links davon sind nicht größer als das Referenzelement und alle Elemente rechts davon sind nicht kleiner als das Referenzelement. Der linke und der rechte Teil können jetzt separat sortiert werden. Ì

636 17 z-Transformation

Zur Analyse der Zeitkomplexität von Quicksort betrachten wir nur den günstigsten Fall. Dieser Fall tritt ein, wenn die Zerlegung von 2 n Elementen in den linken und rechten Bereich jeweils zwei etwa gleich große Bereiche mit n Elementen liefert. Somit gilt dann näherungsweise die rekursive Beziehung

Bei der

 

 

 

 

 

 

 

(

2 n

) =

TPartitionierung

(

2 n

) +

TQuicksort

(

n

) +

TQuicksort

(

n

)

.

 

TQuicksort

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Partitionierung wird jedes Element mit dem Referenzelement verglichen. Es erge-

ben sich also bei 2 n Elementen 2 n

1 Vergleiche. Zugunsten einer einfacheren Darstellung

arbeiten wir mit der Beziehung

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TPartitionierung

 

 

2 n

 

 

 

2 n.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Zur einfacheren

Berechnung der Zeitkomplexität nehmen wir an, dass n eine Zweierpotenz

 

 

 

 

 

 

(

 

 

) =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ist, also n

=

2k. Insgesamt erhalten wir damit

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T

 

 

 

 

 

 

2k

+

 

 

 

 

2k

+

1 2 T

 

 

 

 

2k .

 

 

 

 

 

 

 

 

 

 

 

 

 

Quicksort

 

 

 

1

 

 

 

 

Quicksort

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Diesen

 

Zusammenhang formulieren wir mit der Folge f

k

 

, wobei die Folgenglieder durch

 

 

 

 

 

 

 

 

 

 

 

 

Ž

=

 

 

 

 

+

 

 

 

 

 

 

‰ Ž

(

)

 

 

 

 

 

 

 

 

 

 

fk

 

 

TQuicksort

 

 

2k

 

,

 

f0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

definiert

sind. Das Anfangsglied f ist null, da zum Sortieren von einem einzigen Element

 

=

 

 

 

 

 

 

 

 

 

Ž

 

 

 

0=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

kein Vergleich notwendig ist. Zu der entsprechenden Di erenzengleichung betrachten wir die z-Transformation

 

 

fk+1

 

 

 

2k+1 2 fk

 

 

c

 

 

s z F z 0 2

z

 

 

2 F z .

 

 

 

 

 

 

 

 

 

 

z 2

 

2. Für

 

verwenden wir Satz 17.4 und die Korrespondenz aus Beispiel 17.3 mit a

Dabei (

 

 

 

 

) = ‰

 

 

 

+

 

 

 

 

 

Ž

 

 

 

 

( ( ) − ) =

+

( )

=

die z-Transformierte F

(

z

)

 

unserer gesuchten Zahlenfolge

(

fk

)

gilt

 

F

(

z

) =

 

 

 

2 z

 

 

 

 

 

 

 

(

f

 

k

2

k

Ž

.

 

 

 

 

 

 

 

z 2 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s c

 

k) = ‰

 

 

 

 

 

 

 

 

 

Diese

Beziehung ist ein Spezialfall der Korrespondenz

 

 

 

 

 

 

 

 

 

 

 

(

 

 

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k akŽ c

 

s

 

 

 

 

a z

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

z a 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

die sich mithilfe der Korrespondenz aus Beispiel 17.3 beweisen lässt: Aus der Identität

 

 

 

 

 

 

 

ak z

 

( −

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

z

 

 

 

 

 

k

 

 

 

 

 

ak

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

z a

 

 

 

s

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k 0

 

 

 

 

 

 

‰ Ž

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

Q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ergibt sich durch= Ableiten und Multiplizieren mit

z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

k

 

k 1

 

k

 

 

k

 

 

 

 

k

 

 

 

z

 

 

 

 

 

 

 

 

 

 

z

 

 

k a

 

z

 

k a z

 

 

 

 

 

 

k a .

(− )

z

a

 

 

= (− )

k 0

 

 

 

− −

k 0

 

 

 

s c

 

Ž

 

 

 

 

Q(− )

 

 

 

= Q

 

 

 

 

 

 

 

 

Mit k

log

 

 

n ergibt sich die =gesuchte Zeitkomplexität=

von Quicksort:

 

 

 

 

 

2(

 

)

 

 

 

 

log2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T

Quicksort

n

 

 

n

n.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

( ) =

Man kann zeigen, dass diese Zeitkomplexität von Quicksort viel allgemeiner, also nicht nur unter unseren vereinfachenden Annahmen, gilt.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]