简化换位产品

时间:2016-06-02 07:16:48

标签: python algorithm performance optimization graph-algorithm

我希望采用大量换位产品,并将其归结为少量产品。我有以下代码,并希望有一些关于有效方法来降低这些产品的意见。在我提供代码之前,重要的是要认识到以下内容:

转置是两个元素的循环置换,具有以下属性:

  1. 相同换位的乘积取消。例如,(1,2)(1,2)(2,3)=(2,3)。
  2. 形式(x,y)(y,z)(x,y)的任何乘积等于(y,z)(x,y)(y,z)。
  3. 任何不共享元素的转置通勤。即,(u,v)(x,y)=(x,y)(u,v)。
  4. 我的代码如下。这是一个获取列表输入的过程,该列表包含许多表示转置的2元组。例如,有效输入为[(1,2)(2,3)(1,2)]。我在给定代码的底部有一个小解释。

    count = 1
    while count != 0:
        count = 0
        repeatCount = 0
        swappedCount = 0
        for i in range(len(route)-1):
            if len(route) > 1 and repeatCount == 0:
                if route[i] == route[i+1]:
                    route.pop(i+1)
                    route.pop(i)
                    count += 1
                    repeatCount += 1
    
        for i in range(len(route)-3):
            if len(route) > 3 and swappedCount == 0:
                if route[i] == route[i+2] and route[i+1] == route[i+3]:
                    route.pop(i+3)
                    route.pop(i+2)
                    route.insert(i,route[i+1])
                    route.pop(i+2)
                    count += 1
                    swappedCount += 1
    

    第一个用于循环搜索上面属性(1)的实例,第二个用于循环搜索属性(2)的实例。计数器repeatCounter和swappedCounter是我试图避免IndexError。

    PS任何完全实现这一目标的方法,即始终能够及时将任何产品减少到最低限度,将会非常感激,因为运行时间是整个程序其余部分的问题。

0 个答案:

没有答案