gpt4 book ai didi

python - 合并排序不适用于大数据集

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:22 25 4
gpt4 key购买 nike

我正在尝试使用合并排序算法来计算包含 1 到 100,000 范围内所有数字的数组中的倒置。当我输入一个小数据集时它工作正常但当我输入包含较大数组的文件时没有返回正确答案。我输入文件的方式有问题吗?我以前从未需要将文件输入到数组中,所以我不能明确地说我是否正确地做这件事。

file = open('IntegerArray.txt','r')
integerArray = []
for line in file:
integerArray.append(line)


inversions = 0

def divide(list):
if len(list) > 1:
middle = int(len(list) / 2)
left = divide(list[:middle])
right = divide(list[middle:])

#left = divide(left)
#right = divide(right)

elif len(list) <= 1:
return list

return merge(left,right)

def merge(left,right):
global inversions
result = []

while left != [] and right != []:
if left[0] < right[0]:
result.append(left[0])
if len(left) > 1:
left = left[1:]
else:
left = []
elif left[0] > right[0]:
result.append(right[0])
inversions += len(left)
if len(right) > 1:
right = right[1:]
else:
right = []

if left != []:
result += left
if right != []:
result += right

return result

divide(integerArray)
print(inversions)

这应该返回 2407905288,但返回的是 2397819672。

最佳答案

似乎它不适用于大多数数字大于 9 的情况!您将数字保存在字符串列表中。所以合并函数中的比较器比较两个字符串,例如 2 大于 12!

至少您需要将第一行更改为:

file = open('IntegerArray.txt','r')
integerArray = []
for line in file.readlines():
integerArray.append(int(line.strip()))

关于python - 合并排序不适用于大数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33272368/

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