さまざまなサイズの何百ギガバイトものアセットがある場合、Blu-ray ディスクのセットを満たすための最適なアルゴリズムは何ですか?
多数の古い CDROM、DVD、および小型のハード ドライブを統合し、すべてを MD5 署名によってインデックス化されたデータベースに格納しようとしています。確かに大変な作業です。
私が現在行っていることは、アセット サイズ (通常はディレクトリ サイズ) を降順で並べ替え、塗りつぶしリストに最大のアセットを挿入し始め、アセットがなくなるまで収まらないものをスキップすることです。ほぼ瞬時に実行されますが、必要に応じて 1 回だけ一晩実行してもかまいません。
通常は 95% 以上の使用率が得られますが、他の組み合わせを使用して効率を高める方法があると確信しています。ディスク イメージのような巨大なアイテムの場合、この原始的な方法では使用率が非常に低くなります。
私の考えは、取得したアセットのすべての組み合わせ、1、2、3、... の項目を一度に取得し、合計する配列を指す最大バイト数 < 25,025,314,816 バイトの実行値を維持することです。一度に非常に多くのアセットを取得し、どの組み合わせも適合しないという点に到達したら、実行を停止して、実行中の最も高いカウンターが指す配列を使用します。
これは可能な限り最高のアルゴリズムですか?
Algorithm-Combinatorics と Math-Combinatorics の 2 つの Perl モジュールがタスクに適していると思われます。どちらがより速く、より安定しており、よりクールかについて何かアドバイスはありますか?
私の計画は、多数のディレクトリのサイズを計算するスクリプトを作成し、書き込む数十のディスクの最適な内容を表示することです。
また、同じディスク上にディレクトリ全体が必要なため、ファイルごとに入力するだけでは不十分です。