代码之家  ›  专栏  ›  技术社区  ›  Jonathan

python-在矩阵中生成相同值的链接列表

  •  0
  • Jonathan  · 技术社区  · 6 年前

    给定一个矩阵,我想创建一行中所有1的链接列表,然后检查其中任何一行中是否有指针,如果指针留在某列中 i ,它们指向同一个新列。例如,考虑这个图像:

    enter image description here

    离开列C3的所有指针都指向同一个位置。离开c1列的所有指针指向同一位置、c2列等,但离开c5的指针不指向同一列。

    我只需遍历每一行,然后保存1的索引,就可以创建一个链接列表。但是,我不知道如何创建一种有效的方法来检查离开特定列的箭头是否都指向同一个位置。我可以迭代所有的组合,但这将是非常低效的。我该怎么办?

    出于测试目的,以下是图片中的矩阵:

    matrix = [[1,1,0,0,0][0,0,1,0,0][1,1,0,1,0][0,0,1,0,1][0,0,1,1,0]]

    输入:矩阵 输出:“假,此矩阵不满足要求” 输出说明:C5指向C1和C3。只有当一列中的所有1都指向左侧完全相同的列时,矩阵才满足要求。例如,如果(e,c1)=1,并且(e,c3)=0,那么这个矩阵将满足需求。

    1 回复  |  直到 6 年前
        1
  •  1
  •   MBo    6 年前

    生成集合列表,列表索引对应于列,集合包含寻址列的索引。

    扫描行时,添加要设置的链接列索引。最后检查设定长度。

    举个例子(为了避免出错,我使用了列名而不是索引):

    sets[C1] = {C2}
    sets[C5] = {C1,C3}
    

    快速生成代码:

    matrix = [[1,1,0,0,0],[0,0,1,0,0],[1,1,0,1,0],[0,0,1,0,1],[0,0,1,1,0]]
    sets = []
    for col in range(len(matrix[0])):
        sets.append(set())
    for row in range(len(matrix)):
        leftone = -1
        for col in range(len(matrix[row])):
            if matrix[row][col] == 1:
                if leftone < 0:
                    sets[col].add(col)
                else:
                    sets[col].add(leftone)
                leftone = col
    
    for col in range(len(matrix[0])):
         print(sets[col], len(sets[col]) == 1)
    
    >>>
    {0} True
    {0} True
    {2} True
    {1, 2} False
    {2} True