Восстановление массива

Недавно я столкнулся с этим вопросом в конкурсе найма:

Дан массив S из 2^N целых чисел (1 ‹= N ‹= 20, 0 ‹= Si ‹= 10^9), представляющий суммы подмножеств массива A, нам нужно восстановить массив A в отсортированном порядке.

например S = {2, 1, 0, 3} => A = {1, 2}, поскольку суммы подмножеств A равны {0, 1, 2, 1+2}

Порядок чисел в массиве S может быть случайным.

Как я могу подойти к этой проблеме? Заранее спасибо.


person Pratik Kale    schedule 10.11.2019    source источник
comment
Любое ограничение на значения в A ? Может ли 0 быть частью массива. Каков диапазон значений для A ?   -  person Ravi Chandak    schedule 10.11.2019
comment
Вообще нет, но было 0 ‹= Si ‹= 10^9   -  person Pratik Kale    schedule 10.11.2019


Ответы (1)


Вы можете отсортировать массив, содержащий суммы подмножества. Когда вы сортируете массив сумм подмножества, Ai = S[2^i] -- должен дать вам значения массива A в отсортированный порядок.

Вы можете составить таблицу истинности, чтобы получить сумму подмножества и проследить обратно Предполагая, что S является допустимым вводом, например: S = {0, 5, 3, 8, 1, 6, 4, 9}

Sorted S = {0, 1, 3, 4, 5, 6, 8, 9} 
A = [A0, A1, A2] --- 

A0,A1,A2 -- (Binary, part of subset = 1 not part = 0 )

Index |  A0,A1,A2  | Sorted Sum  
0        0 0 0        0
1        1 0 0        1
2        0 1 0        3 
3        1 1 0        4 
4        0 0 1        5
5        1 0 1        6
6        0 1 1        8
7        1 1 1        9

From her we can reverse and find that A0 = S[2^0], A1 = S[2^1], A2 = S[2^2]
person Ravi Chandak    schedule 10.11.2019
comment
Я пробовал, но не получается, когда A = {1,2,4} - person Pratik Kale; 10.11.2019
comment
Отсортировано S для A = {1,2,4} Отсортировано S = {0, 1, 2, 3, 4, 5, 6, 7} - таким образом, A0 = 1, A1 = 2, A2 = 4? - person Ravi Chandak; 10.11.2019
comment
Извините, а что, если A = {1,1,1} - person Pratik Kale; 10.11.2019