22得票4回答
给定n和k,返回第k个排列序列。

集合[1,2,3,...,n]包含n!个唯一的排列。 通过按顺序列出和标记所有排列,我们得到以下序列(例如,对于n = 3): "123" "132" "213" "231" "312" "321" 给定n和k,返回第k个排列序列。 例如,给定n = 3,k = 4,答案为"231"...

21得票4回答
如何优化骑士周游问题的算法?

我使用C++编写了骑士周游算法,采用了回溯方法。但是对于n>7(7x7棋盘以上),它似乎太慢或陷入无限循环中。 问题是:这个算法的时间复杂度是什么,如何进行优化?! “骑士巡游问题”的陈述如下: 给定一个大小为 n × n 的棋盘,找到一条骑士的路径,使其恰好经过每个方格一次。 这...

21得票4回答
'回溯'和'分支限界法'的区别

在回溯算法中,我们同时使用广度优先搜索和深度优先搜索。即使在分支界限算法中,我们也会使用广度优先搜索和深度优先搜索以及最小代价搜索。 那么何时使用回溯算法,何时使用分支界限算法呢? 使用分支界限算法是否会降低时间复杂度? 分支界限算法中的最小代价搜索是什么?

20得票2回答
正则表达式调试

我正在调试一个正则表达式^(A+)*B在字符串AAAC上(来自rexegg.com的示例),我有两个不同的调试工具: regex101.com RegexBuddy v4 以下是结果(左侧为regex101): 我的问题主要不是关于步骤数,这对我也很重要,而是关于回溯是如何进行的...

18得票5回答
12个占主导地位的骑士难题(回溯算法)

我已经搜寻了数小时,但仍未找到一个完全可行的解决方案。所以我遵循与象棋主教相似的问题。 我需要在棋盘上放置12个骑士,使得棋盘上所有空闲的方格都被至少一个棋子攻击。 最终结果应该如下所示: 问题是我的程序仅尝试不同的两个最后棋子的组合,然后以某种方式崩溃。已编辑 迄今为止,我所做的...

18得票9回答
寻找最长不重叠序列的算法

我试图找到解决以下问题的最佳方法。我所说的最佳方法是指复杂度更低。 作为输入,给定一个元组列表 (起始位置,长度),例如:[(0,5),(0,1),(1,9),(5,5),(5,7),(10,1)] 每个元素通过它的起始位置和长度表示一个序列,例如(5,7)相当于序列(5,6,7,8,9,1...

17得票5回答
在Haskell中实现N皇后问题而不进行列表遍历

我在网上搜索了不同的方案来解决Haskell中的n-皇后问题,但是没有找到任何一种可以在O(1)时间内检查不安全位置的解决方案,就像你保留一个数组来存储/对角线和一个数组来存储\对角线的那个方案。我发现大多数解决方案只是将每个新皇后与之前的所有皇后进行比较。类似于这样的方式: http://w...

17得票4回答
动态规划是带有缓存的回溯算法吗?

我一直对此感到困惑,也没有任何书籍明确说明。 回溯法是一种探索所有可能性的方法,直到我们发现某个可能性不能导致可行解,这时候我们就放弃它。 据我理解,动态规划的特点是具有重叠子问题。因此,可以将动态规划描述为带有缓存(用于先前探索过的路径)的回溯法吗? 谢谢

16得票2回答
为什么 /\w+:/ 和 /\S+:/ 处理回溯不同?

我使用regex101分析了这两个正则表达式。 我认为/\S+:/的回溯是正确的。 但是我不明白其中的区别。 我错了吗?

14得票2回答
Prolog GNU - Univ 运算符是什么?它的解释是什么?

那么这个univ运算符,我不太明白。 举个例子: foo(PredList,[H|_]) :- bar(PredList,H). foo(PredList,[_|T]) :- foo(PredList,T),!. bar([H|_],Item) :- G =.. [H,Item],G. ...