我在寻找“你怎么找到它”,因为我不知道如何找到我的程序的算法复杂度。数独求解器的算法复杂度(Big-O)
我写了使用Java数独解算器,没有考虑效率(我想尽量做到递归地工作,这是我成功有!)
一些背景资料:
我的策略采用回溯,以确定,对于给定的数独谜题,谜题是否只有一个独特的解决方案。所以我基本上读了一个给定的难题,并解决它。一旦我找到一个解决方案,我不一定完成,需要继续探索进一步的解决方案。最后,三种可能的结果之一发生:难题根本无法解决,难题有独特的解决方案,或者难题有多种解决方案。
我的程序从包含行,列和数字的每个给定数字有一行的文件中读取拼图坐标。根据我自己的惯例,7左上角方形写成007
实现:
我加载值,从文件,并将其存储在一个2-d阵列 我下井数组,直到找到空白(未填充的值),并将其设置为1.然后检查是否存在任何冲突(无论我输入的值是否有效)。 如果是,我将转到下一个值。 如果否,我增加值1,直到我找到一个数字的工作,或者如果他们都没有工作(1至9),我回去1步到我调整的最后一个值,我增加了一个(使用递归)。 我完成了所有81个元素的填充,没有冲突。 如果找到任何解决方案,我将它们打印到终端。 否则,如果我试图在最初修改的FIRST元素上“返回一步”,这意味着没有解决方案。
我的程序如何算法复杂?我想这可能是线性的[O(N)],但我访问数组多次,所以我不知道:(
任何帮助表示赞赏
如果您使用回溯,您的复杂性可能是指数级。即对于所采取的每一个举措,你都会或多或少地采取其他可能的举措。 – millimoose 2013-03-10 20:46:22
你可以发布你的代码吗?或者只是它的相关部分? – 2013-03-10 20:51:32