Komplexität -> Just do it again :)
1. Welcher Komplexitätsgrad ist optimal?
Keiner. Komplexität bedeutet, wie in der Parallel-Antwort von Hyperion
schon erwähnt, keinen Algorithmus zu haben, der ein Problem in einer
bestimmten Zeit und unter bestimmtem Ressourcenaufwand lösen kann.
Dem kann ich nicht beipflichten. Wie Du weiter unten ausführst, gibt es
unterschiedliche Komplexitätsgrade. Unterhalb eines bestimmten Grades
sollten die Aufgaben unter definierten Bedingungen notwendigerweise zu
lösen sein. Sonst würde Dein Beispiel nicht funktionieren.
Ok, wurde vielleicht nicht ganz klar.
"Optimale Grade" gibt es wohl nicht, daher meine Feststellung: Keine Komplexität wäre ideal => kein Aufwand nötig.
Die Definition von Komplexitätsgrad wäre von Vorteil.
In der Informatik kennt man Klassen. Man kann versuchen, Komplexität mathematisch einzugrenzen, und sagen: ok, das Problem ist mit einem Rechenaufwand von f(x)=x minimal lösbar, also linear. Andere Lösungen wachsen mit x², e^x, log(x) usw..
Darüber kann man abschätzen, welcher Komplexitätsklasse eine Lösung zugehörig ist. Es gibt hierfür speziell die O-Notation, die versucht, Algorithmen/Heuristiken und damit Probleme entsprechend einzuordnen (best/worst/average case).
Ein Problem hat also intrinsisch keine quantifizierbare Komplexität, die Lösung hierfür benötigt aber n Schritte. Ein Problem ist daher nur so kompliziert wie die beste Lösung dafür.
Beispiel Traveling Salesman Problem:
Es gibt 10 Orte, die ein Vertreter abklappern muss. Jeder Ort ist mit jedem verbunden. Daraus ergeben sich (Orte-1)! Kombinationen:
Bei 5 Orten: 120 Kombinationen
Bei 10 Orten: 326.880 Kombinationen
Bei 15 Orten: 1.307.674.368.000 Kombinationen
Nun kann man versuchen, es zu lösen:
a) exakt
z.B. mit Branch&Bound wird, je nach Algo, eine Komplexität von ca. O(2^n) erreicht, also bei 15 Orten sind ca. 32000 Schritte/Kombinationen notwendig.
b) heuristisch
z.B. mit der "welcher Nachbar ist der Naheststehende"-Taktik, welches das Problem - nicht optimal! - in ca. O(n*log(n)) löst; hier sind also ca. 17 Schritte.
(bitte nicht festnageln auf den exakten O-Abschätzungen, das kommt auf den Algo an)
Die Komplexitätsklassen kann man also hinsichtlich ihres Wachstumsverhalten sortieren. Für z.B. 5 Orte könnte man dieses Problem per Bruteforce vielleicht noch auf dem Papier lösen, darüber wirds schon knifflig, und ab einem bestimmten n reichen theoretisch selbst alle Rechnerressourcen der Welt nicht mehr aus, obwohl es im Prinzip nicht per se schwieriger wurde, nur aufwändiger und nerviger: es fehlen einfach nur die Ressourcen.
Wir alle hantieren täglich unterschiedliche komplexe Situationen und sind
oft erfolgreich. Wobei der Erfolg, wie auch das Scheitern sehr oft
(meistens) relativ ist. Totales Scheitern ist ebenso selten wie totaler
Erfolg.Deswegen sind solche Ereignisse wie der absichtlich herbeigeführte
Absturz ebenso exzeptionell, wie das Erringen einer
Fußballweltmeisterschaft.
Wenn eine Depression o.ä. festgestellt wurde, ist man mit einer gewissen Wahrscheinlichkeit gefährdet, dumme Sachen zu machen. Wenn nun bei Eintritt eines Ereignisses, z.B. Pilot verlässt Cockpit, dieser dummeSachen-Moment zeitgleich auftritt, macht es vielleicht bumm.
Das Fussballbeispiel ist vielleicht nicht unbedingt ein Beispiel, da Trainer und Mannschaft durchaus heftige SWOT-Analysen etc. fahren, um Fehler klein zu halten, es wird also heuristisch gearbeitet; entscheidend kann hier vielleicht dann nur die Tagesform und das gewisse Quentchen Chaos sein. Natürlich kann man das bis hin zum Schmetterlingsflügelschlag weiterspinnen. Beeinflusst werden können diese Größen durchaus: Training, Doping, Rasenwahl, Spielerauswahl usw.
a) auf Erfahrungen zurückgegriffen wird: dies kann sowohl gut als auch
schlecht sein
Nein, Komplexität fängt viel früher an: Esse ich zum Frühstück ein
Müsli oder doch ein Croissant mit Butter und Honig? Eingedenk des
individuellen Gesundheitszustandes, der momentanen Verfassung, der Zeit die
ich noch habe bevor ich los muss, etc. pp.DAS sind auch schon komplexe Situationen, die wir in aller Regel durch
Gewöhnung bewältigen, nicht immer in sinnvoller Weise, sondern so, dass
es eben geht (im Sinne von funktioniert).
Jupp, schrieb ich ja :)
Aus Erfahrung wird man klug, bedeutet auf ITisch: Man hat einen Lösungsraum, der im Laufe des Lebens durch Erfahrungen zurechtgeschnitten bzw. geteilt wird. Jemand, der morgens kCal braucht, Zeit x und sich y fühlt, weiss aus Erfahrung, dass Müsli eher kostenintensiver hinsichtlich x,y ist als Müsli und betrachtet diese Möglichkeit gar nicht erst bzw. hat die Lösungen bereits "im Cache" abgelegt. Genauso fahren wir für den Weg zur Arbeit morgens nicht erst in Gegenrichtung, weil man da auch ans Ziel kommen könnte (ok, ausser man wohnt in Rom).
1+1 = 2 > Komplexitätsgrad 1
2+2 = 4 > Komplexitätsgrad 2
Wenn man 1+1 zuerst löst, ist es nicht mehr komplex. 2+2 entspricht
daher
dann lediglich einem +1 gegenüber dem aktuellen Wissensstand.
Das verstehe ich leider nicht. 1+1 ist nicht komplexer als 1392847 + 1
oder 9083475 + 293854, denn es liegt eine feste, allgemein gültige und
akzeptiere Regel für die Bearbeitung des Problems vor.Eine Grenze liegt in der Wahrnehmungsfähigkeit der Summanden durch den
Bearbeiter, deswegen in solchen Fällen auch die Exponentialschreibweise.Hmm, was habe ich vielleicht übersehen, dass ich es nicht verstanden
habe?
Ja, da hast du auch Recht. Geht man von obiger O-Notation aus, läge mein Beispiel in der Komplexitätsklasse O(1). Hintereinanderschaltung von Addition erhöht die Komplexität nicht, sondern wird nur um eine Konstante ergänzt.
Es ging mir darum, dass man die zweite Formel, die aufwändiger ist, nur mithilfe der ersten Lösung berechnen kann. Vielmehr hätte ich etwas schreiben sollen à la
berechneWurzelaus(1+1)
Ich hoffe, es wird etwas klarer, was ich meine.
Ich empfinde Probleme die sich durch mich und mit durch mich vertretbarem
Aufwand lösen lassen als angenehm. Das sind echte Herausforderungen, die
im Zweifel unterschiedliche optimale oder eben suboptimale Lösungen haben
oder auch die Erkenntnis keiner sinnvollen Lösung innerhalb eines gegeben
Kontextes.
Ja, da wird so ziemlich jeder auch mit übereinstimmen können.
7. Wie reduziert ihr in eurem Alltag Komplexität?
Zeit nehmen und sich in ein Thema einarbeiten, soweit möglich. Wenn es
zu
schwer wird, liegen lassen oder eine Lösung nehmen, die vielleicht
80-90%
erfüllt, je nachdem.
Interessant finde ich die Beobachtung, dass sich viele Probleme durch
liegen lassen (reifen?) verringern. Natürlich nicht jedes, aber etliche.
Mit liegen lassen hatte ich zuerst an Abbruch gedacht, Reifung durch Liegenlassen, eine Nacht drüber schlafen, funktioniert jedoch tatsächlich manchmal auch, z.B. wenn man am nächsten Tag auf den Code oder Text schaut, den man irgendwo gegen Schichtende dahingeschludert hat. Manchmal reicht dafür auch eine 5 Minutenpause oder ein Telefonanruf...
Hmm, ist das die Begründung für Merkels Aussitz-Taktik?...