Python - 在矩阵中制作相同值的链表

标签 python algorithm

给定一些矩阵,我想创建一个包含一行中所有 1 的链表,然后检查是否有任何行中的任何指针,如果它们离开某列 i , 它们指向相同的新列。例如,考虑这张图片:

enter image description here

所有离开 C3 列的指针本身都指向同一个地方。所有离开 C1 列的指针都指向同一个地方,C2 列等。但是离开 C5 的指针不指向同一列。

我可以通过遍历每一行然后保存 1 的索引来创建一个链表。但是,我不确定如何创建一种有效的方法来检查离开特定列的箭头是否都指向同一位置。我可以遍历所有的组合,但这会非常低效。我将如何进行?

出于测试目的,这里是图片中的矩阵:

矩阵 = [[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,则此矩阵满足要求。

最佳答案

制作集合列表,列表索引对应列,集合包含寻址列的索引。

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

您的案例示例(我使用列名而不是索引以避免错误):

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

关于Python - 在矩阵中制作相同值的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54342378/

相关文章:

python - 将 Keras 模型导出为 TF 估计器 : trained model cannot be found

python - Keras:使用完全相同的数据和架构,训练性能会有所不同。唯一的区别是使用 .Sequential() 或 .Model()

python - 如何为 CNN 训练准备 channel 图像?

python - 加入元组列表?

python - WSL 2 : Pycharm debugger connection time out

java - 圆图的数据结构与算法

algorithm - 计算深度图像中像素与相机平面的角度

multithreading - 检查序列是否排序的并行算法

java - 在 Java 中构建一串分隔项的最佳方法是什么?

algorithm - 使用四点相交的线段