1

AI アルゴリズムをトレーニングしてテストするには、ファイルから読み取った数千のデータを使用し、そのデータを何百回も繰り返し使用する必要があります。現在、考えられる解決策は 2 つあります。1 つは、何千ものデータを使用する必要があるたびに、ファイルから直接読み取り続けることです。もう 1 つは、ファイルから読み取り、データを ArrayList に格納してから、arraylist をループして繰り返し使用することです。どちらの方法が速いですか?可能であれば、誰かが 2 つの方法のそれぞれに大きな o 表記を提供してくれませんか? また、この問題に対処するまったく新しい方法で、過剰な量のデータを読み取るのにかかる時間を短縮できる可能性はありますか?

4

5 に答える 5

2

両方の簡単なパフォーマンス テストを作成する必要がありますが、ディスクから読み取り、arraylist を介して結果をメモリにキャッシュすると、毎回勝つと確信しています。ファイル IO のオーバーヘッド/レイテンシーにより、読み取るアイテムの数が増えると、結果が発散します。

于 2010-02-10T17:42:16.447 に答える
2

データをシリアルに使用しますか、それともランダム アクセス方式で使用しますか? ランダム アクセスの場合は、ファイル ポインタを移動する必要がないため、一度メモリにロードする方が高速な場合があります。各反復でデータの操作を行うためにメモリを割り当てる必要がある場合、大きなペナルティが発生しますが、それ以上の情報がなければ、それが何であるかはわかりません.

データにシリアルにアクセスする場合、2 つの方法の「ビッグオー」に違いはありません。OS と物理アーキテクチャに完全に依存します。優れたファイルシステム キャッシングを備えた優れた OS では、2 つの方法は類似しているはずです。メモリ割り当てを保持する必要がないため、配列リストでのキャッシングに速度の利点があり、ファイルからの読み取りにスペースの利点があります。

私の最善のアドバイスは、ターゲット OS と CPU で両方の方法を実装して時間を計ることです。CPU 処理速度、CPU メモリ キャッシュ、RAM、およびディスク アクセスの速度には桁違いの違いがあるため、最新のアーキテクチャでのパフォーマンスは、まったく同じ big-o を持つ 2 つのアルゴリズムがある場合に予測するのが非常に困難です。

于 2010-02-10T17:51:13.823 に答える
1

私はそれを考えます:

  • ArrayList からの読み取りははるかに高速です。
  • 大きなOは同じですが、異なるのは操作の時間の単位です

問題は、メモリがこれらすべてを保持するのに十分な大きさでない場合に発生します。次に、(メモリ)サイズの速度と引き換えに、ファイルを使用することに頼る必要があります。

于 2010-02-10T17:43:15.760 に答える
1

他の人が言ったように、big-O 分析も同じです。

これは、常に最初にすべてのデータを読み込んでから、毎回同じ方法でデータを再利用しているためです。

これは、漸近分析が常に十分ではない理由の良い例です。ここでの違いは、メモリとディスク I/O によるものです。ディスク I/O にはミリ秒かかる傾向があります。データを適切な方法でキャッシュできる場合、メモリにはマイクロ秒かかり、ナノ秒に近づく可能性があります。

ただし、すべてがメモリに収まらない場合は、ファイル読み取りアプローチを使用するしかありません。そして、それは遅くなります。しかし、残念ながら、それは時々起こる方法です。

于 2010-02-10T17:54:42.787 に答える
0

ビッグオー分析は必要ありません。メモリ I/O は常にディスク I/O (可動部分) よりも優れています。メモリ ベースの並べ替えアルゴリズムとディスク ベースの並べ替えアルゴリズムを比較するだけで、すぐにわかります。

データが多すぎてメモリに収まらない場合は、ディスク I/O を考慮する必要があります。

于 2010-02-10T17:50:20.220 に答える