Учитывая два списка чисел и список сумм (ни в определенном порядке):Поиск множества пар, которые соответствуют списку сумм
a = [1,2,3]
b = [4,5,6]
c = [6,7,8]
Как я могу найти все наборы пара d
где d[k] = (a[i], b[j])
таких что c[k] = a[i] + b[j]
, где пары используются из a и b без замены? (Все списки могут иметь дубликаты)
d = [(1,5), (3,4), (2,6)]
d = [(2,4), (1,6), (3,5)]
Для c = [7,7,7]
:
d = [(1,6), (2,5), (3,4)]
(1 ответ, потому что все перестановки по существу эквивалентны)
Я хотел бы сделать это с помощью списков длиной ~ 500, поэтому поиск по наивному совпадению/обратному поиску не может быть и речи.
Вы хотите набор парных последовательностей, где каждая последовательность в наборе имеет итоговые значения, соответствующие последовательности c? Кроме того, в первом примере были бы также включены [(1,5), (1,6), (2,6)] - и многие другие такие? –
Без замены. Проблема, которую я пытаюсь решить, состоит в том, что каждый список содержит десятки студентов.У меня есть доступ к каждому списку и суммам обоих, но хотелось бы знать, учитывая общий балл, каковы возможные подтексты. Если это затрудняет решение проблемы (или увеличивает вероятность уникального решения), у меня есть доступ к N этих списков и вы можете запросить базу данных для списка итогов для любого их подмножества. – georgeyiu
Эта проблема описана в Википедии как [Численное трехмерное сопоставление] (http://en.wikipedia.org/wiki/Numerical_3-dimensional_matching). Он NP-полный. –