假设您有一个由一堆固定大小的块组成的大文件。每个块都包含一些可变大小的记录。每个记录必须完全适合在一个块内,然后根据定义这些记录永远不会大于完整块。随着时间的推移,随着记录来自这个“数据库”,记录被添加到这些块并从这些块中删除。压缩文件中记录的压缩算法是什么?
在某些情况下,尤其是在将许多记录添加到数据库并删除多个记录之后 - 许多块最终只能部分填充。
什么是一个很好的算法来混洗这个数据库中的记录,通过更好地填充部分填充的块来压缩文件末尾的不必要的块?
算法的要求:
- 压实必须到位原始文件的发生没有暂时超过几个街区最多从其起始大小
- 算法应避免不必要地延长了文件干扰已经主要完成的块
- 必须从文件中一次读取或写入整个块,并且应该假定写入操作相对昂贵
- 如果将记录从一个块移动到另一个他们必须被添加到他们的新位置,然后再从他们的起始位置移除,以便在操作中断的情况下,由于“失败”压缩而没有记录丢失。 (假设这种记录的临时重复可以在恢复时检测到)。
- 可以使用该操作的内存只能是也许还有好几个块的顺序是整个文件的大小
- 的比例很小就假设记录的10个字节的顺序与1K字节平均大小可能为100字节。固定大小的块大小为4K或8K,文件大小为1000块。
这种方法基本上就是我们开始的地方,但它证明记录大小的不规则性通常会留下次优压缩块。随着一些愿意搜索更多,可以找到更好的配合,但随后它变成NP难,现在寻找更多的启发法。 – 2008-09-25 18:06:04
在任何情况下,谢谢你的建议! – 2008-09-25 18:06:37
不客气。我希望调整一次保存在内存中的块的数量会有所帮助。如果你在内存中保留了十块大小的记录,我认为你通常可以很好地填充大部分块。 – 2008-09-25 18:27:40