mittelding
2010-06-20, 12:20:23
Hallo!
Zuerst einmal muss ich sagen, dass das Thema "Algorithmen" bei uns im Studiengang Medieninformatik nicht so arg in die Tiefe geht wie das vllt. in der reinen Informatik der Fall ist, ein grobes Verständnis für das ganze ohne großen Tiefgang reicht also völlig aus.
Es geht bei uns lediglich um Zeitkomplexität, nicht um Speicherplatz.
Anhand dem Verlauf der Vorlesungen konnte ich bis jetzt aber keine klare Linie erkennen, wie die Notation tatsächlich zu bestimmen ist.
Was bisher geschah:
Erst ging es immer darum, den worst case, average case und best case eines Algorithmus zu bestimmen. Bei Sortierverfahren wurde aber getrennt zwischen Vergleichen (Comparisons) und Bewegungen (Moves) - soweit leuchtet das auch ein.
Plötzlich ging es dann aber mit "Größenordnungen der Komplexität" weiter, und damit kam die O-Notation.
Da wäre ich auch bei der ersten Frage: mir ist völlig unklar, inwieweit wort/avg/best case mit der O-Notation zusammenhängen, oder ob sie es überhaupt tun.
Im Skript gibt es eine Liste mit typischen Größenordnungen, wie z.B. log n, n, n log n, n², n^k und 2^n und auch ein Beschreibungstext, welcher jeder dieser Ordnungen ein typisches Beispiel verpasst.
Bis zu diesem Punkt bin ich davon ausgegangen, dass die 3 cases mit der Größenordnung erstmal nichts zu tun haben.
Jetzt wird an einer Stelle aber doch plötzlich der Bezug zu den 3 cases hergestellt. Zitate:
"Die Größenordnung eines Komplexitätsmaßes kann für die Relativierungen worst case, best case, average case unterschiedlich sein."
"Im Beispiel xy ist die Größenordnung von f im best case O(1) und im worst sowie average case O(n)."
"Ist das Komplexitätsmaß f(n) ein Polynom, so wird die Komplexität durch die höchste Potenz bestimmt."
Momentan werde ich daraus nicht schlau. Heißt das, man gibt für alle 3 fälle unterschiedliche "O's" an oder wie? Und was ist mit Moves und Comparisons bei Sorterverfahen, muss man hier nochmal aufteilen in M und C?
Etwas Aufklärung wäre super. Die Fragen sind denke ich mal das wichtigste bevor es weitergeht, aber am Ende wäre natürlich die Frage, wie man vorgeht um aus einem gegebenen Stück Code die O-Notation herauszubringen.
Vielen Dank!
Zuerst einmal muss ich sagen, dass das Thema "Algorithmen" bei uns im Studiengang Medieninformatik nicht so arg in die Tiefe geht wie das vllt. in der reinen Informatik der Fall ist, ein grobes Verständnis für das ganze ohne großen Tiefgang reicht also völlig aus.
Es geht bei uns lediglich um Zeitkomplexität, nicht um Speicherplatz.
Anhand dem Verlauf der Vorlesungen konnte ich bis jetzt aber keine klare Linie erkennen, wie die Notation tatsächlich zu bestimmen ist.
Was bisher geschah:
Erst ging es immer darum, den worst case, average case und best case eines Algorithmus zu bestimmen. Bei Sortierverfahren wurde aber getrennt zwischen Vergleichen (Comparisons) und Bewegungen (Moves) - soweit leuchtet das auch ein.
Plötzlich ging es dann aber mit "Größenordnungen der Komplexität" weiter, und damit kam die O-Notation.
Da wäre ich auch bei der ersten Frage: mir ist völlig unklar, inwieweit wort/avg/best case mit der O-Notation zusammenhängen, oder ob sie es überhaupt tun.
Im Skript gibt es eine Liste mit typischen Größenordnungen, wie z.B. log n, n, n log n, n², n^k und 2^n und auch ein Beschreibungstext, welcher jeder dieser Ordnungen ein typisches Beispiel verpasst.
Bis zu diesem Punkt bin ich davon ausgegangen, dass die 3 cases mit der Größenordnung erstmal nichts zu tun haben.
Jetzt wird an einer Stelle aber doch plötzlich der Bezug zu den 3 cases hergestellt. Zitate:
"Die Größenordnung eines Komplexitätsmaßes kann für die Relativierungen worst case, best case, average case unterschiedlich sein."
"Im Beispiel xy ist die Größenordnung von f im best case O(1) und im worst sowie average case O(n)."
"Ist das Komplexitätsmaß f(n) ein Polynom, so wird die Komplexität durch die höchste Potenz bestimmt."
Momentan werde ich daraus nicht schlau. Heißt das, man gibt für alle 3 fälle unterschiedliche "O's" an oder wie? Und was ist mit Moves und Comparisons bei Sorterverfahen, muss man hier nochmal aufteilen in M und C?
Etwas Aufklärung wäre super. Die Fragen sind denke ich mal das wichtigste bevor es weitergeht, aber am Ende wäre natürlich die Frage, wie man vorgeht um aus einem gegebenen Stück Code die O-Notation herauszubringen.
Vielen Dank!