均匀成本搜索的时间复杂度(包括最小优先级队列)

在大多数教科书中,均匀成本搜索(UCS)最坏情况运行时间的渐进上界被定义为O(b(1 + C / ε))。详细说明请见此处:均匀成本搜索的时间复杂度

O(b(1 + C / ε))反映了UCS在找到特定目标状态之前必须探索的总状态数的上界。通常,所有这些状态都被存储并维护在一个最小优先级队列(前沿)中。

我想知道为什么在定义UCS的时间复杂度时,没有明确考虑维护最小优先级队列的开销。让我们定义n = b(1 + C / ε)。那么运行时间不应该是O(nlgn)吗?

为什么没有明确包含lgn?是因为在关注渐进行为时可以忽略它吗?


回答:

这里的“问题”实际上并不在于算法本身,而是计算机科学的不同子领域对事物使用不同的名称(有时对不同的事物使用相同的名称)。这完全是定义不同的问题。

“均匀成本搜索”是Dijkstra算法的一个变体的另一个名称,通常在人工智能的背景下使用,其中底层图可能为无限。如你所提到的,你提供的链接和该链接中的AI教科书计算出UCS探索的节点数为O(b^(1 + C / ε)),这是正确的。然而,算法在计算机上执行的基本操作数(这是计算复杂性理论中通常使用的度量)将包括一个对优先级队列操作进行处理的对数因子。如果你通过基本操作来衡量运行时间,对数因子在渐进分析中绝对不能被忽略。

由于你引用的教科书是一本AI教科书,优先级队列只是被提及,因为重点不在于数据结构的各种实现及其运行时间。他们指定在比较算法的时间复杂度时,只计算探索的状态数,因为这是教科书的重点。另一方面,一本“算法导论”教科书的处理方式会讨论实现和Fibonacci堆,并使用不同的时间复杂度度量。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注