【发布时间】:2018-05-23 04:39:39
【问题描述】:
算法:
发布列表是一个单链表,每个节点都有一个额外的跳转字段。跳转字段指向任何其他节点。跳转列表排序是如果跳转字段指向之前没有探索过的节点,我们总是首先跟随跳转字段,然后从下一个位置的节点开始搜索。编写一个递归例程,获取帖子列表并计算跳转优先顺序。
这是作者的解决方案(非常简单):
def search_postings_list(L):
def search_postings_list_helper(L):
if L and L.order == -1:
L.order = order[0]
order[0] += 1
search_postings_list_helper(L.jump)
search_postings_list_helper(L.next)
order = [0]
search_postings_list_helper(L)
我的问题:
根据解决方案,最坏情况输入是每个节点的跳转节点和下一个节点相等。我不确定我是对还是错。
如果是这种情况,堆栈大小确实会达到 N max 并且每个节点都被触摸两次,但是……即使不是这种情况,每个节点也会被触摸两次。例如,如果node A 有一个指向node C 的跳转指针及其指向node B 的next 指针,那么node C 将在node B 之前被探索,但最终,node B 会将node C 放回递归堆栈(它只会在第 3 行之后弹出)。那么为什么这是最坏的情况呢?
【问题讨论】:
-
你的意思是时间或空间上的最坏情况还是两者兼而有之?
标签: python algorithm recursion