Поиск небольших наборов целых чисел, в которых каждый элемент является суммой двух других

16

Это продолжение этого вопроса на math.stackexchange.

Допустим, что непустое множество S ⊆ ℤ является самонесущим, если для каждого a  ∈ S существуют различные элементы b, c  ∈ S, такие что a  =  b  + c. Для натуральных чисел n простые примеры включают идеал S =  n ℤ или (для n > 3) целочисленный интервал [- nn ].

Мы будем говорить, что S сильно самоподдерживающийся, если S не пересекается с −S: то есть, если a  ∈ S, то - a  ∉ S. Ни один из приведенных выше примеров не является полностью самоподдерживающимся, потому что они на самом деле замкнуты под отрицанием. Существуют конечные множества, которые сильно самодостаточны: например, множества {−22, −20, −18, −16, −14, −12, −10, −2, 1, 3, 7, 8, 15 , 23} и {−10, −8, −6, −2, 1, 3, 4, 5}.

Вопрос 1. Для положительного целого числа N > 0 существует ли алгоритм poly ( N ) -time [или polylog ( N ) -time], чтобы либо (i)  создать сильно самоподдерживающийся набор, максимальное абсолютное значение которого равно N , либо (ii) )  определить, что такого набора не существует? [ Редактировать : как указано в самом старом ответе + мой комментарий к нему, такой набор всегда существует для N  ≥ 10.]

Вопрос 2. При N > 0, вы можете построить сильно самонесущий набор с максимальным абсолютным значением N , который имеет наименьшее количество возможных элементов?

Ниль де Бодрап
источник
1
перенос ответов на вопросы не является обычной практикой, и здесь вопрос выглядит хорошо. Но если ты хочешь, я перенесу это.
Каве
Я также не уверен, что имеет смысл перенести ответ на вопрос.
Суреш Венкат
Как пожелаешь, тогда. Тот факт, что этот вопрос остается здесь, беспокоил меня некоторое время, так как сайт стал зрелым форумом для вопросов и ответов по теоретическим темам. Я думал, что тон мог бы быть намного лучше подходящим для (неисследовательского уровня) cs.SE; но если вы не чувствуете существенную проблему согласованности, я перестану беспокоиться об этом.
Ниль де Бодрап,

Ответы:

6

Я полагаю, что для вопроса № 1) должен быть возможен линейный алгоритм времени (и если вы готовы иметь дело с другим представлением, алгоритмом времени O (1))

Для любого N> = 23 мы строим сильно самонесущее множество, которое содержит 1 и N.

Мы можем сделать это легко, если построим то же самое для N-1, а затем добавим N к результирующему набору.

Для базового случая 23 мы можем начать с вашего примера набора.

Чтобы уменьшить размер, мы должны использовать аналогичный подход:

Построить наборы, которые содержат 1, N and N-1.

Мы используем эти ограниченные наборы и делаем эту конструкцию рекурсивно, чтобы уменьшить размер до O (logN) следующим образом:

  • Если N четное, для построения набора, содержащего 1, N и N-1, рекурсивно построить набор, содержащий 1, N / 2 и N / 2-1 (т. Е. Набор, соответствующий N / 2), и добавить N и N-1 в результирующий набор. Поскольку N-1 = N / 2 + N / 2-1 и N = 1 + N-1, это допустимый набор.

  • Если N нечетно, построить набор для N-1 и N для результирующего набора.

Для базовых случаев мы можем начать с {−22, −20, −18, −16, −14, −12, −10, −10, −2, 1, 3, 7, 8, 15, 23,24} для N = 24. Для 24 <N <= 47 мы можем использовать описанный выше алгоритм линейного времени и строить на основе набора для N = 24. Для N> = 48 мы переключаемся на уменьшение наполовину.

Фактически, для составного N мы можем уменьшить размер до размера, необходимого для одного из небольших простых чисел, которое делит N: найти множество для малого простого числа и просто умножить все числа на подходящий коэффициент.

Может быть интересно доказать некоторые нижние оценки в случае, когда N простое.

Арьябхата
источник
+1. Полагаю, мне подходит для постановки вопроса, где слишком много свободного места. Вы можете сделать то же самое для N> 10, конечно. Что оставляет нас с вопросом о создании множеств, которые меньше этого (возможно, минимального размера, как в # 2).
Ниль де Бодрап,
Для вашего исправленного ответа, чтобы уменьшить размер: я не следую. Я понял, что вы хотите, чтобы N «поддерживали» (выражалось в виде суммы различных элементов) как 1 + (N-1). Но как вы «поддерживаете» N-1, тогда? --- Также: меня больше интересует размер, то есть мощность самого набора, хотя интересные границы его представления также могут быть интересны.
Ниль де Бодрап,
@Niel: Я собирался комментировать: см. Мое редактирование :-)
Aryabhata
Рассмотрим случай N = 46. Тогда N / 2 = 23; мы берем пример, приведенный в вопросе, как самоокупаемый набор, и включаем N-1 = 45 и N = 46. Как тогда мы «поддерживаем» N-1 = 45?
Ниль де Бодрап,
2
(Вы можете подумать о смене своего псевдонима. Почему бы не объявить, кто вы на самом деле? Это также позволяет мне обращаться к вам, не выглядя так, будто я оскорбляю кого-то, если вы в конечном итоге решите сменить псевдоним позже.)
Ниль де Бодрап
5

Для N ≥ 10 можно построить сильно самонесущий набор размером не более одиннадцати, как показано ниже:

{-N, -N + 2, -N + 4, -2, 1, 3, 4, 5, N-7, N-6, N-5}.

Более короткий пример, представленный в исходном вопросе, соответствует случаю N = 10. Это близко к тому, чтобы быть оптимальным, поскольку любой сильно самоподдерживающийся набор должен иметь количество элементов не менее восьми .

Таким образом, проблема разрешима за время O (log (N)) [занятое в мирских арифметических операциях над N], что дает набор мощностей от восьми до одиннадцати.

Конструкция для этого ответа была впервые представлена ​​для вопроса math.stackoverflow , который также дает интуицию для построения. Можем ли мы получить еще меньшие конструкции, например, сопоставляя нижнюю границу из восьми для каждого N> 9? Как насчет случаев N ∈ {8,9}?

Ниль де Бодрап
источник