Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何改进此Hackerrank解决方案以避免超时?_Python 3.x_Mergesort - Fatal编程技术网

Python 3.x 如何改进此Hackerrank解决方案以避免超时?

Python 3.x 如何改进此Hackerrank解决方案以避免超时?,python-3.x,mergesort,Python 3.x,Mergesort,问题: 我的解决方案: total_swaps = 0 def countInversions(a): global total_swaps total_swaps = 0 mergesort(a) return total_swaps def merge(arr, left, mid, right): global total_swaps buffer = arr[left:mid] arr_index = left arr1_

问题: 我的解决方案:

total_swaps = 0
def countInversions(a):
    global total_swaps
    total_swaps = 0
    mergesort(a)
    return total_swaps

def merge(arr, left, mid, right):
    global total_swaps
    buffer = arr[left:mid]
    arr_index = left
    arr1_index = 0
    arr2_index = mid
    while arr1_index < len(buffer) and arr2_index < right:
        if buffer[arr1_index] > arr[arr2_index]: 
            arr[arr_index] = arr[arr2_index]
            total_swaps += len(buffer) - arr1_index
            arr2_index += 1
        else:
            arr[arr_index] = buffer[arr1_index]
            arr1_index += 1
        arr_index += 1

    while arr1_index < len(buffer):
        arr[arr_index] = buffer[arr1_index]
        arr_index += 1
        arr1_index += 1

def mergesort(arr, left=0, right=None):
    if right is None:
        right = len(arr)
    if right - left <= 1:
        return
    mid = left + (right-left) // 2
    mergesort(arr, left, mid)
    mergesort(arr, mid, right)
    merge(arr, left, mid, right)


total_swaps=0
def计数反转(a):
全球总量交换
互换总额=0
合并排序(a)
返回总交换
def合并(arr、左、中、右):
全球总量交换
缓冲区=arr[左:中]
arr_索引=左
arr1_指数=0
arr2_指数=mid
而arr1_索引arr[arr2\u索引]:
arr[arr_索引]=arr[arr2_索引]
掉期总额+=len(缓冲)-arr1\U指数
arr2_指数+=1
其他:
arr[arr\u索引]=缓冲区[arr1\u索引]
arr1_指数+=1
arr_指数+=1
当arr1_索引如果右-左这里有一些小的改进,你可以尝试一下,但我怀疑它会获得很多好处:

  • countInversions()
    调用
    mergesort(a,0,len(a))
    并删除
    mergesort
    中的默认参数值,
    右侧的测试为None
  • 去掉全局变量,使
    mergesort()
    返回反转计数,它将通过添加递归调用的返回值来计算反转计数

  • 在小块上使用插入排序,例如
    如果右-左如果发布编码平台问题,会改进个人的算法方法,每个人都会这样做。最好自己去弄清楚,只在你失败的部分发表文章。