Es wird kontextabhängig sein.
"Beheben eines quadratischen Laufzeitleistungsfehlers" sehe ich normalerweise so. Ob dies jedoch korrigiert werden muss (eine Codeänderung), ist kontextabhängig.
Denken Sie daran, dass Datenbanken viele Tools zur Verbesserung der Zeitkomplexität bieten. Um beispielsweise die besten N Ergebnisse aus einer Datenbank zu erhalten, sagen Sie es einfach. Wenn ineffizientes Kludge in einen integrierten optimierten Aufruf konvertiert wird, erscheint eine Erklärung überflüssig.
Der Grund, warum ich einen Algorithmus mit quadratischer Laufzeit für eine Codeüberprüfung (Diskussion) halte, ist nicht so sehr, dass er langsam ist (langsam ist relativ; quadratisch ist schnell im Vergleich zu exponentiell), sondern dass menschliche Intuition (wie Ihre Kunden oder Programmiererkollegen) fühlen sich mit einer Softwarefunktionalität, die aufgrund der Vermischung der Erwartungen aus dem Alltagsleben zu weit von der linearen Laufzeit abweicht, von Natur aus unwohl.
Viele Kundenbeschwerden über die Softwareleistung fallen in diese beiden Kategorien:
Das gesamte System (Software und Hardware) wurde basierend auf der geschätzten Nutzung spezifiziert. Letzte Woche läuft alles gut, eine bestimmte Funktionalität hat weniger als 5 Sekunden gedauert. Diese Woche nach der Installation eines Updates dauert die gleiche Funktionalität länger als 1 Minute.
- Dies ist ein Vergleich mit einer zuvor gemessenen Leistung. Der Kunde hält die zukünftige Leistung für einen absoluten Maßstab menschlicher Zeitskala (von Sekunden bis Minuten).
Ich habe 100 Aufträge an das System übermittelt. Warum dauert die Bearbeitung 400-mal so lange wie ein einzelner Job?
- Der Kunde erwartet eine lineare Bearbeitungszeit. In der Tat kann der Kunde nicht verstehen oder akzeptieren, dass es Aufgaben gibt, die langsamer als linear sind.
Aus diesem Grund wird ein Kunde die Ausführungszeit als Fehler betrachten, wenn beide zutreffen:
- Langsamer als linear
- Auffällig (dh fällt in den menschlichen Zeitbereich (länger als Sekunden oder Minuten) bei typischen Aufgabengrößen)
Berechtigte Argumente, die erklären, dass ein quadratischer Laufzeitalgorithmus kein Problem darstellt (dh keine Codeänderung verdient):
- Die Größe der Aufgabe, die normalerweise von dieser quadratischen Laufzeitfunktion verarbeitet wird, ist etwas begrenzt
- In Anbetracht des typischen Größenbereichs ist die tatsächliche (absolute) Ausführungszeit immer noch klein genug, um verworfen zu werden
- Wenn ein Benutzer tatsächlich versucht, eine Aufgabe zu senden, die groß genug ist, um erkennbar zu sein, erhält der Benutzer eine Warnmeldung über die lange Laufzeit
- Die Benutzer des Systems sind alle Experten und wissen daher, was sie tun. Beispielsweise sollten Benutzer einer API das Kleingedruckte in der API-Dokumentation gelesen haben.
Viele Algorithmen, die für die typische Anwendungsentwicklung nützlich sind, sind tatsächlich langsamer als linear (meistens O (N log N), wie beim Sortieren). Daher wird eine umfangreiche Software tatsächlich versuchen, dies zu umgehen, indem nur der relevante Teil des Dokuments sortiert wird Daten oder Histogramm (statistische) Filtertechniken verwenden, die einen ähnlichen Effekt erzielen.
Dies gilt für Softwarekunden. Wenn Sie jedoch die Benutzer einer Softwarebibliothek oder einer API-Funktion ebenfalls als "Kunden" betrachten, gilt die Antwort weiterhin.