Sortierung eines Array überprüfen - Seite 2

Seite 2 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/sortierung_eines_array_ueberpruefen_152234/page_2 - zur Vollversion wechseln!


watchout schrieb am 07.11.2005 um 22:16

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 schrieb am 07.11.2005 um 22:25

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 schrieb am 07.11.2005 um 22:28

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 schrieb am 07.11.2005 um 22:53

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 schrieb am 07.11.2005 um 23:18

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 schrieb am 07.11.2005 um 23:45

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 schrieb am 08.11.2005 um 17:28

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


watchout schrieb am 08.11.2005 um 18:53

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 schrieb am 08.11.2005 um 19:57

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 schrieb am 08.11.2005 um 22:38

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²)?


watchout schrieb am 08.11.2005 um 22:50

du kannst es so verstehen dass O(n²) eine Menge aller Funktionen darstellt die n² als Obere Schranke haben


jives schrieb am 08.11.2005 um 22:53

Ah :) Das macht das Ganze ja richtig lesbar :eek: :D


ica schrieb am 08.11.2005 um 22:59

verdammt...das muss ich am wochende auch wieder alles wiederholen, hab am montag entwurf und analyse von algorithmen teilklausur. rekursive zeitgleichungen ahoi :D


shadowman schrieb am 16.11.2005 um 02:31

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.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025