Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

In einem Array der Größe n seien nur die Werte rot, blau, grün gespeichert. Das Array soll so sortiert werden, daß zunächst alle roten, dann alle grünen und zuletzt alle blauen Farben vorkommen. Die einzigen erlaubten

Zugriffsoperationen auf das Array sind

test(i): Liefert die Farbe der i-ten Komponente

tausch(i,j): tauscht die Inhalte der beiden Komponenten i und j

Schreiben Sie einen Algorithmus, der das Array in situ in O(n) Zeit sortiert. Zeigen Sie, daß Ihr Algorithmus in O(n) Schritten (also linear) terminiert und daß das Array dann tatsächlich sortiert ist.

Dieses Problem müsste man doch eigentlich rekursiv lösen oder? Quasi indem ich das Feld durchlaufe, solange die Bedingung rot < grün < blau erfüllt ist und andernfalls zwei Elemente tausche. Muss ich nun erst die ganze Liste einmal durchgehen, dabei alle relevanten Paare tauschen und danach die Liste von vorne beginnen oder welche Vorgehensweise empfiehlt ihr mir?

Danke, Moeki.

Geschrieben

Mal eine bescheidende Frage:

Gibt es überhaupt einen Sortieralgorhitmus, der O(n) hat?

Oder liegt das nur an der Aufgabenstellung, dass man bei 3 verschiedenen Elementen O(n) erreichen kann?

Geschrieben
Gibt es überhaupt einen Sortieralgorhitmus, der O(n) hat?
Das kommt immer auf die Datenstruktur an. Wenn ich ziemlich genau weiss, welche Daten ich zum Sortieren bekomme, und in welcher Art und Weise diese sortiert werden müssen, in welcher Art vielleicht schon eine Vorsortierung stattgefunden hat, und letzen Endes alles ideal abläuft, dann ist jede Laufzeit denkbar. Theoretisch sogar O(1).

Ein allgemeiner Sortieralgorithmus wird allerdings niemals schneller als O(n·log(n)) sein können.

Siehe auch: http://de.wikipedia.org/wiki/Sortierverfahren

  • 1 Monat später...
Geschrieben
n <> n^2, für alle n <> 0 und n <> 1
n ist hier keine Variable in einem algebraischen Ausdruck, sondern gehört zur Beschreibung einer Komplexitätsklasse. n steht hier nicht für einen Wert, den man einsetzen könnte.
Geschrieben

Sind die Farben anfangs komplett durcheinander im Array, also "grbgrbbgbb", oder in der Form "rrbbbbbggg", die nach "rrgggbbbbb" umgewandelt werden soll? Letzteres kann in linearer Zeit umgearbeitet werden, die Sortierung einer beliebigen Anordnung nicht.

Geschrieben

Ja, der Algorithmus ist linear.

Mal zur Klärung: Der beste mögliche Sortieralgorithmus (! der nur auf Vergleichsoperationen basiert) hat eine Laufzeit von O(n log(n)).

Bei diesem Sortieralgorithmus wurde allerdings die Einschränkung gemacht, dass nur drei verschiedene Werte möglich sind.

Damit braucht man nicht mehr mit Vergleichsoperationen arbeiten, sondern mit dem Tauschen (ohne Vergleichen), daher ist der Algo mit O(n) möglich.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...