データを DVD にアーカイブしていますが、DVD をフルパックしたいと考えています。DVD に入れたいすべてのファイルの名前とサイズはわかっていますが、メタデータがどのくらいの容量を占めているかわかりません。各 DVD にできるだけ多くのファイルを入れたいので、貪欲なビン パッキングを使用した Bubblesearch ヒューリスティックを使用しています。10,000 通りの選択肢を試して、最良の選択肢を見つけます。現在、すべてのファイルのサイズはわかっていますが、ファイルが ISO 9660 ファイルシステムにどのように格納されているかがわからないため、メタデータ用に多くのスロップを追加しています。スロープを減らしたいです。
遅すぎることを除いて、私は使用できgenisoimage -print-sizeました--- 500MB を占める 40,000 個のファイルを考えると、約 3 秒かかります。DVD 1 枚につき 8 時間かかるということはありません。以前にソースを変更したgenisoimageことがありますが、ソース コードからアルゴリズムを絞り出すことにあまり熱心ではありません。誰かが見積もりを取得するためのより良い方法を知っているか、役立つ仕様を教えてくれることを願っています.
問題と質問の明確化:
複数の DVD に分割されたアーカイブを書き込む必要があり、通常は一度に 5 枚程度です。私が解決しようとしている問題は、各 DVD (最後を除く) ができるだけいっぱいになるように、各 DVD にどのファイルを配置するかを決定することです。この問題は NP 困難です。
私は、標準の貪欲なパッキング アルゴリズムを使用しています。このアルゴリズムでは、最大のファイルを最初に配置し、十分なスペースがある最初の DVD に配置します。だからj_random_hacker、私は間違いなくランダムから始めていません. ソート済みから開始し、Bubblesearch を使用してファイルがパックされる順序を乱します。この手順により、パッキングが推定容量の約 80% から推定容量の 99.5% 以上に改善されます。この質問は、容量をより適切に見積もることに関するものです。現在、私の推定容量は実際の容量よりも低くなっています。
私は 10,000 回の摂動を試みるプログラムを作成しました。それぞれの摂動には次の 2 つのステップが含まれます。
- ファイルのセットを選択
- これらのファイルが DVD で占める容量を見積もる
ステップ2は私が改善しようとしているステップです。タイラー D が示唆するように、現在、私は「注意を怠っている」。しかし、私はもっとうまくやりたいです。
genisomage -print-size遅すぎて使えない。同様に、ファイルをディスクに tar することはできません。これは単に速度が遅すぎるためですが、tar ファイルは ISO 9660 イメージと同じサイズではありません。これは、予測する必要がある ISO 9660 画像のサイズです。原則として、これは完全に正確に行うことができますが、その方法はわかりません。それが問題です。
注: これらのファイルは、3 TB のハード ドライブ ストレージを備えたマシン上にあります。いずれの場合も、ファイルの平均サイズは少なくとも 10MB です。場合によっては大幅に大きくなります。結局のところ、それは十分に高速になる可能性genisomageがありますが、私はそれを疑っています--- ISO イメージを /dev/null に書き込むことで機能するように見えます。 4.7GB。現在、または元の質問を投稿したとき、そのマシンにアクセスできません。夕方にアクセスできるときは、質問のより良い数字を取得しようとします. しかし、これが良い解決策になるとは思いませんgenisomageが、ファイルシステムがどのように機能するかを教えてくれるモデルを学ぶには良い方法かもしれません。ブロック サイズが 2KB であることは、すでに役に立ちます。
同じディレクトリ内のファイルが同じ DVD に書き込まれることを知っておくと、検索が簡単になる場合もあります。tar-before-burning を除外して、ファイルに直接アクセスしたい。(ほとんどのファイルはオーディオまたはビデオです。つまり、それらにgzip.