我刚刚发现了堆(在现实生活中和 Python 中),现在我正在尝试确定某个随机数列表是否按堆顺序排列。
问题是我不确定自己在实践中是否真的理解“堆”,即使我相信所提供的定义是有道理的。
我发现了一些可以帮助你编写堆伪代码的练习题。这就是问题所在,下面是我尝试解决的问题:
编写一个检查数字列表是否为堆的函数:
给定一个列表,如果数字在堆顺序中,则返回 True,如果数字不是,则返回 False,并让程序返回并打印答案。
例子:
- 返回 True:以下列表按堆顺序排列:[0,1, 10, 2, 3, 11, 12, 4, 5, 19, 15]
- 返回 False 以下列表未按堆顺序排列:[0, 1, 10, 2, 15, 11, 12, 4, 5, 19, 3]
然后有 2 个列表,其中包含一堆从 1 到 100 的随机数,并且有些重复。
def heap_or(A):
n = len(A)
for i in range(n):
start = (len(A) - 2) / 2
while start >= 0:
siftDown(A, start, len(A) - 1)
start -= 1:
return 'True'
else:
return 'False'
def siftDown(A, start, end):
root = start
while root * 2 + 1 <= end:
number = root * 2 + 1
if number + 1 <= end and A[number] < A[number + 1]:
number += 1
if number <= end and A[root] < A[number]:
A[root], A[number] = A[number], A[root]
root = number
else:
return
print
有人可以帮帮我吗?因为我不确定我是否正确定义了堆,所以代码也给我带来了困难!