2017-09-27 6 views
0

私はある重み(i、j)関数に従って2つの要素のセットを(直線的に)一致させようとしています。私は今までmunkresを使用していましたが、結果だけで使用されるメモリ量(15000 x 15000 x sizeof(float))が大きすぎます。私の次の賭けはオークションアルゴリズムでしょうが、それが私の基準に合っているかどうかはわかりません。中規模のセットを使用したメモリ効率的な重み付きセット割り当て

片側にのみ表示される要素がある場合があります。最適で簡単な解決法が望ましい。私はちょうど正しい方向にヒントが必要です、どうもありがとうございます。

+1

記述する構造は858 MBです。あなたのサイズの制限は何ですか? –

+0

私は32ビットの制限とメモリをとっているGUIパーツに拘束されています。最大約1GBですが、連続した1ブロックのメモリはありません。私は現在の実装を適合させることができるかもしれませんが、回避策でのみ可能です。また、より速く、より良い。 – SirPolly

+0

または:ユーザーが数百万の要素をスローした場合、クラッシュしないようにします。 – SirPolly

答えて

0

重量が計算されたら、それを正確に保存する必要はありません。 half-precision floating point値、またはその他の16ビット形式を使用すると、ストレージ要件をすぐに858 MBから429 MBに削減できます。たとえば、重みの範囲に応じて、重みの対数をとり、16ビット整数として格納することができます。または、元の32ビット浮動小数点数の指数部のみを格納することもできます。これは単なる8ビットで、ストレージを215 MBに削減します。

重みが変換(または量子化)されたら、アルゴリズムを通常どおりに適用できます。

+0

私はそれをして、それは動作します...一種。それはもはやクラッシュしませんが、Munkresの実装は役に立たないほど遅いです。たぶんあなたに私をさらに導くアイデアがあります。 – SirPolly

+0

コードを投稿する必要があります。しかし、それが最良の公表された実装に従って行われた場合、恐らくおそらく私たちはもっと良いことはしません。 –

関連する問題