我有一个问题需要解决,但我想不出任何简单且更重要的方法:快速解决方案。这有点像多次旅行推销员问题的一部分。
首先,我有一个包含X
行和N
列的矩阵,N
它是我算法的静态变量,并且X
可以变化。让我们假设它看起来像(这里N = 5
):
matrix = [1 2 4 3 5; 4 3 1 2 5; 1 2 4 3 5; ]
matrix =
1 2 4 3 5
4 3 1 2 5
1 2 4 3 5
每一行都被视为一条“路线”,包含 1 到 1 之间的所有唯一数字。N
每条路线(= 行)将被分成部分路线。这意味着,我有一个包含X
行和M
( M < N
) 列的断点矩阵。例如:
breakpoints = [2 3 4; 1 2 4; 1 3 4]
breakpoints =
2 3 4
1 2 4
1 3 4
每行的索引breakpoints
给出 AFTER 对应行的元素,matrix
路线将被分成部分路线。为了清楚起见,让我们以第一行为例:breakpoints(1, :) = 2 3 4
这意味着该路线matrix(1, :) = 1 2 4 3 5
将被拆分为部分路线[1 2], [4], [3] and [5]
。第二行有断点breakpoints(2, :) = 1 2 4
,将第二条路线matrix(2, :) = 4 3 1 2 5
分成部分路线[4], [3], [1 2] and [5]
。
现在我的目标是从 中删除所有行matrix
,而部分路由是冗余重复,只是顺序不同。在此示例中,第 2 行是第 1 行的副本。第 3 行即使与第 1 行具有相同的路由也不重复,因为存在不同的断点导致部分路由[1], [2 4], [3] and [5]
。
我怎么能干净又快速地做到这一点?矩阵可以包含许多元素,例如X = 5e4
行和N = 10
, M = 6
。