Oft möchte ich die Laufzeitleistung mehrerer Implementierungen derselben Funktion vergleichen. Für einzelne Eingaben ist Kriterium ein gutes Werkzeug.
Aber was ist ein einfacher Weg, um die Leistung des Codes über variierende Eingabegröße, z. um die algorithmische Komplexität zu sehen?
Idealerweise gebe ich der Bibliothek einen Wert vom Typ Benchmarkable r => [(String, Int -> r)]
, dh eine Liste größenabhängiger Benchmarks, und die Bibliothek findet automatisch den sinnvollen Eingabebereich für jeden Wert und erstellt daraus eine schöne Grafik.
z.B. um die algorithmische Komplexität zu sehen?
Dafür gibt es ein Paket:
Normalerweise verwende ich QuickCheck, um Tests mit zufälligen Datengrößen durchzuführen, und plotte das Ergebnis dann.
Tags und Links haskell benchmarking criterion time-complexity graph