怎样才能在一张光盘上存放最多的文件,同时留下最少的可用空间?

怎样才能在一张光盘上存放最多的文件,同时留下最少的可用空间?

我已经完全重写了这个问题,因为我第一次尝试时没有很好地描述它,但它仍然是同一个问题。假设您有一堆大小不一的文件,需要将它们放在光盘上进行备份。这些文件不需要保留任何目录,也不需要以任何特定顺序存储。最终目标只是为每张光盘留下最小的可用空间。我不想使用像 7zip 这样的压缩程序将存档拆分到光盘上,因为如果一张光盘丢失/损坏,那么所有数据都将无法读取。这个问题只是为了了解你如何做到这一点,我知道存储很便宜,而且这个过程可能很耗时。我只是好奇,想了解如何做到这一点。作为一个非常基本的例子,请看下面;

我想将这六个文件(总计 89MiB)存储在两个 50MiB 的磁盘上。这是一个非常基本的例子。至少从心理方程的角度来看,增加文件数量和增加随机大小似乎使这变得不可能。A.7z
- 10MiB
B.7z - 20MiB
C.7z - 30MiB
D.7z - 10MiB
E.7z - 07MiB
F.7z - 12MiB
如果我按照 ABC 顺序,这些文件将需要第三张光盘。但是,如果文件 B 和 C 一起放在第一张光盘上,而 A、D、E 和 F 放在第二张光盘上,则只需要两张光盘。

答案1

可能有更好的方法可以做到这一点 - 特别是在边缘情况下,但我想这将为一般情况提供相当紧密的契合。

  1. 复制所有文件并使用您能使用的最佳压缩程序单独压缩它们。(7z 或 xz?)

  2. 查看压缩文件,找到适合磁盘的最大压缩文件,然后找到适合的最大压缩文件并重复,直到没有剩余空间。将每个文件的未压缩版本作为单个存档压缩到磁盘上。如果剩余空间不小于任何剩余的压缩文件,则重复此过程并添加更多未压缩版本的压缩文件。(压缩多个文件可能会比原始文件产生更好的压缩效果 - 这既是因为文件末尾浪费了空间,也是因为更好的字典在压缩更多数据时能够实现更好的压缩效果)。

  3. 删除已压缩到最终存档中的单个压缩文件。

  4. 重复步骤 2-3,直到没有剩余文件。

我观察到,使用最大优先原则单独压缩文件,然后将它们复制到磁盘,并且假设磁盘是空白的,将为您提供从部分损坏中恢复数据的可能性。如果文件不小(在这种情况下浪费的磁盘空间将是一个问题),这可能是一个不错的折衷方案。您需要确保您使用的压缩程序具有可被 photorec 等程序识别的签名。

根据您要复制到的磁盘和生成的文件的大小,您可能希望使用未格式化的磁盘来存放单个大型存档(更难检索,但空间最大)或减小块大小以减少小文件后浪费的空间填充。

相关内容