gpt4 book ai didi

algorithm - 在哪些情况下,使用合并排序计算反转的算法将失败

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

我编写了以下代码来计算数字数组中的反转次数。它为我测试的输入提供了正确的结果,但它仍然无法通过测试用例,我无法访问测试用例我无法弄清楚在哪些情况下它会失败,我真的可以在这里使用一些帮助。

 def count_inversion(array):
"""
counts number of inversions in array using divide and conquer
an inversion is a pair (x,y) such that x > y, example in array
[3,1,2] there are two inversions (3,1), (3,2)
"""
length = len(array)
if length == 1 or length == 0:
return array,0
elif length == 2:
if array[0] > array[1]:
array.sort()
return array,1
else:
return array,0
else:
left_array,left_count = count_inversion(array[:length/2])
right_array,right_count = count_inversion(array[length/2:])
across_arr,across_count = count_split(left_array,right_array)
return across_arr,left_count + right_count + across_count

def count_split(left,right):
"""
counts the number of inversions across split pair
left and right, by piggy backing on merge routine
of merge sort
"""
l = 0
r = 0
merge = []
count = 0
inversions = 0
last_r = 0
try:
while True:
if left[l] > right[r]:
merge.append(right[r])
if r == 0 or r == last_r:
inversions = 0
inversions += 1
r = r + 1
else:
merge.append(left[l])
count = count + inversions
l = l + 1
last_r = r

except IndexError:
if r == len(right):
while l < len(left):
count += inversions
merge.append(left[l])
l = l + 1
else:
while r < len(right):
merge.append(right[r])
r = r + 1
return merge,count

if __name__ == '__main__':
f = open('inversions.txt')
arr = []
for line in f:
arr.append(int(line))
# arr is a list of integers which are not sorted in any sense
# we are required to count number of inversions in arr
print count_inversion(arr)[1]

最佳答案

尝试

3 4 6 1 2 5

你的答案 - 5.
真正的答案 - 7.

这闻起来像作业/在线判断,所以我会说你的错误在异常 block 中的某个地方。

关于algorithm - 在哪些情况下,使用合并排序计算反转的算法将失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9900953/

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