如何编写矩阵n x n的O(n2)程序?

时间:2019-11-20 22:53:47

标签: python algorithm matrix

我正在练习并尝试编写O(n ^ 2)程序,该程序测试A中的同一行或同一列上是否有两个1。其中A = n x n分别为0和1的矩阵。
给定A为:

n x n matrix

我应该得到2个匹配的答案。
一个在第一行,另一个在第三列。

我的第二次尝试:

def testLines():
    count = 0
    for x in range( 0, len(A)-1 ): 
        if( (A[x] == 1) & (A[x+1] == 1) ): 
        count+=1
    for y in range( 0, len(A)-1): 
        if( (A[y] == 1 & A[y+1]) == 1 ): 
        count+=1
    print( count, '1s has been matched in the array A')


testLines() 

2 个答案:

答案 0 :(得分:1)

您想嵌套两个循环并更改索引,以便同时解析x和y。目前,您的代码会遍历(全部x,y = 0)和(x = 0,全部y)。

A = [[0, 0, 1, 1],
     [0, 1, 0, 0],
     [0, 0, 1, 0],
     [0, 0, 1, 0]]

def testLines():
    count = 0
    N = len(A)
    for x in range(N): 
        for y in range(N):
            if A[x][y] == 1:
                if x+1 < N and A[x+1][y] == 1: 
                    count += 1
                if y+1 < N and A[x][y+1] == 1: 
                    count += 1
    print(count, '1s has been matched in the array A')

testLines() 

或者,您可以采用Schwarzenegger的方式,而不检查(x+1, y)(x, y+1)是否存在。这将引发IndexError,您可以选择忽略。

def testLines():
    count = 0
    N = len(A)
    for x in range(N): 
        for y in range(N):
            try:
                if A[x][y] == 1 and A[x+1][y] == 1 or A[x][y+1] == 1: 
                    count += 1
            except IndexError:
                continue
    print(count, '1s has been matched in the array A')

答案 1 :(得分:0)

您可以运行一个嵌套循环(n²)以获取行的总和。如果总和为2,则该行有两个1。

现在互换行和列(将行视为列,反之亦然)。

再次运行嵌套循环(n²)以检查列的总和。

n²+n²= O(n²)