Sortierung eines Array überprüfen
shadowman 06.11.2005 - 15:35 2036 28
watchout
Legendundead
|
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 Moderatorresident spacenerd
|
ä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) 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 )
|
that
ModeratorHoffnungsloser Optimist
|
Das is zwar nicht deutsch der Satz "s" <- bitte an der richtigen Stelle einsetzen. 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
Legendundead
|
"s" <- bitte an der richtigen Stelle einsetzen. der Satz is mit absicht genauso verbaut wie deiner oben (Wo du ein s einfügen willst is mir nicht klar ) 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 ) edit: OMFG zu viele Smileys in einem Post... aaah ich verspüre plötzlich den Drang im Offtopic zu posten NEEEEIIIIIINN
|
that
ModeratorHoffnungsloser Optimist
|
|
watchout
Legendundead
|
Zwischen "Array" und " ". Wenns dir dann noch immer nicht deutsch vorkommt, klick auf den ersten Link in meiner Sig. omg, was ein kleines "s" so bewirken kann - jetzt macht der Satz richtig Sinn!
|
jives
And the science gets done
|
Könnte bitte jemand erklären was Ω() und O()
ist, damit ich (und sicher viele andere auch) den Thread wieder verstehen? Edit I: -> http://en.wikipedia.org/wiki/Big_O_notationEdit II: WarnungDer obige Link kann Ihnen und den Menschen in Ihrer Umgebung erheblichen Schaden zufügen
Bearbeitet von jives am 08.11.2005, 17:39
|
watchout
Legendundead
|
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
ModeratorHoffnungsloser Optimist
|
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: 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
|
Bearbeitet von jives am 08.11.2005, 22:42
|
watchout
Legendundead
|
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
|
Ah Das macht das Ganze ja richtig lesbar
|
ica
hmm
|
verdammt...das muss ich am wochende auch wieder alles wiederholen, hab am montag entwurf und analyse von algorithmen teilklausur. rekursive zeitgleichungen ahoi
|
shadowman
OC Addicted
|
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.
|