我有一个与空间使用相关的基本问题,我以DFS为例。我不确定这几个实现中的空间使用是否相同,或者是否有一些实际不同。我对空间使用的解释与函数分配的内容直接相关。 任何人都可以帮我验证我制作的这几个例子的空间使用情况吗?这是一个关于空间复杂性的问题,而不是时间+功能
示例1:我们分配将存储N个节点的字典。我很肯定这个人分配O(N)空间。
class Node:
def __init__(self, children):
self.children = children
def getChildren(self):
return self.children
def dfs(start):
stack = []
visited = {}
stack.append(start)
while(len(stack) > 0):
node = stack.pop()
if(node not in visited):
visited[node] = True
for child in node.getChildren():
stack.append(child)
示例2:我们不在dfs函数中分配任何内容,而是在Node上设置一个标志。我们没有在dfs函数中分配任何东西,所以它是O(1)空间使用。
class Node:
def __init__(self, children):
self.children = children
self.visited = False
def getChildren(self):
return self.children
def getVisited(self):
return self.visited
def setVisited(self, visit):
self.visited = visit
def dfs(start):
stack = []
stack.append(start)
while(len(stack) > 0):
node = stack.pop()
if(!node.getVisited()):
node.setVisited(True)
for child in node.getChildren():
stack.append(child)
示例3:我们有一个可以操作的对象节点,但前面没有标记属性。 DFS在每个节点上手动创建一个标志,从而分配O(N)空间。
class Node:
def __init__(self, children):
self.children = children
def getChildren(self):
return self.children
def dfs(start):
stack = []
stack.append(start)
while(len(stack) > 0):
node = stack.pop()
if(node.visited is not None):
node.visited = True
for child in node.getChildren():
stack.append(child)
答案 0 :(得分:1)
Space complexity不是由 分配空间决定的,而是需要多少空间(内存)来保存给定的数据结构算法要处理的对象数。
在您的示例中,所有数据结构都需要O(N)空间(N =节点数)