【问题标题】:Backtracking in matrix to get min element在矩阵中回溯以获得最小元素
【发布时间】:2014-05-15 20:12:58
【问题描述】:

[不确定我是否应该在这里发帖,如果没有请告诉我!]

问题在于method of Zucker's 的回溯过程,该过程使用动态编程来最小化二级 RNA 结构中的能量。

所以,我有上三角矩阵W,里面填满了这个公式:

W(i, j) = min([W(i,j-1),
               W(i+1,j),
               V(i,j),
               min_k   // I will use an example, where this argument is NOT used
             ]);

同时我也用这个逻辑填充回溯表B:

if(min was the first option)
  B(i, j) = 10;
elseif(min was the 2nd option)
  B(i, j) = 11;
elseif(min was the 3rd option)
  B(i, j) = 12;
else
  // doesn't matter now

我不确定是否必须显示V 的填充方式。

我确信这些矩阵的创建是正确的。

问题是我必须显示通向最小值W 的所有回溯路径。

请注意,这个问题不是关于给我代码。这是为了通过一个示例来了解如何执行回溯。我猜伪代码也应该可以解决问题。

例子:

x = CACGGUUAG // input
W =

      Inf      Inf      Inf        8        8        8        5        5        5
      Inf      Inf      Inf      Inf        8        8        5        5        5
      Inf      Inf      Inf      Inf      Inf        8        8        8        6
      Inf      Inf      Inf      Inf      Inf      Inf        8        8        8
      Inf      Inf      Inf      Inf      Inf      Inf      Inf        8        8
      Inf      Inf      Inf      Inf      Inf      Inf      Inf      Inf        8
      Inf      Inf      Inf      Inf      Inf      Inf      Inf      Inf      Inf
      Inf      Inf      Inf      Inf      Inf      Inf      Inf      Inf      Inf
      Inf      Inf      Inf      Inf      Inf      Inf      Inf      Inf      Inf

B =
         C        A        C        G        G        U        U        A        G
     ----------------------------------------------------------------------------
     C   0        0        0       12       10       10       11       10       10
     A   0        0        0        0       12       10       12       10       10
     C   0        0        0        0        0       12       10       10       12
     G   0        0        0        0        0        0       12       10       10
     G   0        0        0        0        0        0        0       12       10
     U   0        0        0        0        0        0        0        0       12
     U   0        0        0        0        0        0        0        0        0
     A   0        0        0        0        0        0        0        0        0
     G   0        0        0        0        0        0        0        0        0

据我所知,因为我找不到关于填充矩阵后如何进行的信息,所以我即兴创作。

我只知道回溯是从右上角开始的。 所以,我说:

if(B(i, j) == 10)
  go left
elseif(B(i, j) == 11)
  go down
else
  go left and down

在这个例子中产生

<-   GC  // left
<-   AC
|
v    UA  // down
 /
V    UC  // left and down
 /
v    UG

这似乎可行,因为如果您从数组W 中的 UG 出发,您会发现自己位于 W 的右上角,我认为这就是我们正在寻找的东西。

我提出的这个逻辑的问题是如何获得所有最优路径,而不仅仅是一个!

【问题讨论】:

    标签: algorithm matlab dynamic-programming bioinformatics backtracking


    【解决方案1】:

    您需要扩展回溯表,使其指示存在多个最小值。你可以有这样的代码:

    1. 第一个选项最少
    2. 第二个选项最少
    3. 第一个和第二个选项并列最低
    4. 第三个选项最少
    5. 第一个和第三个选项并列最低
    6. 第二个和第三个选项并列最低
    7. 第一个、第二个和第三个选项并列最低

    然后将回溯更改为非确定性。如果您使用的是典型的命令式编程语言,通常的方法是创建一个递归函数,从给定的矩阵单元返回所有可能的轨迹。然后你在这样的循环中递归。

    def backtrack(predecessors, cell):
        possibilities = []
        if cell == (0, 0);
            possibilities.append([cell])
        else:
            for predecessor in predecessors[cell]:
                for rest in backtrack(predecessors, predecessor):
                    possibilities.append([cell] + rest)
        return possibilities
    

    【讨论】:

    • 根据我对这个问题的处理方法,没有希望吗?我真的不想改变方法。请注意,即使我可以手动找到它们(最佳路径),我仍然会很高兴,然后,一旦我理解了逻辑,我就可以扩展为您更精确的方法。
    • @G.Samaras 您可以使用W 表即时查找修改后的B 的条目。
    • 是的,这就是我的想法,你能解释一下吗? :) 我在这里挣扎..
    • @G.Samaras 在(i,j),如果W(i,j) == W(i,j-1),则可以选择回溯到(i,j-1)。如果W(i,j) == V(i,j),那么停在(i,j) 是一个选项。
    • 你能确认一下吗?假设您还指的是i+1。 1) 路径:W(1, 9) -> W(1, 8) -> W(1, 7) x_opt: GAU y_opt: CCC 2) 路径:W(1, 9) -> W(1, 8) -> W(2, 8) -> W(2, 7) x_opt: GAAU y_opt: CCAA 3) 路径:W(1, 9) -> W(2,9) -> W(2, 8) -> W(2, 7) x_opt: GGAU y_opt: CAAA
    猜你喜欢
    • 2014-04-08
    • 2015-05-05
    • 2011-05-11
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多