用于在图中查找局部 min/max 的爬山算法的时间复杂度

Time complexity of Hill Climbing algorithm for finding local min/max in a graph

在具有 n 个节点(每个节点最多 d 个邻居)的图中找到局部最小值的算法的时间复杂度(算法顺序)是多少?

详细信息: 我们有一个包含 n 个节点的图。图中的每个节点都有一个整数值。每个节点最多有 d 个邻居。我们正在寻找在其邻居中具有最低值的节点。该图由邻接表表示。该算法首先选择随机节点,然后在这些节点中选择具有最小值的节点(假设节点 u)。从节点 u 开始,算法找到一个邻居 v,其中 value(v) < value(u)。然后,它继续 v 并重复上述步骤。当节点没有任何具有较低值的邻居时,算法终止。这个算法的时间复杂度是多少?为什么?

时间复杂度为O(n + d),因为你可以有n个节点,它们是这样连接的,数字表示节点的值:

16-15-14-13-12-11-10-9-8-7-6-5-4-3-2-1

你可以随机 select 这些,用“!”标记

!-!-!-13-12-11-10-9-8-7-6-5-4-3-2-1

所以你 select 值为 14 的节点,根据描述的算法,你将检查所有节点和所有边,直到到达值为 1 的节点。

任务的最差复杂度:"find one element" 是 O(N),其中 "N" 是您输入的长度,而您的输入长度实际上是 N=G(n,d)=n+d.