Я делаю программу для инверсии count в pyhton и используя python27 для этого же. Я реализую alogorithm с использованием техники разделения и покорения (трюк сортировки слияния). Моя программа отлично работает для входного массива размером до 100 (это максимум, который я мог проверить). Теперь я проверил свою программу на входном массиве размером 50 000 и 1 000 000, но как бы я не смог получить правильные ответы. Я приклеил мой код ниже, любезно указать любую возможную ошибку:Инверсия счетчика в python (для большого целочисленного массива)
f=open('forum.txt')
a=[]
s=1
for line in f:
a.append(line)
def CountInversion(IntegerArray):
_count=0
lc=0
rc=0
RightArray=[]
LeftArray=[]
if len(IntegerArray)>1:
LeftArray,lc=CountInversion(IntegerArray[:len(IntegerArray)/2])
RightArray,rc=CountInversion(IntegerArray[len(IntegerArray)/2:])
elif len(IntegerArray)==1:
return IntegerArray,0
ResultArray=IntegerArray
i=0
l=len(ResultArray)
j,k=0,0
for i in range(0,l):
if j<len(RightArray) and k<len(LeftArray):
if RightArray[j]<LeftArray[k]:
ResultArray[i]=RightArray[j]
j += 1
a=(len(LeftArray)-k)
_count = _count + a
else:
ResultArray[i]=LeftArray[k]
k += 1
elif j<len(RightArray):
ResultArray[i]=RightArray[j]
j += 1
elif k<len(LeftArray):
ResultArray[i]=LeftArray[k]
k += 1
return ResultArray,(_count+lc+rc)
arr,b=CountInversion(a)
print ('end of inversions')
print b
Я побежал код, данный JF Себастьяна в this посте, но результаты такие же (правильные ответы на небольшой вход, но не для ввода массив размером 50000 или 1 000 000)
Это едва читаемый, но вы можете эффективно рассчитывать инверсии пути реализации сортировки слияния себя с небольшой модификацией (которая может быть то, что этот код пытается делать). – mmgp
Пожалуйста, разместите правильно отложенный код - это на самом деле имеет значение. –
s/1,00,000/100,000 /, SO не разрешит мне. –