2012-04-12 27 views
0

特定の構造を含む大きなファイルがあります。構造内の特定のフィールドの上位10の最も一般的な値を知りたい。私はできるそれは単一の解析でですか?単一の解析で大きなファイルを解析する

+0

情報が不十分です。 –

+0

なぜこの情報が不足しているのですか?私の質問はほとんどが理論的には理論的です。 – liv2hak

答えて

1

フィールドと出現回数を含む連想配列を保存して更新する必要があります。いくつのフィールドがあるかによって、あなたの記憶は限界になります。

これが終わったら、値に基づいて並べ替えを行います。

AFAIK、Cには連想配列のデータ型が含まれていないため、サードパーティのライブラリを使用する必要があります。一部のオプションについてはLooking for a good hash table implementation in Cを参照してください。

ソートはhttp://linux.die.net/man/3/qsortです。

メモリ要件を無視して、1回のパスで実行できます。

+0

私が話しているファイルは非常に巨大で、メモリ内のすべての発生を記憶する可能性はほとんどありません。私は最初の10または20を格納すると言う。ファイルの後半がすべて1つの値になる可能性があり、それは私の計算を台無しにするだろう。 – liv2hak

+1

はい、ファイルを調べて、すべての単一フィールドの数を保持する必要があります。私はあなたが単一の構文解析を要求したことを知っていますが、万一マップの縮小を考慮しましたか? :) –

+0

マップは、このアルゴリズムのための非常に良いオプションができますマップを考えに来た。あなたの提案はapprec.thanksです。 – liv2hak