У меня есть проблема, которую мне нужно решить, но я не могу придумать ничего более простого и быстрого: быстрое решение. Это немного похоже на проблему с несколькими коммивояжерами.
Сначала у меня есть матрица с 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
) столбцов. E.g.:
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, поскольку существуют разные точки останова, которые ведут к частичным маршрутам [1], [2 4], [3] and [5]
.
Как я мог сделать это чисто и быстро? Матрица может содержать много элементов, таких как X = 5e4
строки и N = 10
, M = 6
.