当前位置: 首页 > 知识库问答 >
问题:

如何为蛮力算法枚举所有可能性?

东方化
2023-03-14

这个问题可能没有具体说明,但我认为很重要。当您想要解决一个优化问题而又不太熟悉动态编程方法时,首先想到的是它。

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

  • 获取列表的min元素(非常简单)
  • 列出集合的所有置换
  • 列出集合的所有子集

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

  • 列出两个字符串的所有编辑距离(我指的不是编辑操作中最短的一个)
  • 列出两个序列的所有公共子序列
  • 列出括号矩阵链乘法
  • 的所有可能性

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

是否有一个系统的通用方法来用暴力算法列出所有的可能性?

共有1个答案

连时铭
2023-03-14

回溯是寻找问题所有解决方案的最一般方法之一。根据维基百科,

回溯是一种用于寻找某一计算问题的全部(或部分)解的通用算法,它增量地构建候选解,一旦确定c不可能完成到有效解,就放弃每个部分候选c(“回溯”)。

使用回溯的经典教科书例子是八个皇后拼图,它要求在一个标准棋盘上排列八个棋后,这样就不会有皇后攻击任何其他棋后。

 类似资料:
  • 问题内容: 我有以下列举。 我需要将所有原始值存储为字符串数组(例如)。 我将此方法添加到枚举中。 但我收到以下错误。 找不到类型’GeneratorOf’的初始化程序,该初始化程序接受类型’(()-> _)’的参数列表 有没有更简单,更好或更优雅的方式来做到这一点? 问题答案: 有一个协议: 对于Swift <4.2 不,您无法查询包含的值。看到这篇文章。您必须定义一个列出所有值的数组。还可以在

  • 问题内容: 我正在寻找一种无需重复即可生成第n个组合的算法。 我可以在哪里找到很多排列组合,但是我在哪里寻找组合。 例: Java中采用Set或List的通用递归实现会很棒。我也希望链接提供很好的解释,伪代码或示例代码。 问题答案: 您可以使用以下递归方法执行此操作: 然后,您可以使用(jDoodle)运行它: 会产生: 该程序的工作方式如下:是仍要选择的元素数,是当前的偏移值。最初,偏移值是。

  • 问题内容: 在Java中,Enum可以完成Enums所做的伟大工作,但也可以具有方法(行为和逻辑)。与使用枚举类相比,这有什么优势?简单的例子来说明这一点也将受到欢迎。 问题答案: 这是一个简单的例子:

  • 是否有一种内置的方法来获取Enum的项目数,例如, 或者我必须根据元素的数量实现一个函数?

  • 问题内容: 我知道该信息在枚举中可用。 如何打印所有枚举值,如:? 输出: 姓名 教育 电子邮件 电话 如何在另一个函数中将该枚举作为arg 传递? 问题答案: 您的第二部分…与或一样