2009-06-29 3 views
0

Ich habe eine interessante Aufgabe bei der Arbeit - ich muss herausfinden, wie viel Zeit der Benutzer damit verbracht hat, etwas zu tun, und alles, was ich habe, sind Zeitstempel seiner Ersparnisse. Ich weiß in der Tat, dass der Benutzer nach jeder kleinen Portion Arbeit spart, also sind sie nicht weit voneinander entfernt. Die naheliegende Lösung wäre, herauszufinden, wie viel Zeit ein kleines Objekt möglicherweise braucht, und dann einfach sortierte Zeitstempel durchzugehen. Wenn der Unterschied zwischen dem aktuellen und dem vorherigen mehr ist, bedeutet dies, dass der Benutzer eine Kaffeepause einlegen musste und wenn es weniger ist, können wir diese Differenz zur Gesamtsumme addieren. Einfaches Beispiel-Code zeigen, dass:Wie berechne ich die Zeitspanne von Zeitstempeln?

var prev_timestamp = null; 
var total_time = 0; 
foreach (timestamp in timestamps) { 
    if (prev_timestamp != null) { 
     var diff = timestamp - prev_timestamp; 
     if (diff < threshold) { 
       total_time += diff; 
     } 
    } 
    prev_timestamp = timestamp; 
} 

Das Problem ist, während ich weiß, wie viel Zeit auf einem kleinen Teil ausgegeben wird, will ich nicht darauf angewiesen. Was ist, wenn ein Benutzer gerade so viel langsamer als meine Vorhersagen ist, will ich nicht, dass er ohne Gehaltsscheck bleibt. Also dachte ich, könnte es eine clevere mathematische Lösung für dieses Problem geben, die ohne Wissen darüber funktionieren könnte, welches Zeitintervall akzeptabel ist?

PS. Entschuldigung für Missverständnisse, natürlich würde niemand Leute basierend auf diesen Zahlen bezahlen und selbst wenn sie es würden, verstehen sie, dass es nur eine Annäherung ist. Aber ich würde gerne eine Lösung finden, die Zahlen so realitätsnah wie möglich aussendet.

+1

"ohne Gehaltsscheck"? Sie sagen, Ihr Algorithmus wird über die Zahlungen der Leute entscheiden? Ich würde nicht gerne an so etwas arbeiten ... – balpha

+0

Ich bin ein wenig übertrieben hier :) Aber diese Zahlen werden zu allen möglichen Leuten gezeigt, also wer weiß ... – vava

+0

Ich denke, dass Sie vielleicht auspeitschen möchten ein Wahrscheinlichkeits-und Statistikbuch und stellen Sie sicher, dass Sie nicht die Mathe nur für den Fall, dass dies mit jemandes Chaos bezahlen – SpaceghostAli

Antwort

2

Sie müssen entweder die standard deviation für die Gruppe aller Benutzer oder die variance in den Intervallen für einen einzelnen Benutzer oder besser eine Kombination der beiden für Ihren Beispielsatz betrachten.

5

Sie könnten den Median TimeSpan erhalten und dann die TimeSpans verwerfen, die ausgeschaltet sind, sagen wir> 50%.

Aber dieser Algorithmus sollte IMHO nur verwendet werden, um geschätzte verbrachte Stunden pro Projekt zu erhalten, nicht für Gehaltsabrechnungen.

+1

Ich stimme dir zu Groo Ich würde definitiv nicht an diesem Ort arbeiten wollen ...;) –

+0

Das ist auch offensichtlich, ich mag wirklich etwas mit Mathe, die es auf einmal berechnen könnte . – vava

1

Schnappen Sie sich alle Perioden und schauen Sie sich den Durchschnitt an? Wenn einige weit außerhalb der durchschnittlichen Spanne liegen, können Sie sie verwerfen oder im Durchschnitt einen angepassten Wert für sie verwenden.

Ich stimme mit Groo überein, dass die Verwendung von etwas, das nur auf dem Zeitstempel "save" basiert, NICHT das ist, was Sie tun sollten - es wird Ihnen NIEMALS die tatsächliche Zeit für die Aufgaben liefern.

1

Die clevere Mathematik, die Sie suchen, heißt "Standardabweichung".