Ich brauche eine Datenstruktur, die im Grunde eine Liste von Datenpunkten ist, wobei jeder Datenpunkt einen Zeitstempel und einen doppelten [] Datenwert hat. Ich möchte in der Lage sein, den nächsten Punkt zu einem bestimmten Zeitstempel oder zu allen Punkten innerhalb eines angegebenen Bereichs von Zeitstempeln abzurufen.beste Datenstruktur für sortierte Zeitreihendaten, die Sub-Arrays schnell zurückgeben können?
Ich benutze C#. Ich dachte, eine reguläre Liste wäre möglich, wobei "Datenpunkt" eine Klasse ist, die die Zeitstempel und doppelte [] Felder enthält. Dann, um einzufügen, würde ich die integrierte binarysearch() verwenden, um zu finden, wo die neuen Daten eingefügt werden, und ich könnte es wieder verwenden, um die Start-/Ende-Indizes für eine Bereichssuche zu finden.
Ich habe zuerst Sortedlists versucht, aber es scheint, als ob Sie nicht durch die Indizes i = 0,1,2, ..., n, nur durch Tasten durchlaufen können, so war ich nicht sicher, wie die Reichweitensuche zu tun ohne irgendeine gewundene Funktion.
aber dann habe ich gelernt, dass die Liste <> 's einfügen() ist o (n) ... könnte ich nicht besser als das, ohne woanders zu opfern?
alternativ, gibt es eine nette linq-anfrage, die alles in einer Zeile erledigt?
LinkedList wird Allerdings war er sehr langsam bei der Suche nach der Reichweite, was er zu optimieren versuchte. –
stimme ich zu, aber es hängt von mehreren Faktoren ab. Ohne es mit einer Stoppuhr zu testen, würde ich nicht auf weiche Fakten zählen. Ich habe Fälle gesehen, in denen die Verwendung einer LinkedList tatsächlich schneller war. Es hängt von den Umständen ab. Wie ich schon sagte, wenn es mehr Inserts gibt, die das O (n) teuer werden, führt die LinkedList aufgrund von O (1) besser aus. Wenn mehr abgerufen wird, funktioniert eine sortierte Liste <> besser als fast alles andere. – grover