Obwohl es möglich ist, um iterativ Arrays zu fusionieren, eine effizientere Art und Weise wird ein k-way merge, sein, die in O(nlogk)
erfolgt, bei k
die Anzahl von Arrays und n
ist die Gesamtzahl von Elementen, eine Prioritäts-Warteschlange verwendet wird.
Hinweis: Es kann nicht besser als O(nlogk)
getan werden, denn wenn es möglich ist [die mit Komplexität sagen lassen O(g(n))
wo g(n)
als asymptotisch schwächer dann ist nlogn
] - dann können wir den folgenden Sortieralgorithmus erzeugen:
sort(array A):
split A into n arrays, each of size 1, B1,...,Bn
A <- special_merge(B1,...Bn)
return A
Es ist leicht zu sehen, dass dieser Algorithmus der Komplexität ist O(g(n) + n) = O(g(n))
, und wir bekommen eine contraditcion, da wir eine Art besser als O(nlogn)
bekamen - die mit compartions basierten Algorithmen nicht möglich ist, da dieses Problem Omega(nlogn)
ist
Coole Aufgabe, und was hast du probiert? –
kennen Sie die Anzahl der Arrays. es ist k :). Gibt es eine Regel beim Zusammenführen? – UmNyobe
Ich arbeite an Sortierung Array in einem verteilten Netzwerk.Sie in k Partitionen aufgeteilt, sortiert auf Server-Seite und verschmolzen auf der Client-Seite.Problem ist ich weiß nicht, # der Arrays zusammengeführt werden. –