Artificial intelligence 我们如何确定minmax的时间和空间复杂性?
我在确定空间和时间的复杂性时遇到了一些困难。例如,如果我有一棵树,它有一个分支因子b,并且最多有一个深度d,我如何计算时间和空间的复杂性?我知道它们是O(b^d)和O(bd),但我的问题是如何获得这些值。空间复杂性相当于“我需要为这个算法分配多少内存”。 时间复杂性相当于“执行(抽象意义上)需要多长时间” 具有分支因子b和深度d的树将在其第0级有一个节点,在其第一级有b节点,在其第二级有b*b=b^2节点,在其第三级有b^2*b=b^3节点,等等。在这四个级别(深度3)中,它有1+b+b^2+b^3。就复杂度而言,我们通常只保留最高阶项,并删除任何乘法常数。因此,对于空间复杂度,最终的复杂度为O(b^d) 现在在时间复杂性方面,计算的不是节点的数量,而是算法完成所需的循环或递归调用的数量(最坏情况) 我要冒险出去,假设你说的是IDDF。关于O(b^d)和O(bd)从何而来的解释在维基文章中有很好的解释。Time 树中的所有节点都必须在某个点生成一次,并且假设生成节点需要一个固定的时间Artificial intelligence 我们如何确定minmax的时间和空间复杂性?,artificial-intelligence,big-o,complexity-theory,minimax,Artificial Intelligence,Big O,Complexity Theory,Minimax,我在确定空间和时间的复杂性时遇到了一些困难。例如,如果我有一棵树,它有一个分支因子b,并且最多有一个深度d,我如何计算时间和空间的复杂性?我知道它们是O(b^d)和O(bd),但我的问题是如何获得这些值。空间复杂性相当于“我需要为这个算法分配多少内存”。 时间复杂性相当于“执行(抽象意义上)需要多长时间” 具有分支因子b和深度d的树将在其第0级有一个节点,在其第一级有b节点,在其第二级有b*b=b^2节点,在其第三级有b^2*b=b^3节点,等等。在这四个级别(深度3)中,它有1+b+b^2+b
c
(固定的时间可以变化,您可以选择c
作为生成任何节点的最高固定时间)。顺序由算法决定,并确保节点不必重复扩展
nodes b=2 b=3
b^0 * *
/ \ / | \
b^1 * * * * *
/ \ / \ / | \ / | \ / | \
b^2 * * * * * * * * * * * * *
... ...
正如您在图中所看到的,计算第一级的成本是c*b^0
成本-准确地说是c
。树中的下一级将包含b^1
节点,生成第二级需要花费c*b^1=c*b
。对于第三级,第二级中的每个节点都将有b
节点,这意味着b*b^1=b^2$
节点和c*b^2
成本
在深度d
的树的最深层,将有b^d
节点,该层的工作是c*b^d
。到目前为止,完成的总工作量为c*b^0+c*b^1+…+c*b^d
。对于复杂性,我们只看上升速度最快的项,然后去掉常数,得到:
O(c+c*b+…+c*b^d)=O(c*b^d)=O(b^d)
本质上:时间是一个函数f(d)=和(i=1..d){c*b^i}
,和O(f(d))=O(b^d)
空间
该图显示了b=3
在不同阶段的算法<代码>*表示当前已扩展的节点,?
表示未知节点,+
表示已完全计算其分数的节点
branching factor b = 3 space
* * * * b
/ | \ / | \ / | \ / | \
* ? ? * ? ? + * ? + + * b
/ | \ / | \ / | \ / | \
* ? ? + + * + * ? + + * b
/ | \ / | \ / | \ / | \
* ? ? + * ? + * ? + + * b
为了计算节点的分数,您可以展开节点,选择一个子节点并递归展开,直到到达深度d
处的叶节点。一旦一个子节点完全计算完毕,就可以转到下一个子节点。计算完所有b
子节点后,将根据子节点计算父节点得分,此时可以从存储中删除子节点。上图说明了这一点,其中在4个不同阶段显示了算法
在任何时候,您都可以扩展一条路径,并且需要
c*b
存储来存储各级的所有子节点。这里再次假设每个节点需要恒定的空间量。关键是任何子树都可以通过其根进行总结。由于路径的最大长度是d
,因此您将最大限度地需要c*b*d
空间。如上所述,我们可以去掉常数项,得到O(c*b*d)=O(b*d)
他在问关于计算minimax的时间和空间复杂度的问题。O(b^d)是时间复杂度,空间复杂度是O(bd)。所以这个答案没有多大价值。@danben啊,是的,我错过了那个标签。我以为空间竞争是O(d)?极大极小时间和空间复杂度不是和深度优先搜索一样吗?渐近复杂度不是值。它们是公式。如果你想要精确的价值,你应该谈论时间和空间成本。然后下一个问题,至少是时间成本,将是“做什么的时间?”访问树中的每个元素?找到从根到叶的路径,其中节点的和最小?把树变成某种正常的形状?只有操作具有时间成本和复杂性。数据结构就在那里。