Допустим, у меня есть два набора: (n_1, n_2, ...) и (m_1, m_2, ...) и совпадающая функция match (n, m), которая возвращает значение от 0 до 1. Я хочучтобы найти соответствие между двумя наборами так, чтобы были соблюдены следующие ограничения:
- Каждый элемент должен иметь не более 1 сопоставленного элемента в противоположном наборе.
- Несопоставленные элементы будут спареныс фиктивным элементом по цене 1
- Максимальная сумма функции соответствия применительно ко всем элементам
- У меня возникают проблемы с формальным выражением, но если вы выстроили каждый набор параллельно каждомудругие с их оригинальным порядком и проведут линию между соответствующими элементами, ни одна из линий не пересечется.Пример [n_1 <-> m_2, n_2 <-> m_3] является допустимым отображением, но [n_1 <-> m_2, n_2 <-> m_1] - нет.
(я считаю, что первые триявляются стандартными взвешенными двухсторонними сопоставлениями, но я указал их в случае, если я неправильно понял взвешенное двудольное сопоставление)
Это относительно просто сделать с исчерпывающим поиском по экспоненциальному времени (по отношению к размеру наборов),но я надеюсь, что решение за полиномиальное время (в идеале O ((| n | * | m |) ^ 3) или лучше) существует.
Я искал изрядное количество по "проблеме назначения" / "«Взвешенное двустороннее сопоставление» и видел варианты с различными ограничениями, но не нашел того, который соответствовал или который я смог уменьшить до одного с этим добавленным ограничением порядка.У вас есть идеи о том, как я могу решить это?Или, может быть, грубое доказательство того, что оно не разрешимо за полиномиальное время (для моих целей также подойдет сокращение до NP-завершения)?