子序列的概率计算与算法



这里有一个游戏,其中1-50张牌被分发给两个玩家,每个玩家有10张牌,这些牌是随机排列的。目标是把所有的卡片分类,谁先分类谁就是赢家。每次一个人可以从牌堆中拿起一张牌,他必须替换一张现有的牌。玩家不能交换他的牌。也就是说,只有他可以用牌组中的牌替换他的牌。一张被丢弃的卡牌将以随机顺序回到牌组。现在我需要写一个程序来有效地完成这个。

我想到了下面的解决办法1)在给定的一组纸牌中找出所有按升序排列的子序列2)对每一个子序列,根据能解决问题的方法个数的概率计算一个权值。举个例子:如果我有一个子序列48,49,50,在索引2,3,4处,用这个子序列完成问题的概率是0。所以权值乘以0。类似地,如果序列是18 20 30索引是3 4 5那么完成游戏的可能方式就是6-10有20张牌可选前2个位置有17张牌可选,3)对于牌组中的每张牌,我将扫描列表并重新计算子序列的权重,以找到更好的匹配。

嗯,这个解决方案可能有很多缺陷,但我想知道1)给定子序列,如何找到完成游戏的可能方法的概率?2)找到所有子序列的最佳算法是什么?

如果我理解正确的话,目标是通过交换尽可能少的牌来获得有序的手牌,对吗?你试过下面的方法吗?这是非常简单的,但我猜它有一个相当不错的性能。

N=50
I=10
while hand is not ordered:
   get a card from the deck
   v = value of the card
   put card in position round(v/N*I)

最新更新