繁体   English   中英

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

[英]How do I write O(n2) program of matrix n x n?

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

n x n 矩阵

我应该得到 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() 

您想嵌套两个循环并更改索引,以便解析 x 和 y。 目前,您的代码通过 (all x, y = 0) 和 (x = 0, all 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() 

或者,您可以 go 施瓦辛格方式而不检查(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')

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

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

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

n²+n²= O(n²)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM