回 帖 发 新 帖 刷新版面

主题:[讨论]如何求无冲突划分子集问题的最优解

这里严蔚敏的数据结构书貌似很流行,我就直接问了~

P84介绍了用队列求划分无冲突子集问题,但是他的出来的解并不是最优解
题目是这样的
比赛项目A={0,1,2,3,4,5,6,7,8}
冲突关系R={(1,4),(1,8),(4,8),(1,7),(8,3),(1,0),(1,5),(0,5),(3,4),(5,6),(5,2),(6,2),(6,4)}
书中所得解{0,2,3,7},{1,6},{4,5},{8}
但是我排了排发现还有更优解{1,6,3},{4,0,2},{5,7,8}
明明自己说了问题是求最短竞赛日程,但是给出的却不是最优解,不厚道啊...

我想知道最优解的算法,于是搜索到了这个论坛,希望大家能帮我解答一下!xiexie!!

回复列表 (共1个回复)

沙发

先说说我的想法,之所以会算不出最优解,是在于筛选的顺序.书上是从0开始的,而观察冲突关系集合R,发现0只出现了2次,是出现次数最少的数字之一.因此随后的数字,很巧2,3,7都是出现次数很少的,很容易就能放进跟0的同一个子集中,因而第一个子集就被"挤满"了.当要排第二个第三个子集的时候,剩下的数字已经"太大"使得一个集合装不了多少了. 打个比方,数字就是石头,数字出现的次数就是石头的大小,现在有个杯子,往里面放石头,希望尽可能利用杯子里的空间.很自然会想到先放大的,在填小的.(这实际上是某个很著名的寓言:P)

因此我们考虑用数字的出现次数重排比赛项目放进队列的顺序,出现次数多的在前面,优先进行划分.
比如上面的例子,重新排序后是{1,4,5,6,8,0,2,3,7}(这里直接用集合表示,实际上是有顺序的),按这个顺序进入队列并按书上方法划分子集,恰好就得到最优解{1,6,3},{4,0,2},{5,7,8}

但这个方法我不知道是不是总能找到最优解,希望有高手能回答:)

另外一个想法是考虑"冲突优先",先把发生冲突的项目排在不同的时间,再进行进一步的划分.但具体的方法还不知道怎么细化,一旦想要达到最优我就无能了:(


我的想法就到这里,希望大家都说说看法,让小弟开开眼界啊~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册