用DAC方法计算阵列的逆

2024-09-28 16:23:41 发布

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

我试着用DAC方法来计算数组的倒数。下面是我在Python中使用的代码

arr=[1,3,5,2,4,6]
n=6
l=0
h=n-1
count=0

def inversions(l,h):
    if(l==h):
        return [arr[l]]

    m=(h+l)//2
    arr1=inversions(l,m)
    arr2=inversions(m+1,h)

    s1=m-l
    s2=h-(m+1)
    mer=[]
    k1=k2=0

    while(k1<=s1 and k2<=s2):
        if(arr1[k1] < arr2[k2]):
            mer.append(arr1[k1])
            k1+=1
        else:
            count+=(k2-(m+1))
            mer.append(arr2[k2])
            k2+=1

    if(k1>s1):
        mer.extend(arr2[k2:s2+1])

    if(k2>s2):
        mer.extend(arr2[k1:s1+1])    

    return mer

res=inversions(l,h)

print('Total No. of Inversions : %d' %count)

在运行上述代码时,我得到了这个错误消息。你知道吗

UnboundLocalError: local variable 'count' referenced before assignment

我不能理解这个错误。有人能告诉我为什么我会犯这个错误吗?你知道吗


Tags: 代码returnifcount错误k2k1arr
1条回答
网友
1楼 · 发布于 2024-09-28 16:23:41

请看第26行的代码。你知道吗

arr1 = inversions(l, m)

在这一行中,您将指定函数返回的值。但是你的函数实际返回什么呢?然后想想,你的列表包含什么类型的内容?当然是“非类型”。你知道吗

然后看到那条线

if(arr1[k1] > arr2[k2]):

你在比较,即试图减去两个非类型的对象,这就是错误的原因。你知道吗

发生此错误是因为您试图在声明变量之前将值赋给它。你可以告诉我,我已经在函数外声明了。如果要使用全局变量,必须显式地告诉它这样做,除非它将其视为函数的局部变量。你知道吗

要解决最近的错误,可以在函数中赋值计数之前使用下面的行。你知道吗

global count

但是,我认为你的代码写得并不完美。上面还有虫子。希望你能自己解决:)

这在我的机器上运行得很好,尽管输出错误。你知道吗

def inversions(l,h):

    if(l==h):
        return [arr[l]]

    m=(h+l)//2
    arr1=inversions(l,m)
    arr2=inversions(m+1,h)

    s1=m-l
    s2=h-(m+1)
    mer=[]
    k1=k2=0

    while(k1<=s1 and k2<=s2):
        if(arr1[k1] < arr2[k2]):
            mer.append(arr1[k1])
            k1+=1

        else:
            global count
            count +=(k2-(m+1))
            mer.append(arr2[k2])
            k2+=1

    if(k1>s1):
        mer.extend(arr2[k2:s2+1])

    if(k2>s2):
        mer.extend(arr2[k1:s1+1])

    return mer

res=inversions(l,h)

print('Total No. of Inversions : %d' %count)

相关问题 更多 >