Nach allem, was ich gesehen habe, scheinen Big-O-Notation sowie Zeit- und Gedächtniskomplexität im formalen Informatikunterricht stark betont zu werden. Da diese Wahrnehmung jedoch Autodidakt ist, basiert sie darauf, zu hören und zu lesen, was Menschen mit solchen Ausbildungen tun sagen und schreiben.
Obwohl ich glaube, dass die allgemeinen Ideen und Konzepte wichtig sind, glaube ich nicht, dass die Formalisierung (wie die Big-O-Notation und verschiedene Begriffe) fast genauso wichtig ist, außer für die Zwecke der Kommunikation. Nur weil jemand mit der formalen Notation und Terminologie nicht vertraut ist, heißt das nicht, dass er nicht sehen kann, wie und warum ein Algorithmus in einem bestimmten Fall schneller als ein anderer wäre. Menschen können sehen, dass die Zeit, die für die Suche nach einem ausgeglichenen Binärbaum benötigt wird, sich auf den Basis-2-Logarithmus der Anzahl der Knoten bezieht, ohne zuerst etwas über die Komplexitätstheorie in einem formalen Sinne zu lernen, wenn sie verstehen, wie der Baum funktioniert, und ein vernünftiges Verständnis von Hoch haben Schulmathematik. Es ist wichtig zu wissen, wann man auf Komplexität und Speichernutzung achten muss, und typische und schlimmste Fälle zu berücksichtigen ... aber einige Leute tun dies nicht.
Die Notation und Terminologie werden für die Kommunikation wichtig. Sie bieten eine gute Möglichkeit, jemand anderem eine Quantifizierung der Leistung eines Algorithmus zu vermitteln. Da es häufig in Artikeln und Erklärungen vorkommt, ist es nützlich, zumindest ein vages Verständnis davon zu haben, damit sie leichter zu befolgen sind.
Ja, die Konzepte sind wichtig (allerdings weniger, wenn Ressourcen und Zeit ausreichend sind, Daten jedoch nicht). Obwohl die Konzepte wichtig sind, ist ihre Formalisierung oft nicht so wichtig - und man muss bedenken, dass Notation und Terminologie nicht mit den Konzepten selbst identisch sind.
Bearbeiten:
Ich würde nicht behaupten, die Konzepte so detailliert zu verstehen wie jemand, der formell studiert hat, aber viele der allgemeinen Ideen sind einfach sinnvoll. Ich denke, es ist wertvoll, dies formal zu studieren, aber ein Teil dieses Wertes kann immer noch ohne existieren.
Was die Einführung der Konzepte (außerhalb des formalen Studiums) betrifft, denke ich, dass ein guter Anfang darin besteht, die Leute zu ermutigen, darüber nachzudenken, wie viel Speicheraufwand die Datenstrukturen haben, welche Schritte die Algorithmen beinhalten und wie sich diese Dinge mit unterschiedlichen Daten ändern.
Es ist auch hilfreich, hypothetische Situationen und Änderungen zu berücksichtigen, z. B. zu überlegen, was passiert, wenn ein Baum ausgeglichen ist, und was passiert, wenn er so unausgeglichen wie möglich ist, oder wie viele Ebenen im Baum die meisten Knoten wären oder wie viele weitere Knoten es können halten, wenn die Tiefe um eine Ebene erhöht wird. Diese Denkweise ist für Programmierer im Allgemeinen ohnehin nützlich, nicht nur, wenn es um Komplexität geht. und wenn es darum geht, darüber nachzudenken, wie Algorithmen und Datenstrukturen unter verschiedenen Umständen funktionieren, weist es natürlich in die gleiche Richtung wie eine formellere Untersuchung der Komplexität.
O(n^2)
bedeutet.