【问题标题】:Counting inversions of an array using DAC approach使用 DAC 方法计算数组的反转
【发布时间】:2015-11-24 09:47:53
【问题描述】:

我正在尝试编写代码以使用 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:赋值前引用了局部变量“count”

我无法理解这个错误。谁能告诉我为什么会出现这个错误?

【问题讨论】:

  • 你实际上从inversions函数返回了什么?
  • 两个词:使用数学。

标签: python divide-and-conquer


【解决方案1】:

查看第 26 行的代码。

arr1 = inversions(l, m)

在这一行中,您正在分配函数返回的值。但是你的函数实际返回的是什么?然后想一想,您的列表包含什么类型的内容?绝对是“无类型”。

然后看线,

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

您正在比较,即尝试减去两个 Nonetype 对象,这就是错误的原因。

发生错误是因为您试图在声明变量之前为其赋值。你可能会说,好吧,我已经在函数之外声明了它。如果要使用全局变量,则必须明确告知这样做,除非它会将其视为函数的局部变量。

要解决您最近的错误,您可以在为函数赋值之前使用以下行。

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)

【讨论】:

  • 仍然出现同样的错误global count 不工作。
猜你喜欢
  • 2010-09-25
  • 2016-12-13
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 2013-09-16
  • 2014-07-21
  • 2021-01-28
相关资源
最近更新 更多