我有一个矩阵排序问题,其中每行至少包含两个数字,其余列是
None
。我需要对这个矩阵进行排序:
None
值。有效组合:
[1, 2, None, None]
和 [None, 2, 3, None]
可以合并为 [1, 2, 3, None]
,因为它们共享第二列中的值 2
并且没有冲突的值。无效组合:
[1, 2, None, None]
和 [None, None, 3, 4]
无法组合,因为它们在任何列中都不共享公共数字。[1, 2, None, None]
和 [2, 2, None, None]
。在此过程结束时,矩阵应排序为:
False
。考虑以下矩阵:
matrix = [
[1, 2, None, None],
[None, None, 3, 4],
[3, 5, None, None]
]
现在,我想插入一个新行:
new_row = [None, 1, 6, None]
我当前的方法检查新行中数字的允许范围。它检测到:
1
只能放在第一行上方。
6
只能放在第二行或第三行之后。
由于 1 和 6 的允许范围没有重叠,因此算法得出结论:不可能插入新行。然而,我们可以看到,通过重新排列矩阵:
[
[None, None, 3, 4],
[1, 2, None, None],
[3, 5, None, None]
]
在我当前的方法中,我假设我们得到一个排序矩阵和一个需要插入的新行,同时保持以下规则:
该方法的工作原理如下:
检查新行中的数字是否出现在各自的列中:
处理之前没有数字出现的情况:
如果没有找到有效位置则返回 false:
False
。我认为尝试将其视为一个矩阵不会做出任何贡献,而是将其视为项目的集合,每个项目都有一个数字列表。
该算法分为 3 个连续的步骤
算法结束后,如果需要,您可以再次构建矩阵。