这些文件修改的时间复杂度(相对于文件大小)是多少?
我希望覆盖和追加都很快。如果文件的结构类似于C ++的deque
,我可以看到前置速度足够快,但我从未见过允许低级前置的语言。我怀疑插入中间的速度很快,尽管我认为有数据结构可以使它快速。
答案 0 :(得分:2)
在大多数文件系统中:
插入的O(n + m)是最坏的情况。当您插入文件时,您必须从插入点向下移动文件中当前的所有字节,以便插入n个字节的孔。所以如果你有:
This is a test system.
你想在“测试”之后插入“紧急广播”,然后你首先要为插入的文字打个洞:
This is a test system.
然后插入新文本:
This is a test of the emergency broadcast system.
通过这种方式,文件在概念上非常类似于数组。如果你想在前面或中间插入一些东西,你必须为它做一个洞。如果你想删除某些东西,你必须填补无效空间。
有些文件系统允许您从非连续块中一起修补文件。也就是说,你可以拥有逻辑上的东西:
<pointer to "This is a test" chunk>
<pointer to "of the emergency broadcast" chunk>
<pointer to "system." chunk>
文件系统负责根据需要拆分和合并块。这些文件系统并不罕见,但普通程序通常不使用该功能。