"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Sortierung eines Array überprüfen

shadowman 06.11.2005 - 15:35 2036 28
Posts

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von that
O(1) schaffst du nur, wenn du die gültigen Eingabewerte auf Array beschränkst, die in den ersten 3 Elementen garantiert unsortiert sind.
Das is zwar nicht deutsch der Satz, aber ich denke du meinst dass ich hätte schreiben sollen dass bei unsortiert die Laufzeit Ω(1) und O(n) ist - Sorry dafür

Mr. Zet

Super Moderator
resident spacenerd
Avatar
Registered: Oct 2000
Location: Edge of Tomorrow
Posts: 12040
Zitat von Neo-=IuE=-
ähm i mein wennst pech hast und das array nur gleiche werte hat und nur der letzte wert kleiner/größer is, dann hast O(2*n) :D

O(2*n) = O(n)
konstante Faktoren sind in der Laufzeitabschätzung von Algorithmen vernachlässigbar ;)
(auch wenns watch quasi eh schon erwähnt hat :p)

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von watchout
Das is zwar nicht deutsch der Satz

"s" <- bitte an der richtigen Stelle einsetzen. :p

Zitat von watchout
aber ich denke du meinst dass ich hätte schreiben sollen dass bei unsortiert die Laufzeit Ω(1) und O(n) ist - Sorry dafür

Sieht richtiger aus - was das Ω ist musste ich jetzt selbst nachschauen :)

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von that
"s" <- bitte an der richtigen Stelle einsetzen. :p
der Satz is mit absicht genauso verbaut wie deiner oben ;) :p (Wo du ein s einfügen willst is mir nicht klar :D)
Zitat von that
Sieht richtiger aus - was das Ω ist musste ich jetzt selbst nachschauen :)
Ich sitz gerade an ner AlgoDat-Übung - bin also sozusagen vorgeschädigt (wirkt ungefähr wie :bash: )

edit: OMFG zu viele Smileys in einem Post... aaah ich verspüre plötzlich den Drang im Offtopic zu posten NEEEEIIIIIINN

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von watchout
(Wo du ein s einfügen willst is mir nicht klar :D)

Zwischen "Array" und " ". Wenns dir dann noch immer nicht deutsch vorkommt, klick auf den ersten Link in meiner Sig. :D


Zitat von watchout
Ich sitz gerade an ner AlgoDat-Übung - bin also sozusagen vorgeschädigt (wirkt ungefähr wie :bash: )

Übertreibs nicht, das könnte dauerhafte Schädigungen hervorrufen. :p

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von that
Zwischen "Array" und " ". Wenns dir dann noch immer nicht deutsch vorkommt, klick auf den ersten Link in meiner Sig. :D
omg, was ein kleines "s" so bewirken kann - jetzt macht der Satz richtig Sinn! :eek:

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Könnte bitte jemand erklären was
Code:
Ω() und O()
ist, damit ich (und sicher viele andere auch) den Thread wieder verstehen? ;)

Edit I:
-> http://en.wikipedia.org/wiki/Big_O_notation

Edit II:
Warnung
Der obige Link kann Ihnen und den Menschen in Ihrer Umgebung erheblichen Schaden zufügen
Bearbeitet von jives am 08.11.2005, 17:39

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Vorweg; Bei solchen Themen ist das deutsche Wikipedia imho besser (http://de.wikipedia.org/wiki/Landau-Symbole)

Grob gesagt, die O und Ω bzw. auch Θ geben an, wie lange ein Algorithmus läuft, dabei werden praktisch alle Konstanten und auch Teile eines Polynoms mit niederer Ordnung vernachlässigt.
Dabei gibt O(f(n)) die obere "Grenze", Ω(f(n)) die untere und Θ(f(n)) obere und untere Grenzen an

dh. hat eine Schleife (warum auch immer) 3n³+10n² Durchläufe, hat die Schleife in der Landau(Θ )-Notation eine Laufzeit von Θ(n³)
hat sie mindestens n und maximal n³ , dann hat sie Ω(n) und O(n³)

Wen das Ganze wirklich interessiert sollte sich nächstes Semester die Vorlesung "Algorithmen und Datenstrukturen 1" auf der Uni seiner Wahl geben - das Ganze ist doch etwas heftiger :) (Aber es is eine der interessanteren Vorlesungen)

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Wen das Ganze nicht so wirklich interessiert, hier ist das Wichtige für die Praxis aus dem ganzen O(n) usw. Zeug zusammengefasst:

Man sollte sich ungefähr bewusst sein, welches Zeitverhalten eine Funktion in Relation zur Datenmenge hat. Das kann eben u.a. sein:

O(1) - konstant: Die Funktion braucht immer ca. die gleiche Zeit, unabhängig von der Datenmenge. Ob diese Zeit kurz oder lang ist, sagt das allerdings nicht aus. Aber für die doppelte Datenmenge braucht es die gleiche Zeit.

O(n) - linear: Doppelte Zeit für die doppelte Menge. Die klassische Schleife.

O(n²) - quadratisch: Vierfache Zeit für die doppelte Datenmenge, hundertfache Zeit für die zehnfache. Sowas entsteht, wenn man zwei Schleifen ineinander schachtelt (die beide über die selbe Größenordnung von Datenmenge gehen). Die primitiven Sortieralgorithmen haben z.B. quadratisches Zeitverhalten.

Der klassische Grund für unnötig langsame Programme sind gedankenlos verschachtelte Algorithmen mit O(n) oder schlechter.

Beispiel: Um in einer verketteten Liste das n-te Element zu finden, muss man vom Anfang an durchgehen und mitzählen, das ist also O(n). Angenommen man hat so eine Liste mit einer Methode getNthElement. Irgendwo anders verwendet man diese Liste wie folgt:

Code:
for (int i = 0; i < myList.getNumberOfElements(); ++i)
   tuIrgendwasMit(myList.getNthElement(i));

Schon hat man aus linearem Zeitverhalten ein quadratisches gemacht. Bei kleinen Datenmengen ist das noch egal, aber je größer die Anzahl der Elemente wird, desto schlimmer wirkt sich n² aus.

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Das konnte ich noch aus den Artikeln rauslesen. Wenn man aber etwas tiefer in die Materie geht und versucht http://en.wikipedia.org/wiki/Big_O_...rmal_definition bzw. http://de.wikipedia.org/wiki/Landau...male_Definition so zu verstehen, dass man da einen zusammenhang erkennt -> :eek: :confused: :bash:

Zumindest gehts mir so ;)

Und was das sein soll, versteh ich auch nicht so ganz:
041ebb0bbcfefe449c2f59fdc3ae231b.png
Eine eine Funktion T(n) als Element einer Menge(?) O(n²)?
Bearbeitet von jives am 08.11.2005, 22:42

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
du kannst es so verstehen dass O(n²) eine Menge aller Funktionen darstellt die n² als Obere Schranke haben

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Ah :) Das macht das Ganze ja richtig lesbar :eek: :D

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9818
verdammt...das muss ich am wochende auch wieder alles wiederholen, hab am montag entwurf und analyse von algorithmen teilklausur. rekursive zeitgleichungen ahoi :D

shadowman

OC Addicted
Registered: Oct 2000
Location: Feldkirchen
Posts: 1612
Omg wenn ich die entstehenden Schäden der Leute aus diesem Thread auf meine Kappe nehmen muss na servas. Da brauch ich eh nixmehr essen, weil die Gerichtskosten ziemlich hoch sein werden.

Klingt alles recht intressant, aber jetzt hab ich auch nichtmehr die Motivation mir das ganze nochmal genau durchzulesen. Wird morgen oder am Donnerstag abend gemacht.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz