如何列举蛮力算法的所有可能性?

时间:2013-03-25 06:36:55

标签: algorithm brute-force

这个问题可能没有具体说明,但我认为这非常重要。当您想要解决优化问题并且您对dynamic programming方法不是很熟悉时,这是您想到的第一个想法。

我可以举一些简单的例子:

  • 获取列表的最小元素(非常简单)
  • 列出一组
  • 的所有排列
  • 列出集合的所有子集

这些问题都有成熟的方法。但问题不是很清楚:

  • 列出两个字符串的所有edit distance(我的意思不是编辑操作中最短的一个)
  • 列出两个序列的所有common subsequence
  • 列出括号matrix chain multiplication
  • 的所有可能性

我不知道用蛮力方法解决这些问题。我的问题是:

是否有一种系统的通用方法可以用蛮力算法列出所有可能性?

1 个答案:

答案 0 :(得分:2)

Backtracking 是查找问题所有解决方案的最常用方法之一。每个维基百科,

  

回溯是一种通用算法,用于查找某些计算问题的所有(或某些)解决方案,逐步构建解决方案的候选者,并在确定c不可能时,放弃每个部分候选c(“回溯”)完成了有效的解决方案。

     

使用回溯的经典教科书示例是八个皇后拼图,它要求在标准棋盘上安排八个国际象棋皇后,以免任何其他女王进攻。

你提到的两个问题,
•列出两个序列的所有常见子序列
•列出括号矩阵链乘法的所有可能性 可以使用回溯轻松处理。我不确定编辑距离问题。