我有一个问题需要解决,但我想不出任何简单和更重要的问题:快速解决方案。这有点像多旅行商问题的一部分。Matlab:删除矩阵中多余的“移位”条目
首先我有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和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
各行得到的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行具有相同的路由,第3行也不会重复,因为存在导致部分路由[1], [2 4], [3] and [5]
的不同断点。
我该如何干净而快速地做到这一点?矩阵可以包含许多元素,如X = 5e4
行和N = 10
,M = 6
。
噢,这听起来不错,没有想到这种类型的算法。嗯,但可能它有点太费时。我不需要太糟糕,我只是认为缩小矩阵大小可能会对我的进一步计算带来一点好处。但是由于减少重复条目已经花费了很多时间,所以最终可能不会受益。非常感谢! – tim