【发布时间】:2014-05-21 15:03:46
【问题描述】:
我有一个名为min_max的递归函数;它传递了一个链表;它返回一个包含最小值和最大值的 2 元组。如果链表为空,则min_max 返回(None, None)。例如,如果我们将此函数称为min_max(list_to_ll([1, 3, 7, 2, 0])),则返回的结果将是(0, 7)。
class LN:
def __init__(self,value,next=None):
self.value = value
self.next = next
def list_to_ll(l):
if l == []:
return None
front = rear = LN(l[0])
for v in l[1:]:
rear.next = LN(v)
rear = rear.next
return front
def min_max(ll):
if ll == None:
return (None,None)
else:
result = (ll.value,ll.value)
if ll.next != None:
return (min(result[0],min_max(ll.next)[0]),max(result[1],min_max(ll.next)[1]))
else:
return result
if __name__ == '__main__':
print('\nTesting min_max')
print(min_max(None))
print(min_max(list_to_ll([0])))
print(min_max(list_to_ll([7, 3, 5, 2, 0])))
print(min_max(list_to_ll([1, 3, 5, 2, 7])))
values = [i for i in range(1,100)]
print(values)
print(min_max(list_to_ll(values)))
我的问题是如何加快可能有 100 个元素的链表上的递归调用 min_max?我可以通过与 5-7 个元素链接的 test_case,但是对于 100 个元素,我的函数效率不高。谢谢。
【问题讨论】:
-
您的代码分别针对最小和最大情况遍历链表。您遍历两次就足够了。
-
你有在这里使用递归吗?
-
@MartijnPieters WoW ...非常感谢,我能弄明白...
标签: python performance recursion linked-list