Java 列表和方法之间的效率

Java 列表和方法之间的效率,java,performance,Java,Performance,我在考虑做一个数独解算器,我有两个问题: 1) 什么会更快 A) 检查所有空白点,列出数字(1-9)如果在同一行或同一类别中,则删除它们,如果长度为1,则只添加剩余的一个。需要时重复此步骤 B) 检查所有的数字,然后检查所有的点,看看他们是否有那个数字。需要时重复此步骤 2) 对于长度小于9的住房,最有效的清单是什么 谢谢 图例回答2)不是列表,而是集合才有意义。在这种情况下,位集 案例1)9x9数独中有27条规则 案例1A)每个点参与3条规则 情况1B)每个数字重复9次;出现在3条规则中 答案

我在考虑做一个数独解算器,我有两个问题:

1) 什么会更快

A) 检查所有空白点,列出数字(1-9)如果在同一行或同一类别中,则删除它们,如果长度为1,则只添加剩余的一个。需要时重复此步骤

B) 检查所有的数字,然后检查所有的点,看看他们是否有那个数字。需要时重复此步骤

2) 对于长度小于9的住房,最有效的清单是什么

谢谢

图例回答2)不是列表,而是集合才有意义。在这种情况下,
位集

案例1)9x9数独中有27条规则

案例1A)每个点参与3条规则

情况1B)每个数字重复9次;出现在3条规则中


答案1)1A和1B在理论上应该没有区别,但1A似乎使算法和数据结构更容易。

我认为B可行!您可以使用回溯算法来检查1-9个数字中的任意一个(按顺序)的空位。用第一个可用选项(1-9)填充该位置,然后继续前进。如果在任何时候都无法在插槽中插入数字,请返回到上一个插槽并尝试其他数字。 这可能会有帮助:


我不知道你想做什么,但我创建了一个数独解算器(它使用“组”,可以是任何东西,甚至是交叉线)。当时它主要是泛型和集合的练习,但即使是最难的9x9数独游戏,它也在0.2秒内完成。我认为它使用了类似于A的东西,但是如果你想在最基本的数独之外的任何东西上完成它,你需要更多的规则或“猜测”。K,问题将很容易解决。如果你想了解我的意思,请随意搜索:符文数独。对于位集,我需要9个元素,全部为真,然后在扫描时设置为假?此外,A)通过空点的次数较少,但每个点所需的时间较长,但B)每个点所需的时间较少,但需要更多的循环。递归回溯求解将使用{done=int[81]},{todo}参数化。从{todo}中选出下一位候选人是在可能性最小的情况下。我认为B提供了同样的复杂性。但也许你是对的。