我正在寻找“如何找到算法复杂度”,因为我不知道如何确定我的程序的算法复杂度。
我使用Java编写了一个数独求解器,没有考虑效率(我想尝试使用递归来使它工作,而我成功了!)。
一些背景:
我的策略是使用回溯法来确定对于给定的数独难题是否只有一个唯一的解。所以我基本上读入一个给定的谜题并解决它。一旦我找到一个解,我不一定完成,需要继续探索更多的解。最后会有三种可能的结果:拼图根本无法解决、拼图有唯一解或者拼图有多个解。
我的程序从一个文件中读入谜题坐标,该文件每行都包含一个数字,由行、列和数字组成。按照我的约定,7的左上角方格被写成007。
实现:
我将值从文件中加载并将它们存储在一个二维数组中。 我沿着数组下移,直到我找到一个空白的(未填充的)值,并将其设置为1。并检测任何冲突(输入的值是否有效)。 如果是,我就继续下一个值。 如果不是,我将该值增加1,直到找到一个有效的数字,或者如果所有数字都不行(从1到9),我回到上一个值并将其增加1(使用递归)。 当所有的81个元素没有冲突地填满时,我完成了解决。 如果找到任何解,我会将它们打印到终端上。 否则,如果我尝试在我最初修改的第一个元素上“返回一步”,这意味着没有解。
我的程序算法复杂度是多少?我以为可能是线性[O(n)], 但是我多次访问数组,所以我不确定:(
感谢您的任何帮助。
我使用Java编写了一个数独求解器,没有考虑效率(我想尝试使用递归来使它工作,而我成功了!)。
一些背景:
我的策略是使用回溯法来确定对于给定的数独难题是否只有一个唯一的解。所以我基本上读入一个给定的谜题并解决它。一旦我找到一个解,我不一定完成,需要继续探索更多的解。最后会有三种可能的结果:拼图根本无法解决、拼图有唯一解或者拼图有多个解。
我的程序从一个文件中读入谜题坐标,该文件每行都包含一个数字,由行、列和数字组成。按照我的约定,7的左上角方格被写成007。
实现:
我将值从文件中加载并将它们存储在一个二维数组中。 我沿着数组下移,直到我找到一个空白的(未填充的)值,并将其设置为1。并检测任何冲突(输入的值是否有效)。 如果是,我就继续下一个值。 如果不是,我将该值增加1,直到找到一个有效的数字,或者如果所有数字都不行(从1到9),我回到上一个值并将其增加1(使用递归)。 当所有的81个元素没有冲突地填满时,我完成了解决。 如果找到任何解,我会将它们打印到终端上。 否则,如果我尝试在我最初修改的第一个元素上“返回一步”,这意味着没有解。
我的程序算法复杂度是多少?我以为可能是线性[O(n)], 但是我多次访问数组,所以我不确定:(
感谢您的任何帮助。