Say S - это массив подмножеств, а A - исходный массив.Я предполагаю, что S отсортировано.
|A| = log2(|S|)
S[0] = 0
S[1] = A[0]
S[2] = A[1]
S[3] = EITHER A[2] OR A[0] + A[1].
В общем, S [i] для i> = 3 - это либо элемент A, либо комбинация элементов A, с которыми вы уже сталкивались.При обработке S пропустите один раз для комбинации известных элементов A, которые генерируют данное число, добавьте все оставшиеся числа к A. Остановитесь, когда A достигнет нужного размера.
Например, если A = [1,2, 7,8,9], тогда S будет включать [1,2,1 + 2 = 3, ..., 1 + 8 = 9, 2 + 7 = 9,9, ...].При обработке S мы пропускаем две 9 из-за 1 + 8 и 2 + 7, затем видим третий 9, который, как мы знаем, должен принадлежать A.
Например, если S = [0,1,1,2, 8,9,9,10] тогда мы знаем, что у A есть 3 элемента, что первые 2 элемента A равны [1,1], когда мы добираемся до 2, мы пропускаем его, потому что 1 + 1 = 2, мы добавляем 8 имы закончили, потому что у нас есть 3 элемента.