【问题标题】:Minimize maximum absolute difference in pairs of numbers最小化数字对中的最大绝对差
【发布时间】: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 =&gt; 5 7, 3 8 =&gt; 5 8 等,并且 3 5 没有更改。在这种情况下,abs(p)&lt;=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)&lt;=&gt;x(b),然后是x(b)&lt;=&gt;x(c),那么第一步中x(b)&lt;&lt;x(a) 的abs 可能会变得大于U,并且交换失败。
有没有有效的算法来解决这个问题?

【问题讨论】:

  • 我在这里没有看到问题,也没有编写代码,也没有对问题的解释。相反,我看到的是家庭作业。
  • 所以你想最小化每对之间的最大差异?

标签: algorithm


【解决方案1】:

这看起来像http://en.wikipedia.org/wiki/Graph_bandwidth(NP 完整,即使对于特殊情况也是如此)。看起来人们在需要这样做时会运行http://en.wikipedia.org/wiki/Cuthill-McKee_algorithm 以尝试将稀疏矩阵转换为带状对角矩阵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多