web-dev-qa-db-ja.com

まとめながら、または後にリストを並べ替えますか?

さまざまなログファイルから非常に大量のネットワークデータを読み取り、そのデータに関する関連情報を収集して統計分析を実行する必要があります(上位のコミュニケーター、平均で最大のパケット、平均のパケットサイズを送信する上位のIPアドレス、など)私は、外側の配列の各インデックスが、昇順で並べ替えられたIPのリストに対応するマトリックスを作成することにしました。

私のデータセットを理解するために、その日にネットワーク内で発生したすべての通信に関する情報を含むログファイルを毎日生成しています。私は5月中旬からログファイルを生成しており、各ログファイルにはそれぞれ約500万行あるので、このプログラムが効率的であればあるほど優れています。

私の質問は次のとおりです:

すべてのログファイルのデータをこのマトリックスにコンパイルするとき、データをまとめている間にIPで外側のアレイレイヤーを並べ替えるか、新しいIPをファイルの最後に追加するだけでいいですか?それらを後でリストをソートしますか?私が考えていないより良い選択肢はここにありますか?どの方法が最も効率的ですか? python 2.7、それが違いを生む場合、使用します。また、私ができることの制限のため、私はできないに新しいモジュールをインストールしますマシンこのコードが実行されるので、pythonでデータベースをネイティブに作成できない限り、それは私が利用できるオプションではありません。

5
Ben Schwabe

挿入ソートは、すでにソートされているものに新しい値を挿入するときに最適に機能します。だから私がやろうとしていることは、Quicksortを使用して元のデータセットをソートし、追加のログエントリが来たら、それらを1つずつ、すでにソートされているセットに追加することです。

クイックソートがO(n * logn)で、挿入ソートがO(n)である場合、すでにソートされたセットで使用すると、すべての合計時間はO(a * log(a)+ b)、aは元のデータセットのサイズ、bは後で配置する追加のログです。

5
Lawrence Aiello