Algorithm 高效的文件存储算法

Algorithm 高效的文件存储算法,algorithm,file-io,storage,Algorithm,File Io,Storage,我们有n文件f1…fn需要存储在磁盘上。每个文件fi都是si如果您要按顺序排列文件,那么对于每个文件,您需要做出一个单一的决定——是否新建页面 有一个折衷办法:开始一个新页面通常会比拆分花费更少,但它会让你剩下的页面更少,这可能会使未来的决策成本更高 动态规划解决方案是测量这些决策的所有可能序列如何影响这种权衡 让MIN_COST(r,i)是布局第一个i文件的最低成本,同时在使用的最后一页中保留r字节。MIN_COST(r,i)=如果无法布局剩余r字节的第一个i文件,则为无穷大 对于r=B-s0

我们有
n
文件
f1…fn
需要存储在磁盘上。每个文件
fi
都是
si如果您要按顺序排列文件,那么对于每个文件,您需要做出一个单一的决定——是否新建页面

有一个折衷办法:开始一个新页面通常会比拆分花费更少,但它会让你剩下的页面更少,这可能会使未来的决策成本更高

动态规划解决方案是测量这些决策的所有可能序列如何影响这种权衡

让MIN_COST(r,i)是布局第一个i文件的最低成本,同时在使用的最后一页中保留r字节。MIN_COST(r,i)=如果无法布局剩余r字节的第一个i文件,则为无穷大

对于r=B-s0,最小成本(r,1)=0,否则为无穷大

对于每个i>1,您可以从最小成本(r,i-1)的值计算所有最小成本(r,i),只需从所有r中尝试2个可能的决策(新页面或不新页面),所有这些决策都会记住每个生成的新余数的新最小成本

最后,最小成本布局的成本是最小成本(r,n)中的最低成本。如果您记得产生每个成本的决策顺序,那么您可以从最小成本中获得顺序,并相应地布局文件


该算法执行N个步骤,每个步骤最多执行2B个恒定时间测试,总运行时间为O(NB)。

总页面数越少,缓存未命中越少。那么,尽可能多地填充每一页的缺点是什么呢?无论发生什么,您都不需要从文件到页面/偏移的映射吗?我不知道DP能为您做些什么。@ScottHunter:我(也?)认为尽可能多地用未拆分的文件填充页面一定是最佳的,因为当决定如何处理第一个不适合当前页面的文件时,不管我们是否拆分它,Tpage都会发生,不分裂就可以节省我们的时间。但是:现在选择拆分可能会减少所需的总页数,这意味着这可能是一个净胜利。