gpt4 book ai didi

python - 构建最大堆和迭代

转载 作者:行者123 更新时间:2023-11-28 21:26:19 24 4
gpt4 key购买 nike

我有两个问题:

1) 最近我尝试构建一个 max heap .即使我读了 CLRS我在运行时找不到错误。以下是我的代码...

def maxHeapify(list, index):
int = index
left = (int+1) * 2 - 1
right = (int+1) * 2
largest = 0
if left < len(list):
if (left <= len(list)) & (list[left] >= list[int]):
largest = left
else:
largest = int
if right < len(list):
if (right <= len(list)) & (list[right] >= list[largest]):
largest = right
else:
pass
if largest != int:
listNew = swapWithinList(list, int, largest)
listNew = maxHeapify(listNew, largest)
else:
return listNew


def swapWithinList(list, id1, id2):
num1 = list[id1]
num2 = list[id2]
listNew = list[:id1]
listNew.append(num2)
listNew = listNew + list[(id1+1):id2]
listNew.append(num1)
listNew = listNew + list[(id2+1):]
return listNew

我提供输入,但控制台只是说:

UnboundLocalError: local variable 'listNew' referenced before assignment

这是否意味着我将 return 语句放在了错误的行或者有什么我没有提到的?

2)什么是迭代?

当我问这个问题时,我有点尴尬。但什么是迭代? Wiki 说这个过程的每次重复都意味着它,那么它是循环给出每一轮的结果吗?

迭代器似乎是Python中的一个基本元素,迭代器和迭代有什么区别?

最佳答案

1:

没有进一步的评论,这里是改编自 Wikipedia 的代码:

def max_heapify(A, i):
left = 2 * i + 1
right = 2 * i + 2
largest = i
if left < len(A) and A[left] > A[largest]:
largest = left
if right < len(A) and A[right] > A[largest]:
largest = right
if largest != i:
A[i], A[largest] = A[largest], A[i]
max_heapify(A, largest)

def build_max_heap(A):
for i in range(len(A) // 2, -1, -1):
max_heapify(A, i)

例子:

def ptree(A, i=0, indent=0):
if i < len(A):
print ' ' * indent, A[i]
ptree(A, i * 2 + 1, indent + 1)
ptree(A, i * 2 + 2, indent + 1)

A = range(9)
build_max_heap(A)
ptree(A)

结果:

 8
7
3
1
0
4
6
5
2

如果您有任何问题,请告诉我们。

2:

Python 中的迭代在技术上是重复调用某个对象的 next() 方法直到它引发 StopIteration 异常的过程。拥有这种next 方法的对象称为Iterator。能够为调用代码提供 Iterator 的对象称为 Iterable。

关于python - 构建最大堆和迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13142041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com