合并排序不适用于大数据

2024-09-29 02:18:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用合并排序算法来计算数组中的倒数,该数组包含1到100000范围内的所有数字。当我输入一个小的数据集时,它工作得很好,但是当我输入包含较大数组的文件时,它不会返回正确的答案。也许我输入文件的方式有问题吗?我以前从未向数组中输入过文件,所以我无法确定是否正确地执行了该操作。在

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。在


Tags: 文件rightmiddlelenreturnif数组result
2条回答

似乎它不应该适用于大多数大于9的情况!你把数字保存在字符串列表中。所以你的comparator在merge函数中比较两个字符串,所以例如2大于12!在

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

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

尝试k方式合并排序http://www.sanfoundry.com/java-program-k-way-merge-algorithm/。大数据集的问题是简单的合并排序必须在运行时将两个大数组放入主内存,这有时是不可能的。在

相关问题 更多 >