Jump to content

3СУММ

Нерешенная задача в информатике :
Существует ли алгоритм, позволяющий вовремя решить задачу 3SUM? , для некоторых ?

В теории сложности вычислений задача 3SUM спрашивает, является ли данный набор действительные числа содержат три элемента, сумма которых равна нулю. Обобщенная версия k -SUM задает тот же вопрос для k элементов, а не просто для 3. 3SUM можно легко решить в время и соответствие нижние границы известны в некоторых специализированных моделях вычислений ( Erickson 1999 ).

Было высказано предположение, что любой детерминированный алгоритм 3SUM требует время. В 2014 году первоначальная гипотеза 3SUM была опровергнута Алланом Грёнлундом и Сетом Петти, которые предложили детерминированный алгоритм, решающий 3SUM в время. [1] Кроме того, Грёнлунд и Петти показали, что сложность 4- линейного дерева решений 3SUM равна . Впоследствии эти границы были улучшены. [2] [3] [4] Самый известный на данный момент алгоритм 3SUM работает время. [4] Кейн, Ловетт и Моран показали, что сложность 6- линейного дерева решений 3SUM равна . [5] Последняя граница является точной (с точностью до логарифмического множителя). До сих пор предполагается, что 3SUM неразрешима в ожидаемое время. [6]

Когда элементы являются целыми числами в диапазоне , 3SUM можно решить в время, представляя входной набор как битовый вектор , вычисляя набор всех парных сумм в виде дискретной свертки с использованием быстрого преобразования Фурье и, наконец, сравнения этого набора с . [7]

Квадратичный алгоритм

[ редактировать ]

Предположим, что входной массив . В целочисленных ( словных ОЗУ ) моделях вычислений 3SUM можно решить в среднее время, вставляя каждое число в хеш-таблицу , а затем для каждого индекса и , проверяя, содержит ли хэш-таблица целое число .

Также возможно одновременно решить задачу в сравнения модели вычислений на основе или в реальной оперативной памяти , для которой хеширование не допускается. Приведенный ниже алгоритм сначала сортирует входной массив, а затем проверяет все возможные пары в тщательном порядке, что позволяет избежать необходимости бинарного поиска пар в отсортированном списке, достигая худшего случая. время следующим образом. [8]

sort(S);
for i = 0 to n - 2 do
    a = S[i];
    start = i + 1;
    end = n - 1;
    while (start < end) do
        b = S[start]
        c = S[end];
        if (a + b + c == 0) then
            output a, b, c;
            // Continue search for all triplet combinations summing to zero.
            // We need to update both end and start together since the array values are distinct.
            start = start + 1;
            end = end - 1;
        else if (a + b + c > 0) then
            end = end - 1;
        else
            start = start + 1;
    end
end

В следующем примере показано выполнение этого алгоритма на небольшом отсортированном массиве. Текущие значения a показаны красным, значения b и c — пурпурным.

 -25 -10 -7 -3 2 4 8 10  (a+b+c==-25)
 -25 -10 -7 -3 2 4 8 10  (a+b+c==-22)
 . . .
 -25 -10 -7 -3 2 4 8 10  (a+b+c==-7)
 -25 -10 -7 -3 2 4 8 10  (a+b+c==-7)
 -25 -10 -7 -3 2 4 8 10  (a+b+c==-3)
 -25 -10 -7 -3 2 4 8 10  (a+b+c==2)
 -25 -10 -7 -3 2 4 8 10  (a+b+c==0)

В корректности алгоритма можно убедиться следующим образом. Предположим, у нас есть решение a + b + c = 0. Поскольку указатели движутся только в одном направлении, мы можем запускать алгоритм до тех пор, пока самый левый указатель не укажет на a. Запускайте алгоритм до тех пор, пока один из оставшихся указателей не укажет на b или c, в зависимости от того, что произойдет раньше. Затем алгоритм будет работать до тех пор, пока последний указатель не укажет на оставшийся член, что даст положительное решение.

Варианты

[ редактировать ]

я ненулевой

[ редактировать ]

можно искать числа, сумма которых равна любой константе C. Вместо поиска чисел, сумма которых равна 0 , Самый простой способ — изменить исходный алгоритм для поиска целого числа в хеш-таблице .

Другой метод:

  • Вычтите C /3 из всех элементов входного массива.
  • В измененном массиве найдите 3 элемента, сумма которых равна 0.

Например, если A=[1,2,3,4] и вас просят найти 3SUM для C =4, то вычтите 4/3 из всех элементов A и решите ее обычным способом 3SUM, т.е. , .

Три разных массива

[ редактировать ]

Вместо поиска трех чисел в одном массиве мы можем искать их в трех разных массивах. То есть по трем массивам X, Y и Z найдите три числа a X , b Y , c Z такие, что . Назовите вариант с 1 массивом 3SUM×1 и вариант с 3 массивами 3SUM×3.

Учитывая решатель для 3SUM×1, задачу 3SUM×3 можно решить следующим образом (при условии, что все элементы являются целыми числами):

  • Для каждого элемента в X , Y и Z установите: , , .
  • Пусть S объединением массивов X , Y и Z. будет
  • Используйте оракул 3SUM×1, чтобы найти три элемента такой, что .
  • Возврат .

как мы преобразовали массивы, гарантируется, что a X , b Y , c Z. Тем самым , [9]

Сумма свертки

[ редактировать ]

Вместо поиска произвольных элементов массива, таких как:

задача свертки 3-х сумм (Conv3SUM) ищет элементы в определенных местах: [10]

Сокращение с Conv3SUM до 3SUM

[ редактировать ]

Имея решатель для 3SUM, задачу Conv3SUM можно решить следующим образом. [10]

  • Определите новый массив T так, чтобы для каждого индекса i : (где n — количество элементов массива, а индексы — от 0 до n -1).
  • Решите 3SUM на массиве T .

Доказательство правильности:

  • Если в исходном массиве есть тройка с , затем , поэтому это решение будет найдено функцией 3SUM на T .
  • И наоборот, если в новом массиве имеется тройка с , затем . Потому что , обязательно и , так что это допустимое решение для Conv3SUM на S .

Сокращение с 3SUM до Conv3SUM

[ редактировать ]

Учитывая решатель Conv3SUM, задачу 3SUM можно решить следующим образом. [6] [10]

При сокращении используется хэш-функция . В первом приближении предположим, что у нас есть линейная хэш-функция, то есть функция h такая, что:

Предположим, что все элементы являются целыми числами в диапазоне: 0... N -1 и что функция h сопоставляет каждый элемент с элементом в меньшем диапазоне индексов: 0... n -1. Создайте новый массив T и отправьте каждому элементу S его хеш-значение в T , то есть для каждого x в S ( ):

Сначала предположим, что отображения уникальны (т.е. каждая ячейка в T принимает только один элемент из S ). Решите Conv3SUM на T . Сейчас:

  • Если есть решение для 3SUM: , затем: и , поэтому это решение будет найдено решателем Conv3SUM на T .
  • И наоборот, если Conv3SUM найден на T , то, очевидно, оно соответствует решению 3SUM на S, T это просто перестановка S. поскольку

Это идеализированное решение не работает, поскольку любая хэш-функция может сопоставить несколько различных элементов S ячейкой T. с одной и той же Хитрость заключается в том, чтобы создать массив выбрав один случайный элемент из каждой ячейки T и запустив Conv3SUM на . это правильное решение для 3SUM на S. Если решение найдено, то Если решение не найдено, создайте другой случайный и повторите попытку. содержится не более R Предположим, что в каждой ячейке T элементов . Тогда вероятность найти решение (если решение существует) — это вероятность того, что случайный выбор выберет правильный элемент из каждой ячейки, то есть . Запустив Conv3SUM раз решение будет найдено с большой вероятностью.

К сожалению, у нас нет линейного идеального хеширования, поэтому нам приходится использовать почти линейную хэш-функцию , то есть функцию h такую, что:

или

Для этого необходимо дублировать элементы S при копировании их в T , т. е. помещать каждый элемент оба в (как и раньше) и в . Таким образом, в каждой ячейке будет 2 элемента R , и нам придется запустить Conv3SUM. раз.

3SUM-твердость

[ редактировать ]

Задача называется 3SUM-трудной , если ее решение за субквадратичное время субквадратичного времени предполагает использование алгоритма для 3SUM. Понятие твердости 3SUM было введено Гаджентааном и Овермарсом (1995) . Они доказали, что большой класс задач вычислительной геометрии является 3SUM-сложным, включая следующие. (Авторы признают, что многие из этих проблем созданы другими исследователями.)

  • Учитывая набор прямых на плоскости, есть ли три, которые пересекаются в одной точке?
  • Учитывая набор непересекающихся отрезков, параллельных осям, существует ли линия, которая разделяет их на два непустых подмножества?
  • Учитывая набор бесконечных полос на плоскости, полностью ли они покрывают данный прямоугольник?
  • Учитывая набор треугольников на плоскости, вычислите их меру.
  • Если задан набор треугольников на плоскости, есть ли в их объединении дырка?
  • Ряд проблем с обзорностью и планированием движения, например:
    • Можно ли увидеть в пространстве набор горизонтальных треугольников из определенной точки?
    • Учитывая набор непересекающихся препятствий в виде отрезков прямых, параллельных осям, может ли данный стержень перемещаться путем поступательного перемещения и вращения между начальным и конечным положениями, не сталкиваясь с препятствиями?

К настоящему времени существует множество других проблем, подпадающих под эту категорию. Примером является решающая версия сортировки X + Y : для заданных наборов чисел X и Y, состоящих из n элементов каждый, существует ли n ² различных x + y для x X , y Y ? [11]

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Грёнлунд и Петти, 2014 .
  2. ^ Друг 2017 .
  3. ^ Золото и Шарир 2017 .
  4. ^ Jump up to: а б Чан 2018 .
  5. ^ Кейн, Ловетт и Моран 2018 .
  6. ^ Jump up to: а б Копеловиц, Цви; Петти, Сет; Порат, Эли (2014). «Твердость 3SUM в (динамических) структурах данных». arXiv : 1407.6756 [ cs.DS ].
  7. ^ Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Стоун, Клиффорд (2009) [1990]. Введение в алгоритмы (3-е изд.). MIT Press и McGraw-Hill. ISBN  0-262-03384-4 . Бывший. 30.1–7, с. 906
  8. ^ Графики видимости и 3-сумма Майкла Хоффмана
  9. ^ О сокращении в другом направлении см. Варианты задачи 3-х сумм .
  10. ^ Jump up to: а б с Патраску, М. (2010). К полиномиальным нижним оценкам для динамических задач . Материалы 42-го симпозиума ACM по теории вычислений - STOC '10. п. 603. дои : 10.1145/1806689.1806772 . ISBN  9781450300506 .
  11. ^ Демейн, Эрик ; Эриксон, Джефф; О'Рурк, Джозеф (20 августа 2006 г.). «Задача 41: Сортировка X + Y (парные суммы)» . Проект «Открытые проблемы» . Проверено 23 сентября 2014 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5ad1b56363f6327747f53d0d0b17250f__1722181620
URL1:https://arc.ask3.ru/arc/aa/5a/0f/5ad1b56363f6327747f53d0d0b17250f.html
Заголовок, (Title) документа по адресу, URL1:
3SUM - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)