Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 求解boggle的解的O(n)_Algorithm_Time Complexity_Boggle - Fatal编程技术网

Algorithm 求解boggle的解的O(n)

Algorithm 求解boggle的解的O(n),algorithm,time-complexity,boggle,Algorithm,Time Complexity,Boggle,求解boggle的函数的最佳时间复杂度O(n)是多少,其中boggle板是n乘n 我觉得这是n^2,因为对于每个字符,我们必须查看2(n-1)其他字符。采访者争辩说,查字典不是为了查字典。O(1)n^2。不太清楚字典能查到什么 有点傻,但我认为正确的答案如下: 因为在boggle中,单词可以任意移动(从每个字符到该单词中尚未使用的任何相邻(水平、垂直或对角线)字符),对于长度为L的单词,单词的组合可以达到8^L,除非您消除字符多次出现的组合。无论如何,考虑到L是常量(因为使用的字典是常量),这个

求解boggle的函数的最佳时间复杂度O(n)是多少,其中boggle板是n乘n


我觉得这是
n^2
,因为对于每个字符,我们必须查看
2(n-1)
其他字符。采访者争辩说,查字典不是为了查字典。
O(1)
n^2。

不太清楚字典能查到什么

有点傻,但我认为正确的答案如下:

因为在boggle中,单词可以任意移动(从每个字符到该单词中尚未使用的任何相邻(水平、垂直或对角线)字符),对于长度为
L
的单词,单词的组合可以达到
8^L
,除非您消除字符多次出现的组合。无论如何,考虑到
L
是常量(因为使用的字典是常量),这个值也是常量。总之,从给定位置开始查找单词的时间复杂度为
O(1)

因此,剩下的是单词的起始位置,它位于空间
n^2
,因此您的boggle解算器的时间复杂度为
O(n^2)
您是对的

如前所述,我认为这个论点有点愚蠢

问题可能是人们不想把字典看作是常数,因为它非常大。假设它无限大,但它实现了对现有单词的
O(1)
查找(这是我们可以用于词典的唯一查询,尤其是没有对单词前缀的查找),并进一步假设
n
与单词长度相比不是一个限制因素,时间复杂度是指数级的。但我认为,在本练习中,只对现有单词进行成功查找的假设是错误的


另一个可能的假设是,字典有一个单词前缀的查找(返回是否存在以给定字符串开头但不一定等于该字符串的单词)。在这种情况下,我们可以实现一种更好、更复杂的算法,该算法搜索有限的搜索空间(最多使用一次每个字符)。字长的限制因素是
n^2
,因为没有任何单词(包含在当前的boggle board中)可以超过这个长度(因为每个字符只能使用一次)。同样,起始位置在空间
n^2
,因此愚蠢的基于路径的算法的时间复杂度为
O(n^4)
,因此您错了。目前,在这种假设下,我想不出一种时间复杂度更好的算法。

我终于找到了答案。答案在时间上是指数型的

想象一个4X4的boggle网格

ABCD
EFGH
IJKL
MNOP
例如,在ABCDHGFEIJKLPONM中,以
A
开头的任何有序子序列都是一个潜在单词;AEIMNOPLHDCBFJKG或AEIMNOPLHGFIK或ABCDHLPONMIEFGKJ中以
A开始的任何有序子序列也是如此。然后我们需要看看潜在的单词,从B开始,然后是C,等等

让我们从另一个角度来看这个问题。说我们只需要考虑ABCD,其中代码> >代码>代表一些起始字符,例如“代码> x <代码>;那么属于电源组的潜在字是:

XD; XC; XCD; XB; XBD; etc.

因此,仅考虑从每个字符开始的顺时针螺旋,我们已经在查看
n^2*2^(n-1)
n^2
因为网格是
n乘n
,所以对于
4乘4
网格,有16个可能的起始字符。和
2^(n-1)
,因为由每个起始字符引导的电源集。当然,顺时针螺旋不是唯一可能的模式。但是我们已经可以看到第一种模式的时间复杂性:大ω(2^n),它是指数型的。

看看。动态规划解决方案是O(D),其中D是字典的大小。

您如何访问您的字典?
i
表示什么以及为什么
2(n-1)
?@Karoly Horvath,我编辑了
i
2(n-1)
是因为我们必须沿着垂直线和水平线查找。@svick让字典成为O(1)查找。