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

在大多数教科书中,均匀成本搜索(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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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