Algorithm O(V+E)空间复杂性的含义是什么?

Algorithm O(V+E)空间复杂性的含义是什么?,algorithm,graph-algorithm,Algorithm,Graph Algorithm,时间复杂度,Ov+e非常清楚,它类似于程序中分别运行的2次循环和v次循环 但是,当同样的问题涉及到空间复杂性时,我感到困惑 它是否像,首先分配Ov空间,然后释放它,然后分配Oe空间 谢谢 当你处理时间复杂性时,加法Ov+e意味着两件事情是连续发生的。当您谈到空间复杂性时,应该在空间上下文中使用+符号,而不是在时间上下文中 Ov+e空间等价于使用Ov+Oe空间。基本上,我假设你在处理图,这里,它意味着你在为每个顶点使用一些存储空间,为每个边使用一些空间,也许你有一个列表和一个列表,或者其他的东西,

时间复杂度,Ov+e非常清楚,它类似于程序中分别运行的2次循环和v次循环

但是,当同样的问题涉及到空间复杂性时,我感到困惑

它是否像,首先分配Ov空间,然后释放它,然后分配Oe空间


谢谢

当你处理时间复杂性时,加法Ov+e意味着两件事情是连续发生的。当您谈到空间复杂性时,应该在空间上下文中使用+符号,而不是在时间上下文中

Ov+e空间等价于使用Ov+Oe空间。基本上,我假设你在处理图,这里,它意味着你在为每个顶点使用一些存储空间,为每个边使用一些空间,也许你有一个列表和一个列表,或者其他的东西,很可能所有的都在同一时间

在分配Ov内存,释放它,然后分配Oe内存的示例中,您随时都在使用Omaxv,e空间


编辑:正如G.巴赫指出的,Ov+e永远等同于Omaxv,e。我认为,在某些情况下,一个或另一个在清晰度方面更合适,一个或另一个可以更好地表达实际使用的空间/时间,但这是主观的。如果这是针对一门课,你的老师可能更喜欢一种符号而不是另一种——这应该从课堂笔记中显而易见,或者你可以问。但简言之,Ov+e适用于上述两种情况。

当您处理时间复杂性时,Ov+e加法意味着两件事情是连续发生的。当您谈到空间复杂性时,应该在空间上下文中使用+符号,而不是在时间上下文中

Ov+e空间等价于使用Ov+Oe空间。基本上,我假设你在处理图,这里,它意味着你在为每个顶点使用一些存储空间,为每个边使用一些空间,也许你有一个列表和一个列表,或者其他的东西,很可能所有的都在同一时间

在分配Ov内存,释放它,然后分配Oe内存的示例中,您随时都在使用Omaxv,e空间


编辑:正如G.巴赫指出的,Ov+e永远等同于Omaxv,e。我认为,在某些情况下,一个或另一个在清晰度方面更合适,一个或另一个可以更好地表达实际使用的空间/时间,但这是主观的。如果这是针对一门课,你的老师可能更喜欢一种符号而不是另一种——这应该从课堂笔记中显而易见,或者你可以问。但简而言之,Ov+e适用于上述两种情况。

它相当于使用Ov+Oe空间。基本上,我假设你在处理图,这里,它意味着你在为每个顶点使用一些存储空间,为每个边使用一些空间,也许你有一个列表和一个列表,或者什么的。好的,明白了。!是的,它在上下文中表示图的邻接列表。谢谢。@Michelle如果是这样呢?如中所示,我们分配Ov空间,然后释放它,然后再次分配Oe空间;空间复杂度是多少?那将是Omaxv,e。@phoenix:万一你没有看到下面答案的注释,Omaxv,e=Ov+e=Ov+Oe,那么你可以使用这三个选项中的任何一个;根据我在算法分析方面的经验,这三种选择中通常比较喜欢的一种是Ov+e。它相当于使用Ov+Oe空间。基本上,我假设你在处理图,这里,它意味着你在为每个顶点使用一些存储空间,为每个边使用一些空间,也许你有一个列表和一个列表,或者什么的。好的,明白了。!是的,它在上下文中表示图的邻接列表。谢谢。@Michelle如果是这样呢?如中所示,我们分配Ov空间,然后释放它,然后再次分配Oe空间;空间复杂度是多少?那将是Omaxv,e。@phoenix:万一你没有看到下面答案的注释,Omaxv,e=Ov+e=Ov+Oe,那么你可以使用这三个选项中的任何一个;根据我在算法分析方面的经验,这三种选择中通常首选的一种是Ov+e。当你处理时间复杂性时,Ov+e加法意味着两件事情是顺序发生的。我不知道这意味着什么,但我假设你的意思是,算法由两部分组成,一部分需要Ov时间,另一部分需要Oe时间。这是不正确的。加号不一定源于具有不同复杂度的连续阶段的算法;加号也有可能是一种表示这两种算法的最大复杂度的方法,而算法没有不同的阶段。例如,这就是BFS具有O | V |+| E |复杂性的原因。另一种更清晰地可视化这一点的算法是使用BFS或DFS查找图的连接组件。这也有O | V |+| E |的时间复杂性,对于边比节点少的图,我们得到O | V |>| E |,因此O | V |+| E |=O | V |,但是对于边比节点多的图,我们得到O | V |+| E |=O | E |。当你指出等价性时,这是非常明显的。我责怪星期一早上没有咖啡。我认为你
根据情况,使用一个版本比另一个版本更清晰,但两个版本都是正确的。使用max而不是+可以澄清问题,但由于Big Oh不应该是准确的,而且术语在形式上并不意味着不同的事情,因此尝试使用Big Oh来实现语义准确性是一个失败的原因。如果时间和/或空间的精确使用是相关的,那么Big Oh就是一个错误的工具。当你处理时间复杂性时,加法Ov+e意味着两件事情是连续发生的。我不知道这意味着什么,但我假设你的意思是,算法由两部分组成,一部分需要Ov时间,另一部分需要Oe时间。这是不正确的。加号不一定源于具有不同复杂度的连续阶段的算法;加号也有可能是一种表示这两种算法的最大复杂度的方法,而算法没有不同的阶段。例如,这就是BFS具有O | V |+| E |复杂性的原因。另一种更清晰地可视化这一点的算法是使用BFS或DFS查找图的连接组件。这也有O | V |+| E |的时间复杂性,对于边比节点少的图,我们得到O | V |>| E |,因此O | V |+| E |=O | V |,但是对于边比节点多的图,我们得到O | V |+| E |=O | E |。当你指出等价性时,这是非常明显的。我责怪星期一早上没有咖啡。我认为使用一个版本比另一个版本更清晰,这取决于具体情况,但两个版本都是正确的。使用max而不是+可以澄清问题,但由于Big Oh不应该是准确的,而且术语在形式上并不意味着不同的事情,因此尝试使用Big Oh实现语义准确性是一个失败的原因。如果时间和/或空间的精确使用是相关的,那么Big Oh就是一个错误的工具。