私は基本的にデータポイントのリストであるデータ構造が必要です。各データポイントにはタイムスタンプとデータ値のdouble []があります。特定のタイムスタンプに最も近いポイント、または指定されたタイムスタンプの範囲内のすべてのポイントを取得できるようにします。すぐにサブアレイを返すことができるソートされた時系列データの最良のデータ構造ですか?
私はC#を使用しています。私の思考は、 "datapoint"がタイムスタンプと二重の[]フィールドを含むクラスである、通常のリストを使用することでした。挿入するには、組み込みのbinarysearch()を使用して新しいデータを挿入する場所を探し、範囲検索の開始/終了インデックスを再度検索することができます。
ソートリストを最初に試しましたが、インデックスのi = 0,1,2、...、nをキーだけで繰り返すことはできないようですので、範囲検索を行う方法がわかりませんでした何らかの複雑な機能を持たない。
しかし、私はそのリスト<のインサート()がo(n)であることを知りました。他の場所で犠牲にすることなくそれ以上のことはできませんでしたか?
代わりに、私は1行ですべてのことを行う素晴らしいlinqクエリがありますか?
LinkedListの:-) 1行に私が望むすべてを行うことができ、このような素敵なLINQクエリを知っていたい「私は1行にしたい全力を尽くしますいくつかの素晴らしいLINQクエリがある」だろうしかし、彼は彼が最適化しようとしていたことだった彼の範囲の検索のために非常に遅くなる。 –
私は同意しますが、いくつかの要因によって異なります。ストップウォッチでテストすることなく、私はソフトな事実には言及しません。私は、LinkedListの使用が実際より速い場合を見てきました。状況によって異なります。 O(n)が高価になるという挿入が増えれば、LinkedListはO(1)の方がパフォーマンスが向上します。より多くの検索がある場合、ソートされたList <>は他のほとんどのものよりも優れたパフォーマンスを発揮します。 – grover