这个难题的预期移动数量是多少?

时间:2014-03-01 17:19:53

标签: algorithm probability-theory expectations

给出了大小为n x n的二进制矩阵。

在每个步骤中,函数检查给定矩阵的每一行和每列是否至少有一个1。如果没有,则选择纯随机坐标,例如i, j 1 <= ij <= n,如果它是1,则标记为01 1}}被保留。

重复该过程,直到矩阵的每一行和每列至少有一个1

请说明此算法中移动的“预期数量”是什么。

2 个答案:

答案 0 :(得分:1)

for n = 1, 10 do

   -- prepare matrix of zeroes
   local P = {}
   for i = 0, n do
      P[i] = {}
      for j = 0, n do
         P[i][j] = 0
      end
   end
   -- set matrix element at (0,0) = 1
   P[0][0] = 1

   local E = 0  -- expected value of number of steps
   for move = 1, 1000000 do  -- emulate one million steps
      for x = n, 1, -1 do
      for y = n, 1, -1 do
         -- calculate probabilities after next move
         P[x][y] = (
            P[x][y]    *x      *y +
            P[x-1][y]  *(n+1-x)*y +
            P[x][y-1]  *x      *(n+1-y) +
            P[x-1][y-1]*(n+1-x)*(n+1-y)
         )/(n*n)
      end
      end
      E = E + P[n][n]*move
      P[0][0] = 0
      P[n][n] = 0
   end

   print(n, E)

end

结果(n,E):

1   1
2   3.6666666666667
3   6.8178571428571
4   10.301098901099
5   14.039464751085
6   17.982832900812
7   22.096912050614
8   26.357063600653
9   30.744803580639
10  35.245774455244

可以计算E的精确值,但是需要反转矩阵N * N,其中N = n * n

答案 1 :(得分:1)

您可以使用启发式算法并模拟随机字段以获得近似输出 您可以在此上创建一个输出文件,这将确保您模拟了大量数据,以确保您的近似答案接近优化答案。