在.tar存档中列出文件名的时间复杂度是多少?
是O(size(file))
还是O(# of files in archive)
?
根据这篇维基百科文章(https://en.wikipedia.org/wiki/Tar_(computing)),tar档案不支持随机访问,为了列出文件名“必须阅读整个档案”,我将其理解为{{1} }。另一方面,tar中的每个文件都有一个标题,用于指定文件的长度,因此我们可以为其中的每个文件执行一次hdd搜索,因此在这种情况下,时间复杂度仅为O(size(file))
。 / p>
那么.tar.gz档案怎么样呢?我想在这种情况下,我们将无法进行多次搜索而无需解压缩,无论如何都需要O(# of files in archive)
?
答案 0 :(得分:0)
取决于您的存储空间!
未压缩的tar
对于磁带存档(你知道," tar" s),线性到字节长度,无论如何,因为快进仍然是你需要快进的长度的线性。 / p>
对于现代存储上的小文件:相同;你不要问你的SSD有20个字节的存储空间。你一次得到4kB;理论上,这意味着您可以立即跳过该1GB文件。在实践中,我的经验告诉我,没有发生;老实说,我不知道为什么。对我来说," next_block_after"功能应该向前跳过。 耸肩
压缩tar
是的,一般来说,您必须解压缩以了解内容在某个地方寻找多长时间。我不认为有一种压缩格式可以保留某种表格,其中包含"中间"长度加快寻求。