我正在阅读一本算法书。这是一个问题,我有自己的答案,但不太确定。你怎么看?谢谢!
问题: 有2家电视网络公司,假设A和B,每个都在一天的n个时段规划电视节目安排。他们每个人都把他们的n个程序放在那些插槽中。虽然每个项目的费率都基于过去一年的受欢迎程度,但这些比率彼此不同。当它的节目比其对手更高时,该公司赢得了一个位置。是否有一个时间表匹配,A制定了一个时间表S和B制定了一个时间表T,并且(S,T)是稳定的,两个网络都不能单方面改变自己的时间表并赢得更多的时间段。
答案 0 :(得分:2)
没有稳定的匹配,除非一个站的所有程序在评级中都是连续的(即,另一个站没有比第一站上的一个程序更好的程序但是比第一个站上的另一个程序更差)。
<强>证明强>
假设一个电台可以改善其得分,结果是一个稳定的匹配。但是其他站可以通过扭转重新排列来提高自己的分数。所以这不是一个稳定的匹配。矛盾。
因此,电台无法达到稳定的匹配效果。
因此,稳定的匹配不会变得更糟(对于任何一个站),因为较低的状态可以改进为稳定的匹配(我刚才显示的不允许)。
因此,稳定匹配的每个程序重新排列必须给两个站点提供相同的分数。
唯一不能通过重新排列改变分数的程序集是其中一个站点的程序在评级中连续的程序集。 (证明留给读者)
答案 1 :(得分:1)
Haskell中的解决方案:
hasStable :: Ord a => [a] -> [a] -> Bool
hasStable x y =
score x y + score y x == 0
-- score is number of slots we win minus number of slots they win
-- in our best possible response schedule
score :: Ord a => [a] -> [a] -> Integer
score others mine =
scoreSorted (revSort others) (revSort mine)
where
-- revSort is sort from biggest to smallest
revSort = reverse . sort
scoreSorted :: Ord a => [a] -> [a] -> Integer
scoreSorted (o:os) (m:ms)
| m > o =
-- our best show is better then theirs
-- we use it to beat theirs and move on
1 + score os ms
| otherwise =
-- their best show is better then ours
-- we match it with our worst show
-- so we could make use of our big guns
-1 + score os (m : ms)
scoreSorted _ _ = 0 -- there are no shows left
> hasStable [5,3] [4,2]
False
> hasStable [5,2] [3,4]
True
答案 2 :(得分:0)
我自己的答案是没有稳定的匹配。假设只有2个时隙。 A有程序p1(5.0)p2(3.0); B有程序p3(4.0)p4(2.0);
A的时间表包括: S1:p1,p2 S2:p2,p1 B的时间表包括: T1:p3,p4 T2:p4,p3
所以匹配包括: (S1,T1)(S1,T2)(S2,T1)(S2,T2)
而结果是 (S1,T1) - (p1,p3)(p2,p4)2:0 - 不稳定,因为B可以将其时间表改为T2,结果是:(S1,T2) - (p1,p4)(p2, p3)1:0
反之亦然,其他匹配也是如此。
答案 3 :(得分:0)
让每个电视频道都有2个节目。 TV-1:
Show1的评级是20分。 show2的评分是40分。
TV-2:
Show1的评分是30 pts。 Show2的评分是50分。
然后它清楚地表明匹配不稳定。