| 

.NET C# Java Javascript Exception

5
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.
16.03.2011
Gast
51 2
als Ergänzung: die Daten sind in einem Array

array(
0 => 29,
1 => 54,
2 => 33,
3 => 62,
4 => 21,
....
)
blackdog9 16.03.2011
2 Antworten
4
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

Grüße
CRegenschein
16.03.2011
CRegenschein 635 1 9
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.
huckepick 17.03.2011
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.
Floyd 17.03.2011
1
Hier etwas pseudo-Code da ich mich mit php nicht wirklich auskennen:

Gegeben ist ein Array mit 50 Werten.
Gewünscht ist ein Diagramm mit 10 Punkten.

var werte[49] {1,5,10,4,6,.......} //ein Array mit 50 Werten

var punkte[9]; //Ziel-Array welches die Werte für genau 10 Punkte im Diagram enthällt

for(var iii=0; iii<=werte.length;iii++){
punkte[floor(i/5)] += werte[iii];
}
for(var iii=0; iii<=punkte.length; iii++){
punkte[iii] = punkt[iii] / 5;
}


Anmerkung: Der Schleifenzähler heißt "iii" weil CodeKicker mit [ ] und i nicht wirklich klar kommt.

Diese Methode teilt das Eingabe-Array in 10 Teile a 5 Werte und errechnet den Mittelwert pro Abschnitt.
16.03.2011
Floyd 11,0k 3 9
Floyd 11,0k 3 9
1
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
CRegenschein 18.03.2011

Stelle deine Algorithmus-Frage jetzt!
infounit Software GmbH
InnoGames GmbH
myfactory International GmbH