Проблема: У меня есть две перекрывающиеся 2D фигуры, A и B, каждая из которых имеет одинаковое количество пикселей, но отличается по форме. Некоторая часть фигур перекрывается, и есть некоторые части каждой, которые не перекрываются. Моя цель состоит в том, чтобы переместить все неперекрывающиеся пиксели в форме A в непересекающиеся пиксели в форме B. Поскольку число пикселей в каждой форме одинаково, я должен быть в состоянии найти отображение 1-в-1 пиксели. Ограничение состоит в том, что я хочу найти отображение, которое минимизирует общее расстояние, пройденное всеми перемещенными пикселями.
Грубая сила: Подход о грубой силе к решению этой проблемы, очевидно, исключен, поскольку мне пришлось бы вычислять общее расстояние всех возможных отображений, которых, как мне кажется, n! (где n - количество неперекрывающихся пикселей в одной фигуре), умноженное на вычисление для вычисления расстояния для каждой пары точек в отображении, n, что дает общее количество O (n * n!) или что-то подобное.
Backtracking: Единственное «лучшее» решение, о котором я мог подумать, это использовать backtracking, где я бы отслеживал текущий минимум до сих пор и в любой момент, когда я оцениваю определенное отображение, если я достигаю или превышаю этот минимум, я перехожу к следующему отображению. Даже это не будет лучше, чем O (n!).
Есть ли способ решить эту проблему с разумной сложностью?
Также обратите внимание, что "очевидный" подход простого сопоставления точки с ближайшим соответствующим соседом не всегда дает оптимальное решение.
Упрощенный подход?: В качестве вторичного вопроса, если выполнимого решения не существует, одной из возможностей может быть разбиение каждого непересекающегося раздела на небольшие области и сопоставление этих областей, что значительно сокращает количество отображений. Чтобы рассчитать расстояние между двумя регионами, я бы использовал центр масс (среднее положение пикселей в регионе). Тем не менее, это создает проблему, связанную с тем, как я должен выполнить разбиение, чтобы получить почти оптимальный ответ.
Любые идеи приветствуются !!