Идея
Рассмотрим следующую матрицу:
8 4 3
6 8 1
Возьмем строку № 1 и строку № 2 и создадим вектор. Так как мы хотим также знать, какой элемент принадлежит какой строке, упакуйте эти элементы с их номером строки.
two_rows = [(8,1), (4,1), (3,1) (6,2), (8,2), (1,2)]
Это означает, что у нас есть 8, 4, 3 из строки № 1 и 6, 8, 1 из ряда № 2. Теперь отсортируйте этот список (по первому значению кортежей)
sorted_two_rows = [(1,2), (3,1), (4,1), (6,2), (8,1), (8,2)]
Далее, просмотрите этот список. Учитывайте только соседние кортежи из разных рядов
(1,2)
и (3,1)
(4,1)
и (6,2)
(6,2)
и (8,1)
(8,1)
и (8,2)
Все остальное просто, просто вычислите абсолютные различия и запишите минимум.
Если вы повторите это для всех соседних строк. Вы должны найти общую минимальную разницу. Это займет O(nm log m)
.