Это продолжение моего вопроса здесь: https://math.stackexchange.com/questions/3278359/figuring-out-the-underlying-construction-of-a-final-set
Чтобы повторно опубликовать вопрос более CS-способом, как бы вы нашли A
, если бы только дали B
?
$ A = [ 1, 5, 10 ]
$ B = f(A)
$ B == [ 1, 5, 6, 10, 11, 15, 16 ]
(true)
$ B == { 1, 5, 10, 5+1, 10+1, 10+5, 10+5+1 }
(true)
$ solve(B)
[ 1, 5, 10 ]
f()
находит набор уникальных значений из всех непустых комбинаций.
Поскольку A
всегда является подмножеством B
, я предполагаю, что может быть грубая силаметод, в котором вы пытаетесь каждую комбинацию элементов в B
(это не все элементы B
,), пока вы не решите для всего набора.Но это было бы крайне неэффективно.(Я представляю что-то вроде факториала порядка N ...) Поскольку существует несколько решений, вам нужно либо вычислить весь набор, либо остановиться после определенного порога.
После некоторого обсуждения в комментарияхЯ считаю, что это проблема удовлетворения ограничений.Как это будет структурировано?(Псевдокод в порядке.)
Для мега бонусных очков: как это можно решить, если предположить, что A не подмножество B?
Например:
$ B = [15, 16, 15.5, .5, 10.5]
$ solve(B)
[.5, 1, 5, 10]
Другой способ сформулировать этот вопрос: как будет выглядеть алгоритм сжатия без потерь, который находит наименьший набор базовых значений?(Отображение между базовыми значениями и выходными данными можно игнорировать.)