2

数百万の整数を保存する必要があるアプリケーションがあります。それらをルックアップテーブルに保存する必要があります。明らかに、そのような量のデータをメモリに保存することはできません。私の要件では、保存する必要があるのは非常に限られています組み込みシステムのデータなのでスペースが非常に限られているため、ルックアップテーブルの削減に使用できる推奨方法についてお尋ねしたいと思います。ニューラルネットワークなどの関数近似を使用できません。値はテーブルにある必要があります。現時点では、整数の範囲は不明です。整数と言うときは、32 ビット値を意味します。

基本的には、いくつかの圧縮方法を使用してメモリの量を減らしますが、多くの精度を失うことはありません。これはハードウェアで実行する必要があるため、計算オーバーヘッドが非常に高くなることはありません。

私のアルゴリズムでは、テーブルの 1 つの値にアクセスして、それを使用していくつかの操作を行い、値を更新する必要があります。最後に、インデックスを渡して値を取得する関数が必要です。その後、別の関数を使用してテーブルに値を書き込む必要があります。

タイルコーディングと呼ばれるものを見つけましたhttp://www.cs.ualberta.ca/~sutton/book/8/node6.html、これはいくつかのルックアップテーブルに基づいていますが、他の方法を知っている人はいますか?

ありがとう。

4

5 に答える 5

1

格納する必要がある数値の種類を調べて、それらの多くに共通する情報を引き出します。たとえば、それらが密集している場合は、平均を取得して保存し、オフセットを保存できます。オフセットのビット数は元の数値よりも少なくなります。または、それらが多かれ少なかれ均一に分布している場合は、最初の数値を保存してから、次の数値へのオフセットを保存できます。

数字を調べるためのキーが何であるかを知っておくと役立ちます。

于 2008-12-02T22:08:08.453 に答える
0

http://www.cs.ualberta.ca/~sutton/RL-FAQ.htmlを読む

「関数近似」とは、単純なテーブルではなく、パラメータ化された関数形式を使用して値関数(および/またはポリシー)を表すことを指します。」

おそらくそれが当てはまります。また、追加の事実で質問を更新します。コメントで答えるだけではありません。


編集。

ビット配列は、数百万の数値ごとにビットを簡単に格納できます。100万から800万の範囲の数があるとしましょう。1メガバイトのストレージでは、セット内の各数値に対して1ビット、セット内にない各数値に対して0を使用できます。

100万から3200万の範囲の数値がある場合、32Mの個別の数値すべての大きなテーブルには、4Mbのメモリが必要になります。

Pythonの最新の高性能ブルームフィルターに対する私の答えを参照してください。無制限のサイズのビット配列のPython実装の場合。

于 2008-12-02T22:23:04.040 に答える
0

問題の番号の存在を単に探している場合は、ブルーム フィルターを探している可能性があります。正直なところ、あなたの質問はかなり曖昧で混乱しています。Q 値とは何か、および表でそれらを見つけたら、それらをどうするかを説明すると役立ちます。

于 2008-12-02T22:40:47.577 に答える
0

問題の詳細が必要です。整数の実際の値を保存できず、代わりに近似値を保存する場合、それはデータ (詳細) の一部を削減 (破棄) することを意味します。正しいですか? それ自体がアートフォームになる可能性のあるハッシュを探していると思います。たとえば、32 ビット値があるとします。1 つのハッシュは 4 バイトを取り、それらを一緒に xor することです。これにより、単一の 8 ビット値になり、ストレージが 4 分の 1 に減りますが、元のデータの実際の値も減ります。 . 通常、さらに先に進むことができます。おそらく、これらの 8 ビットのうちのいくつかのみを使用し、下位 4 ビットと言って値をさらに減らします。

私の本当の問題は、データが必要かどうかのどちらかだと思います。データが必要な場合は、データを圧縮するか、保存するためのメモリを増やす必要があります。そうでない場合は、何らかのハッシュを使用して、ストレージ用のメモリ量に達するまでビット数を減らします。

于 2008-12-02T22:05:41.530 に答える