Python 更快地实现树高功能
我对算法不熟悉,我开发了这样一个函数来查找输入序列的树高Python 更快地实现树高功能,python,algorithm,python-3.x,tree,Python,Algorithm,Python 3.x,Tree,我对算法不熟悉,我开发了这样一个函数来查找输入序列的树高 import sys, threading class TreeHeight: def read(self): self.n = int(sys.stdin.readline()) self.parent = list(map(int, sys.stdin.readline().split())) def compute_height(s
import sys, threading
class TreeHeight:
def read(self):
self.n = int(sys.stdin.readline())
self.parent = list(map(int, sys.stdin.readline().split()))
def compute_height(self):
# Replace this code with a faster implementation
maxHeight = 0
for vertex in range(self.n):
height = 0
i = vertex
while i != -1:
height += 1
i = self.parent[i]
maxHeight = max(maxHeight, height)
return maxHeight
def main():
tree = TreeHeight()
tree.read()
print(tree.compute_height())
threading.Thread(target=main).start()
其工作原理如下:
5
4 -1 4 1 1
和输出
3
因为有5个节点的编号从0到4,节点0是节点4的子节点,节点1是根节点,节点2是节点4的子节点,节点3是节点1的子节点,节点4是节点1的子节点。此树的高度为3,因为从根1到叶2的路径上的顶点数为3
我的解决方案是可行的,但它并没有针对深树进行优化。例如,程序因输入100000而崩溃
在我的情况下,什么是更好的解决方案?更快和不崩溃是有区别的。你可能应该首先关注崩溃问题。我认为这两个问题是相互关联的,因为低效的算法崩溃的结果是什么?它看起来不应该崩溃。也许它在一个无限循环中运行,他正在测试的环境杀死了他的进程。代码是令人费解的,但它绝对可以进入无限循环,只需考虑一个包含1个项目的树,仅0个。你能假设顶点被排序吗?即,顶点的父对象位于顶点之前?在这种情况下,缓存中间树的高度,这样就不必一直遍历到根。使用递归方法可以更有效地实现这一点,因为它不会存储每个高度。然而,这需要子指针。更快和不崩溃是有区别的。你可能应该首先关注崩溃问题。我认为这两个问题是相互关联的,因为低效的算法崩溃的结果是什么?它看起来不应该崩溃。也许它在一个无限循环中运行,他正在测试的环境杀死了他的进程。代码是令人费解的,但它绝对可以进入无限循环,只需考虑一个包含1个项目的树,仅0个。你能假设顶点被排序吗?即,顶点的父对象位于顶点之前?在这种情况下,缓存中间树的高度,这样就不必一直遍历到根。使用递归方法可以更有效地实现这一点,因为它不会存储每个高度。但是,这需要子指针。