Я ищу способ трансформировать сет, и у меня возникли проблемы.Это потому, что требования довольно строгие.
Набор A содержит набор целых чисел, детали действительно не имеют значения.
Набор B содержит набор целых чисел, например:
- Каждое значение в A напрямую отображается на одно и только одно значение в B.
- Каждый бит имеет значение true в одном и только одном значении в B.
- Сумма любых N значенийв B имеет строгое отношение к (сумме) его исходных значений в A. Это отношение может не зависеть от знания фактических значений N, о которых идет речь, хотя другие вещи, такие как знание количества суммируемых значений, хороши.
Это в основном мысленное упражнение, а не фактическая реализация, поэтому подробно описываются реалии, например, ограничений памяти, которые будут сильно увеличиваться с размером A.
Например, вы можете удовлетворитьПервые два требования, просто сказав, что B [i] = 2 ^ A [i].Но это бесполезно, потому что если вы сделали 2 ^ x = 2 ^ A [i] + 2 ^ A [j], вы не сможете сделать вывод, что сумма A [i] и A [j] равна x или некоторому другомувыражение, которое не включает A [i] или A [j].
Я склоняюсь к тому, чтобы такое преобразование было невозможным, но подумал, что на всякий случай выброшу его.
Редактировать: мне было неясно.Сожалею.Эта идея существует главным образом в моей голове.
Я уже знаю сумму значений B.Проблема в том, что я начинаю с суммы значений B и нахожу значения в B, которые суммируются, что тривиально из-за ограничения уникальных битов.Проблема в том, что сумма первоначально выражается в значениях A, поэтому я должен иметь возможность преобразовать сумму из суммы значений A в сумму значений B.Это бесполезно для меня, если мне придется преобразовывать его отдельно для каждой возможной суммы, потому что преобразование зависит от значений, которые я суммирую.
Дополнительная правка: Кроме того, мой механизм реверса из B [i] в A [я] это таблица поиска.Не нужно реально существующей математической функции.Любой A [i] уникален среди любого другого A [j].