algorithm - 如何将 100 个不同的文件放在 20 个文件系统上?

标签 algorithm

我有 20 个文件系统:

 /fs01
 /fs02
 /fs03
 ...
 /fs20

在我的 Unix 环境中。这些文件系统中的每一个都包含一些可用空间,我可以用它来保存文件。这些文件系统彼此独立,并且各自包含不同数量的可用空间。

我在另一台主机上有 100 个不同大小的文件,我想将这些文件中的每一个都放在任何可用的位置。显然,将文件放置到特定文件系统后,该特定文件系统上的可用空间量将减少文件大小。

我正在寻找一种有效的方法;即一种算法,它获取上述数据作为输入并给我一个像这样的映射:

 /fs01    <- f1,f10,f29
 /fs02    <- f5,f30
 /fs03    <-nothing here. too small.
 ...
 /fs20    <- f89,f100

其中f1文件1f2文件2,等等。 你觉得有没有这样的算法?

最佳答案

在我看来,您可以使用整数规划技术来解决它。

https://en.wikipedia.org/wiki/Integer_programming

那里有很多免费的求解器。

模型很简单。您有 20x100 个变量,可以是 0 或 1。每个变量 x_{i,j} 表示(0:文件不在此文件系统中,1:文件在此文件系统中)。 约束是:

  • 每个变量都在 0 和 1 之间(它们是整数,它们是 0 或 1)
  • 与一个文件相关的所有变量之和为1(每个文件仅在1个文件系统中)
  • 与文件系统相关的所有变量按其大小加权的总和必须小于可用空间。

解决方案空间中的每个点都适合您。

关于algorithm - 如何将 100 个不同的文件放在 20 个文件系统上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30897215/

相关文章:

algorithm - 为什么在Bourke的Delaunay三角剖分算法中处理超三角形的顶点?

java - 使用基本函数查找最近的点对

c++ - 获取 UTF-8 编码的 std::string 的实际长度?

.net - 为什么 .Net 词典会调整为质数?

algorithm - 我怎样才能从线形成多边形

algorithm - 给定两棵完全二叉树的层序遍历,如何判断一棵树是否是另一棵树的镜像?

java - 无法定位这个简单的遗传算法程序中的问题

algorithm - 相邻数算法 grouper

algorithm - 您如何确定问题显示为 "Greedy choice property"?

arrays - 在排序数组中找到三个元素,它们总和为第四个元素