我基本上是在尝试编码倒数计数算法(使用合并排序的分治策略)。我第一次尝试在一个小数组中测试它,但我得到了以下错误:
Traceback (most recent call last):
File "cntinv.py", line 26, in <module>
ans = count_inversions(array)[1]
File "cntinv.py", line 19, in count_inversions
a, left = count_inversions(array[:mid])
File "cntinv.py", line 19, in count_inversions
a, left = count_inversions(array[:mid])
TypeError: 'int' object is not iterable
这是我的代码:
def count_split_inversions(a, b):
c, cnt = [], 0
while len(a) > 0 and len(b) > 0:
if b[0] < a[0]:
c.append(b.pop(0))
cnt += len(a)
else:
c.append(a.pop(0))
if len(a) > 0:
c.extend(a)
else:
c.extend(b)
return(c, cnt)
def count_inversions(array):
n = len(array)
if n <= 1: return(0)
mid = n // 2
a, left = count_inversions(array[:mid])
b, right = count_inversions(array[mid:])
c, split = count_split_inversions(a, b)
return(c, left + right + split)
array = [1, 3, 5, 2, 4, 6]
ans = count_inversions(array)[1]
print("The answer is:", str(ans))
在错误信息的帮助下,我找不到错误。所以,如果你能帮我指出我的错误,我将不胜感激。
提前感谢。:)
如果n <= 0
,count_inversions()
返回0
,而不是元组:
def count_inversions(array):
...
if n <= 1: return(0)
...
由于调用函数需要一个元组,因此会导致错误。