美文网首页
回溯算法解数独问题的一种思路

回溯算法解数独问题的一种思路

作者: 小小杨树 | 来源:发表于2021-09-22 08:47 被阅读0次

核⼼思路,就是对每⼀个空着的格⼦穷举 1 到 9,如果遇到不合法的数字(在同⼀⾏或同⼀列或同⼀个 3×3 的区域中存在相同的数字)则跳过,如果找到⼀个合法的数字,则继续穷举下⼀个空格⼦。

对于数独游戏,也许我们还会有另⼀个误区:就是下意识地认为如果给定的数字越少那么这个局⾯的难度就越⼤。这个结论对⼈来说应该没⽑病,但对于计算机⽽⾔,给的数字越少,反⽽穷举的步数就越少,得到答案的速度越快。

为什么有时候算法执⾏的次数多,有时候少?为什么对于计算机⽽⾔,确定的数字越少,反⽽算出答案的速度越快?我们已经实现了⼀遍算法,掌握了其原理,回溯就是从 1 开始对每个格⼦穷举,最后只要试出⼀个可⾏解,就会⽴即停⽌后续的递归穷举。所以暴⼒试出答案的次数和随机⽣成的棋盘关系很⼤,这个是说不准的。那么你可能问,既然运⾏次数说不准,那么这个算法的时间复杂度是多少呢?

回溯算法最佳实践:解数独对于这种时间复杂度的计算,我们只能给出⼀个最坏情况,也就是O(9^M),其中 M 是棋盘中空着的格⼦数量。你想嘛,对每个空格⼦穷举 9个数,结果就是指数级的。这个复杂度⾮常⾼,但稍作思考就能发现,实际上我们并没有真的对每个空格都穷举 9 次,有的数字会跳过,有的数字根本就没有穷举,因为当我们找到⼀个可⾏解的时候就⽴即结束了,后续的递归都没有展开。

这个 O(9^M) 的复杂度实际上是完全穷举,或者说是找到所有可⾏解的时间复杂度。如果给定的数字越少,相当于给出的约束条件越少,对于计算机这种穷举策略来说,是更容易进⾏下去,⽽不容易⾛回头路进⾏回溯的,所以说如果仅仅找出⼀个可⾏解,这种情况下穷举的速度反⽽⽐较快。

相关文章

  • 回溯算法解数独问题的一种思路

    核⼼思路,就是对每⼀个空着的格⼦穷举 1 到 9,如果遇到不合法的数字(在同⼀⾏或同⼀列或同⼀个 3×3 的区域中...

  • 回溯算法最佳实践:解数独

    读完本文,你可以去力扣拿下如下题目: 37.解数独[https://leetcode-cn.com/problem...

  • Leetcode 37. 解数独(回溯算法)

    题目描述: 编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:1、数字 1-9 在每一行...

  • 8.30 leetcode刷题(2)

    递归和回溯:17 电话号码 思路:运用递归去实现回溯算法的思想。回溯算法本质上是一种暴力搜索,通过递归调用去实现,...

  • 五大基本算法——分支限界法

    一、基本思路 与回溯法一样,分支限界法也是在问题的解空间树上搜索问题的解的一种算法。 二、分支限界法与回溯法的区别...

  • 解数独算法

    昨天在Ubuntu18.04上打开自带的数独游戏,宿舍几个人一起玩了很久,今天整理了一下玩的过程,研究出算法并写成...

  • 分支限界

    类似【回溯算法】,也是一种在问题的解空间树上搜索问题解的算法。但一般情况下,【分支限界】与【回溯算法】的求解目标不...

  • leetcode第77题:组合 [中等]

    题目描述 考点 回溯算法 解题思路 代码实现

  • [回溯算法]python解决N皇后问题(20行代码)

    如果读者对于回溯算法思路解法还不是很了解,可以先点击链接查阅我之前的一篇博文《算法之【回溯算法】详解[https:...

  • 暴力的艺术:回溯算法

    我的CSDN:ListerCi 一、回溯算法与DFS 回溯算法是暴力求解的一种,它能系统地搜索一个问题的所有解或者...

网友评论

      本文标题:回溯算法解数独问题的一种思路

      本文链接:https://www.haomeiwen.com/subject/jiewgltx.html