2008-08-18 14 views
2

質問することができるデータ構造があります最後にいくつの項目がありますかXアイテムは単純な識別子またはより複雑なデータ構造であってもよく、好ましくは、アイテムのタイムスタンプは、(ハッシュまたは同様のものとして、同じアイテムを有する複数のアイテムに問題を有することを望まないタイムスタンプ)。Cのエージングデータ構造

これまでのところ、LINQでは、ある時間よりも長いタイムスタンプを持つアイテムを簡単にフィルタリングし、カウントを集計することができたようです。私の生産環境に.NET 3.5固有のものをまだ使用しようとするのは躊躇しますが。同様のデータ構造について他に提案はありますか?

私が興味を持っている他の部分はエージング古いデータが出ている、私は6時間未満のアイテムのカウントを求めるつもりならば、それより古いものはすべて削除したい私のデータ構造はこれが長時間実行するプログラムかもしれないからです。

答えて

3

これには単純なリンクリストを使用できます。

基本的に新しいアイテムを最後に追加し、最初からあまりに古いアイテムを削除すると、安価なデータ構造になります。

例-コード:

list.push_end(new_data) 
while list.head.age >= age_limit: 
    list.pop_head() 

リストは、剪定を可能にツリー構造または類似のものを使用し、その後、私はdmoに同意し、一度に一つのより大きな部分をオフにチョッピング値するほど忙しくなる場合より高いレベルで。

2

重要な考慮事項は、クエリの頻度と追加/削除の頻度です。あなたは、いくつかのスレッドが通過し、定期的にこの木をきれいに持っている可能性があり

http://en.wikipedia.org/wiki/B-tree

:(あなたが大規模なコレクションを持っています場合は特に)あなたが頻繁に照会を行います場合はB-treeが移動するための方法かもしれ検索の一部にすることもできます(再度、用途に応じて)。基本的には、「x分前」という場所を見つけるためにツリー検索を行い、新しい時間を持つノード上の子の数を数えます。ノードの下にある子どもの数を最新の状態に保つと、この合計はすぐに実行できます。