时间复杂度O(v+e)
非常清楚,它类似于在程序中单独运行的2个循环(e次和v次)。
但是,当空间复杂性变得相同时,我感到很困惑。
是不是首先分配O(v)
空格然后释放它然后分配O(e)
空格?
谢谢!
答案 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))
适用于已描述的两种情况。