如何更快地计算大负数的算法?

时间:2018-03-17 19:56:56

标签: python-3.x algorithm matrix

我试图做一个程序,它可以采用任何大小的方阵,并找到两个任何方形子矩阵(它们不应重叠),其质量最接近。因此矩阵中的每个基本正方形都具有质量(任何数字)。问题是算法太慢,处理矩阵100 * 100包含大的负数(-10 ^ 8)。

K1 extends

问题在于此部分

from collections import defaultdict
from math import fsum
from itertools import islice, count

def matrix():

matritsa = list()
koord = list()
ssum = 0
diff = defaultdict(list)

size = int(input()) #size of the matrix
for line in range(size):
    matritsa += list(map(int,input().split())) #filling the matrix
Q1,Q2 = map(int,input().split())                  #quality range


for i in range(len(matritsa)):
    element = matritsa[i]
    if Q1 <= element and element <= Q2:  #checking if an element is in range
        koord.append([element, i//size, i%size, 1]) #coordinates of 1*1 elements




for razmer in range(2,size):    #taking squares of 2+ size
    #print("Razmer: ",razmer)
    for a in range(len(matritsa)):
        (x,y) = a//size,a%size  #coordinates of the left top square 
        if y + razmer > size:   
            continue

        ssum = 0
        for b in range(x,x+razmer):
            ssum += sum(matritsa[b*size+y:b*size+(y+razmer)])

        if Q1 <= ssum and ssum <= Q2:    #checking if it is in quality range
            koord.append([ssum,x,y,razmer]) 
            #print(koord)
            #print("Coordinate: {0},{1}; ssum: {2}".format(x,y,ssum))


        if x + razmer == size and y + razmer == size:
            #print("Final: {0},{1}".format(x,y))
            break



g = 0
temp = len(koord)
while g != temp:
    (value1,x1,y1,a) = koord[g]
    for i in range(g,temp - 1):
        (value2,x2,y2,b) = koord[i+1]
        if y1 >= y2 + b or y2 >= y1 + a:
            diff[abs(value1 - value2)].append([value1,value2])
        if x1 >= x2 + b or x2 >= x1 + a:
            diff[abs(value1 - value2)].append([value1,value2])
    g += 1




minimum = min(diff.keys())


if minimum == 0:
    print(*max(diff[minimum]))

elif len(diff[minimum]) > 1:
    maximum = sum(diff[minimum][0])
    result = diff[minimum][0]
    for pair in diff[minimum]:
        if sum(pair) > maximum:
            maximum = sum(pair)
            result = pair

0 个答案:

没有答案