【发布时间】:2013-01-13 13:27:58
【问题描述】:
问题陈述:
给出n 变量和k 对。通过为每个变量分配一个从 1 到 n 的值,可以区分这些变量。每对p包含2个变量,设p中2个变量的绝对差为abs(p)。定义差异的上限为U=max(Abs(p)|every p)。
找到最小化U 的作业。
Limit:
n<=100
k<=1000
每个变量在成对列表中至少出现 2 次。
A problem instance:
Input
n=9, k=12
1 2 (meaning pair x1 x2)
1 3
1 4
1 5
2 3
2 6
3 5
3 7
3 8
3 9
6 9
8 9
Output:
1 2 5 4 3 6 7 8 9
(meaning x1=1,x2=2,x3=5,...)
说明:分配x1=1,x2=2,x3=3,... 将导致U=6(3 9 具有最大的绝对值)。输出分配将获得最小值U=4(更改后的对:3 7 => 5 7, 3 8 => 5 8 等,并且 3 5 没有更改。在这种情况下,abs(p)<=4 用于每一对)。
有一点很重要:要实现最佳分配,必须改变具有最大abs 的对中的变量。
基于此,我想到了一个贪心算法:
1)Assign every x to default assignment (x(i)=i)
2)Locate pairs that have largest abs and x(i)'s contained in them.
3)For every i,j: Calculate U. Swap value of x(i),x(j). Calculate U'. If U'<U, stop and repeat step 3. If U'>=U for every i,j, end and output the assignment.
但是,如果我们需要这样的赋值,这种方法有一个很大的缺陷:
x(a)<<x(b), x(b)<<x(c), x(c)<<x(a)
,我们必须分两步进行交换,例如:x(a)<=>x(b),然后是x(b)<=>x(c),那么第一步中x(b)<<x(a) 的abs 可能会变得大于U,并且交换失败。
有没有有效的算法来解决这个问题?
【问题讨论】:
-
我在这里没有看到问题,也没有编写代码,也没有对问题的解释。相反,我看到的是家庭作业。
-
所以你想最小化每对之间的最大差异?
标签: algorithm