我在pyhton中創建一個用於計數反轉的程序,並使用python27進行同樣的操作。我使用分治技術來實現算法(合併排序技巧)。我的程序運行良好的輸入數組的大小爲100(這是我可以驗證的最大值)。 現在我測試了我的程序的大小爲50,000和1,00,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
我也跑在this後由JF塞巴斯蒂安給出的代碼,但結果是一樣的(答案是小輸入正確的,但不能輸入數組大小爲50000或1,00,000)
是勉強可讀的解決,但可以有效地通過某種自己一個細小的改動實現合併(這可能是什麼這個代碼試圖數反轉去做)。 – mmgp 2013-02-09 02:13:30
請張貼適當的縮進代碼 - 它確實很重要。 – 2013-02-09 02:16:17
s/1,00,000/100,000 /,SO不會讓我。 – 2013-02-09 02:26:41