任务描述:
现假设有N台机器,每台机器的权重为W(n),数据为0-K的范围(其中K远大于N)。
现在每台机器中都有一部分在范围上连续的数据,分别为R(1),R(2)...R(m),每台机器可能包含多个不定长的非连续范围。
需求则是,提供一种算法,使其移动最少量的数据,使全部数据按照权重比例分配在N台机器中,并使每台机器仅包含一个连续的范围段(多个连续的范围段放到一起会合并成一个大的连续的范围段)。
例如,现在有10台机器(A-J代表),每台机器的权重为1,2,3,4,5,6,7,8,9,10。数据范围则是1-10000。 当前每台机器的数据平均分布,分别包含10个不连续的范围段。
主机名 | 范围1 | 范围2 | 范围3 | ... |
---|---|---|---|---|
A | 1-100 | 1001-1100 | 2001-2100 | ... |
B | 101-200 | 1101-1200 | 2101-2200 | ... |
C | 201-300 | 1201-1300 | 2202-2300 | ... |
D | 301-400 | 1301-1400 | 2301-2400 | ... |
E | 401-500 | 1401-1500 | 2401-2500 | ... |
F | 501-600 | 1501-1600 | 2501-2600 | ... |
G | 601-700 | 1601-1700 | 2601-2700 | ... |
H | 701-800 | 1701-1800 | 2701-2800 | ... |
I | 801-900 | 1801-1900 | 2801-2900 | ... |
J | 901-1000 | 1901-2000 | 2901-3000 | ... |
而计算结果则应当类似(本结果不一定为移动最少数据所需要的结果):
主机名 | 范围 |
---|---|
A | 1-181 |
B | 182-546 |
C | 547-1093 |
D | 1094-1822 |
E | 1823-2733 |
F | 2734-3826 |
G | 3827-5101 |
H | 5102-6558 |
I | 6559-8197 |
J | 8198-10000 |
每个机器仅包含一个连续的范围段,而范围段的范围比例则与每台机器的权重相同,同时需要确保中途所移动的数据量最少。
最笨的方式按照排列组合,遍历所有可能的组合并找到最优的解,其开销为1x2x3...xN,并不可取。该任务的优胜者为提供算法效率最高者。