O(V + E)空间复杂度是什么意思?

时间:2013-08-12 12:38:29

标签: algorithm graph-algorithm

时间复杂度O(v+e)非常清楚,它类似于在程序中单独运行的2个循环(e次和v次)。

但是,当空间复杂性变得相同时,我感到很困惑。

是不是首先分配O(v)空格然后释放它然后分配O(e)空格?

谢谢!

1 个答案:

答案 0 :(得分:3)

当你处理时间复杂性时,加法(O(v+e))意味着顺序发生了两件事。当你转向空间复杂性时,+符号应该用在空间的上下文中,而不是时间。

O(v+e)空间相当于使用O(v)+O(e)空格。本质上(我假设你正在处理图形,这里),这意味着你为每个顶点使用了一些存储空间,并为每个边缘使用了一些空间(可能你有一个List<Vertex>和一个{{1}或者其他什么) - 很可能都在同一时间。

在分配List<Edge>内存,释放内存,然后分配O(v)内存的示例中,您可以随时使用O(e)空格。

编辑:正如G.巴赫指出的那样,O(max(v,e))将永远等同于O(v+e)。我认为,有些情况下,一个或另一个在清晰度方面更合适(一个或另一个将更好地表达实际使用的空间/时间),但这是主观的。如果这是一个班级,你的教练可能更喜欢一种符号而不是另一种 - 从课堂笔记中可以看出,或者你可以问。但简而言之,O(max(v,e))适用于已描述的两种情况。