Bei einem Diagramm soll immer eine bestimmte Anzahl an Werten angezeigt werden. Von der Datenquelle können aber eventuell mehr Werte geliefert werden. Wie kann ich am besten die Anzahl der Werte reduzieren ohne das Diagramm zu verzerren. Zu beachten ist dass die Punkte im Diagramm immer den gleichen abstand haben. Ich benutze PHP, aber auch pseudo code wäre in Ordnung.
Das klingt mir danach, dass Du nach einer bestimmten Anzahl an möglichst gut passenden Mittelwerten suchst. Sollen die Werte zwischen den Messpunkten auch interpoliert werden ("rund"), oder die neu entwickelten Werte einfach durch eine gerade Linie verbunden werden ("zackig")?
Spontan fallen mir zwei Methoden ein:
* Regression mit der Methode der kleinsten Quadrate * k-Means
Welche Methode sinnvoll ist, hängt wohl vom Einsatzbereich ab, bzw. von den Anforderungen an die Genauigkeit.
Am günstigsten erscheint mir die vorgeschlagene "Methode der kleinsten Quadrate", bei der man dann nur die Werte für die vorher festgelegten X Punkte ausgibt. Das ist aber recht aufwendig und rechenintensiv, wenngleich auch sehr genau.
Floyds Methode ist sozusagen die hemdsärmelige Lösung, die im Idealfall exakt die gleichen Ergebnisse liefert, im ungünstigsten Szenario (extreme Abweichungen der Werte voneinander) aber auch ein stark verzerrtes, unbrauchbares Ergebnis liefern.
Richtig, meine Methode wird mit der Anzahl der Eingangswerte immer genauer, wobei ich nicht der meinung bin das das Ergbnis stark verzehrt wird. Wenn ich das mal bildlich vergleichen darf: Du schaust von einem Turm in die Ferne. Du sieht am Horizont Grau, Grüne und Weiße Punkte (Städt, Wälder und Wolken). Jetzt nimmst du ein Fernglas und wirst sicherlich die einzelnen Grautöne (ggf. sogar Schwarz als Extreme Abweichung) der Stadt unterscheiden können. Aber nur weil du die Auflösung verändert hast. Der Mittelwert bleibt trotzdem der selbe.
Diese Methode ließe sich ja auch zum k-Means ausweiten, falls man keine guten Ergebnisse erzielt. Der Vorteil von k-Means ist, dass es sich seine "Fenster" selbst sucht, wohingegen hier im Pseudo Code das Fenster immer 5 Schritte weiter geht
array(
0 => 29,
1 => 54,
2 => 33,
3 => 62,
4 => 21,
....
)