Sortierzeitkomplexität zusammenführen

Sortierzeitkomplexität zusammenführen
Zeitkomplexität ist die relative Laufzeit eines Programms. Es kann als Anzahl der Hauptvorgänge eines Programms angesehen werden.

Ganzzahl Division von zwei

Integer Division ist notwendig, wenn eine Zusammenführung sortiert.

Wenn eine ungerade Zahl durch zwei geteilt wird, gibt es einen Rest von 1. Zum Beispiel:

7/2 = 3 r 1

Integer Division bedeutet, die gesamte Nummer als Antwort zu nehmen und die 1 aufzugeben.

Wenn eine gleichmäßige Zahl durch zwei geteilt wird, gibt es einen Rest von 0. Zum Beispiel:

6/2 = 3 r 0

Integer Division bedeutet, die gesamte Nummer als Antwort zu nehmen und die 0 aufzugeben.

In beiden Fällen wird die gesamte Anzahl genommen und der Rest aufgegeben.

Ziel dieses Artikels ist es, die zeitliche Komplexität der Zusammenführungsart zu bestimmen, die ebenfalls als Mergesort geschrieben wurde. Sortierung kann aufsteigend oder absteigend sein. Die Sortierung in diesem Artikel bezieht sich auf die Sortierung des Aufstiegs.

Sortieralgorithmus zusammenführen

Zusammenführen ist eine Kluft- und Eroberer -Sortieralgorithmus. In diesem Algorithmus ist die unsortierte Liste mit der Integer -Division in zwei Hälften unterteilt. Jede der Hälften wird mit der Ganzzahlabteilung erneut in zwei Hälften unterteilt. Diese Abteilung wird fortgesetzt, bis die Liste als einzelne separate Elemente angesehen wird.

Ab links werden die aufeinanderfolgenden Elemente dann sortiert gepaart. Die gepaarten Elemente werden dann wieder in sortierter Form gepaart. Diese Gruppierung nach Paaren wird fortgesetzt, bis die gesamte Liste reformiert und sortiert ist.

Lineare und logarithmische Zeitkomplexität

Betrachten Sie den folgenden Code in der C -Sprache:

für (int i = 0; i<8; i++)
int k = i + 1;
printf ("%d", k);

printf ("\ n");


Die Ausgabe ist:

1 2 3 4 5 6 7 8

Der Code ist eine For-Schleife (ignoriert die Druckanweisung kurz nach der Verschleife). Es druckt die Ganzzahlen von 1 bis 8 für insgesamt 8 Zahlen. Der Inhalt des Körpers der For-Schleife ist:

int k = i + 1;
printf ("%d", k);


Diese beiden Aussagen werden in dieser Situation als eine Hauptoperation angesehen. Es gibt 8 Operationen. Sei n 8 sein. Dies ist eine lineare Zeitkomplexität und sie ist wie folgt geschrieben:

An)

Wobei n die mögliche maximale Anzahl von Operationen ist. Dies ist die große Notation. Es beginnt mit O in Großbuchstaben und gefolgt von Klammern. Innerhalb der Klammern ist die maximal mögliche Anzahl von Operationen.

Betrachten Sie nun den folgenden Code, in dem von 8 Nummern 3 Nummern gedruckt werden:

für (int i = 0; i<8; i++)
int k = i + 1;
printf ("%d", k);
if (k == 3) brechen;

printf ("\ n");


Die Ausgabe ist:

1 2 3

Der Code ist eine For-Schleife (ignoriert die Druckanweisung kurz nach der Verschleife). Es druckt die Ganzzahlen von 1 bis 3 von 8 Zahlen. Der Inhalt des Körpers der For-Schleife ist:

int k = i + 1;
printf ("%d", k);
if (k == 3) brechen;


Dennoch werden diese drei Aussagen als eine Hauptoperation in dieser Situation angesehen. Es gibt 3 Operationen von 8.

Jetzt,

8 = 23
=> 3 = log2(8)

Die Anzahl der vom vorherigen Code durchgeführten Hauptvorgänge beträgt also 3 (von 8).

Sei n 8 sein. Dies ist eine logarithmische Zeitkomplexität und sie ist geschrieben als:

O (Protokoll2N)

Wo (Protokoll2 n) bedeutet 3 für den vorherigen Code.

Es gab 8 Zahlen. Wenn die Anzahl der Operationen für den Code zwischen 2 und 5 von 8 und nicht nur 3 liegt, wird im Allgemeinen die Zeitkomplexität als Protokoll beschrieben2(N).

Beispiel für die ungeortierte und sortierte Liste

Ein Beispiel für die ungeortierte Liste lautet wie folgt:

P v d q s x t b

Es gibt acht Elemente in der Liste. Wenn diese Liste sortiert ist, wird sie:

B D P q s t v x

Zählen Sie die Anzahl der Hauptoperationen in der Zusammenführung

Die folgende Liste:

P v d q s x t b

wird verwendet, um die Anzahl der Hauptoperationen in Zusammenführungsarten zu zählen.

Die Ganzzahlabteilung nach zwei ergibt das folgende Ergebnis:

P v d q s x t b

Dies ist eine Operation. Eine weitere Aufteilung beider Teile nach zwei ergibt das folgende Ergebnis:

P v d q s x t b

Dies sind drei Operationen bisher (ein plus zwei). Eine weitere Aufteilung jedes neuen Teils durch zwei ergibt das folgende Ergebnis:

P v d q s x t b

Dies sind bisher sieben Operationen (drei plus vier). Die Liste der acht Elemente wird jetzt als acht separate Elemente mit insgesamt sieben Operationen angesehen. Die nächste Phase besteht darin, beim Sortieren von links zu kombinieren. Das nächste Ergebnis ist also:

P v d q s x b t

Für das letzte Paar gibt es zwei Positionsänderungen. Zwei Änderungen sind zwei Operationen. Dies macht bisher insgesamt neun Operationen (sieben plus zwei).

Die Paarung und Sortierung geht weiter und beginnt immer von links, um das folgende Ergebnis zu erzielen:

D p q v b s t x

Jede dieser beiden Gruppen hatte vier Positionsänderungen, wobei acht Operationen durchgeführt wurden. Bisher gibt es siebzehn Operationen (neun plus acht). Die Paarung und Sortierung geht weiter und schließlich, um das folgende Ergebnis zu erzielen:

B D P q s t v x

Hier gibt es sieben Positionsänderungen, die sieben Operationen vornehmen. Dies macht vierundzwanzig Operationen (siebzehn plus sieben) für die komplette Sortierung.

Zeitkomplexität für die Zusammenführung der Sortierung

Die vorherige Zählung (Abbildung) wird verwendet, um die zeitliche Komplexität für das Mergesort zu zitieren. Es gibt vierundzwanzig Operationen.

24 = 8 x 3

Das ist:

24 = 8 x Protokoll2(8)

Weil log2 (8) 3 ist.

Sei 8 n sein n. Damit wird die Komplexität der Mergesort -Zeit gegeben durch:

An.Protokoll2N)

wo der Punkt eine Multiplikation bedeutet.

In der Praxis beträgt die Anzahl der Operationen von 8 Elementen ungefähr 24 oder 24.

Abschluss

Die Mergesort ist eine besondere Kluft- und Eroberer -Sortieralgorithmus. Es ist ein sehr effizienter Sortieralgorithmus. Seine Zeitkomplexität ist im Vergleich zu den anderen Sortieralgorithmen sehr zufriedenstellend. Seine Zeitkomplexität ist:

O (NLOG2N)

Hinweis: Die Anzahl der Operationen darf nicht unbedingt genau n sein.log2n . Es sollte es jedoch annähern.

Die Codierung von Mergesort erfordert rekursive Funktionen. Es ist nicht allzu schwierig, es zu codieren, sobald der Algorithmus verstanden wurde. Die Codierung der Zusammenführungsart ist eine Diskussion für eine andere Zeit.