Является ли каждый алгоритм линейного времени алгоритмом потоковой передачи?


14

В этом вопросе о подсчете инверсий я нашел статью, в которой доказывается нижняя оценка сложности пространства для всех (точных) потоковых алгоритмов . Я утверждал, что эта граница распространяется на все линейные алгоритмы времени. Это немного жирным шрифтом, так как в целом, алгоритм линейного времени может перемещаться по желанию (произвольный доступ), что алгоритм потоковой передачи не может; он должен исследовать элементы по порядку. Я могу выполнить несколько проходов, но только постоянно много (для линейного времени выполнения).

Поэтому мой вопрос:

Может ли каждый алгоритм линейного времени быть выражен как алгоритм потоковой передачи с постоянно большим количеством проходов?

Случайный доступ, кажется, препятствует (простой) конструкции, доказывающей положительный ответ, но я также не смог придумать контрпример.

В зависимости от модели машины, произвольный доступ может даже не быть проблемой с точки зрения времени выполнения. Мне были бы интересны ответы на эти модели:

  • Машина Тьюринга, плоский ввод
  • RAM, ввод в виде массива
  • RAM, вход в виде связанного списка

как вы видите в ответах, «алгоритмы потоковой передачи» часто подразумевают крошечное (пространство полилога). но, учитывая вашу мотивацию, я думаю, что должен быть вопрос: можно ли преобразовать каждый линейный алгоритм времени, который использует слова из рабочего пространства, в алгоритм потоковой передачи, который использует пространство слов O ( s ) . таким образом, контрпример мог бы быть проблемой, которая может быть решена с помощью пространства o ( n ) с произвольным доступом, в то время как любой алгоритм потоковой передачи с постоянным проходом требует пространства Ω ( n ) . ответ пока не дал такого примераsО(s)о(N)Ω(N)
— Сашо Николов

@SashoNikolov: На самом деле, весь космический вопрос является касательным. Мой вопрос в основном о времени выполнения. Если бы ответ был «да», то нижние оценки (по сложности пространства), доказанные в статье, будут применяться ко всем алгоритмам с линейным временем. То, что нижняя граница находится в пространстве, является случайным, но не является предметом вопроса как таковым.
— Рафаэль

Не понимаю. Тривиально сделать линейный алгоритм времени «потоковым за один проход» с неограниченным пространством. Ваш вопрос имеет смысл только в том случае, если в форме «можно ли сделать алгоритм произвольного доступа с линейным временем постоянным проходом при приближенном сохранении показателя сложности ». Таким образом, вы должны выбрать меру сложности, о, это не имеет смысла. μ
— Сашо Николов

@SashoNikolov: я не знал, что у «алгоритма потоковой передачи» были такие проблемы с определением. Учитывая, что они показывают нижнюю границу линейного пространства для потоковых алгоритмов, я предположил, что пространство не является ядром определения. Но я думаю, вы могли бы перевести эту границу на «Нет алгоритма потоковой передачи ...». Тем не менее, как насчет этого определения: «Алгоритм потоковой передачи - это алгоритм, которому дается вход (список) по одному элементу за раз. Для каждого нового элемента он может выполнять вычисления в . После постоянного множества таких проходов , он должен вывести ответ через дополнительное время o ( n ) . " о(N)о(N)
— Рафаэль

@SashoNikolov: Это исключило бы алгоритмы «копировать входные данные и делать что-либо» из понятия, но ограничить его временем . Это соответствует обычно обозначаемому классу? Если нет, я не думаю, что «потоковое» может быть определено с течением времени или пространственных сложностей в полезных. Это скорее стратегия, очень похожая на Жадность или разделяй и властвуй. o(n2)
— Рафаэль

Ответы:


15

Чтобы потоковые алгоритмы имели смысл, они должны работать со значительно меньшим объемом рабочего пространства, чем сам ввод. Например, если вы разрешите тот же объем рабочего пространства, что и для ввода, вы можете тривиально сформулировать любой алгоритм как «алгоритм потоковой передачи за один проход», который сначала копирует входные данные в рабочее пространство за один проход, а затем использует только работу. Космос.

Я думаю, что типично ограничивать рабочее пространство до максимально полилогарифмического размера ввода, когда речь идет об потоковых алгоритмах. При этом допущении медианный отбор не имеет алгоритма потоковой передачи O (1) в результате Манро и Патерсона [MP80]: любой алгоритм потоковой передачи P- прохода для медианного выбора на N элементах должен хранить Ω ( N 1 / P) ) элементы. С другой стороны, медианный отбор имеет хорошо известный детерминистический алгоритм линейного времени [BFPRT73].

[BFPRT73] Мануэль Блюм, Роберт У. Флойд, Вон Пратт, Рональд Л. Ривест и Роберт Э. Тарьян. Границы времени для выбора. Журнал компьютерных и системных наук , 7 (4): 448–461, август 1973. DOI: 10.1016 / S0022-0000 (73) 80033-9

[MP80] Дж. Ян Мунро и Майк С. Патерсон. Выбор и сортировка с ограниченным хранением. Теоретическая информатика , 12 (3): 315–323, ноябрь 1980 г. DOI: 10.1016 / 0304-3975 (80) 90061-4


6

В потоковой модели вам разрешено хранить только постоянные или полулогарифмические дополнительные данные при сканировании через входные данные. Если вы рассматриваете алгоритм линейного времени,
который следует парадигме « разделяй и властвуй» , вам нужно хранить больше информации и / или вы должны сканировать свои данные столько раз, сколько глубина рекурсии.

Одним из примеров является алгоритм DC3 для построения суффиксного массива текста (заданного как массив в модели RAM). Чтобы создать массив суффиксов, вы группируете символы в триплеты, поэтому вы получаете текст с новыми суперсимволами . Вы можете сделать это со смещением 0 , 1 , 2 , что приводит к трем новым текстам T 1 , T 2 ,T0,1,2 . Интересно, что вы можете вычислить массив суффиксов, если у вас есть массив суффиксов T 1 ⋅ T 2 за линейное время. Следовательно, алгоритм нуждаетсяT1,T2,T3T1⋅T2

t(n)=t(2/3n)+O(n)

время. Эта рекурсия решает четкоt(n)=O(n) . Я не понимаю, как это можно превратить в алгоритм потоковой передачи.

Другой хорошо известный пример - классический алгоритм выбора линейного времени .


Вот еще один возможный пример. Для построения кучи требуется O (n) и внутренне используется подпрограмма heapify () на основе «разделяй и властвуй».
— Массимо Кафаро

но это не доказательство, не так ли? Вы просто говорите, что наивный симулятор не сработает. но иногда встречаются удивительные алгоритмы
— Сашо Николов

O(n)

«Я не понимаю, как это можно превратить в алгоритм потоковой передачи», заставил меня поверить, что вы что-то говорите, кроме «этот алгоритм не выполняет потоковую передачу без изменений»
— Сашо Николов

4

Я интерпретирую ваш вопрос следующим образом. Давайте исправим некоторые вычислительные проблемыP

  • R(P)P
  • S(P)P

R(P)S(P) может быть .

n[1,n−1]O(log⁡n)O(1)ω(log⁡n)

О(1/журнал2⁡N), Затем Chakrabarti et al. показать, что если мы ограничим все проходы в одном направлении, мы имеемпsзнак равноΩ(N), где п это количество проходов и sэто космическая сложность. С другой стороны, Magniez et al. дать простой алгоритм, который используетО(журнал2⁡N) пространство, имеет полиномиально малую вероятность ложного срабатывания, и делает один проход вперед и один назад.


1

Даже в простейшем определении «алгоритма потоковой передачи» (алгоритм, который после каждой инкрементальной итерации источника приводит к немедленному знанию следующей инкрементальной части результата), я могу представить несколько линейных алгоритмов, которые не вести себя так. Алгоритмы хеширования являются большими; FNV-1a является линейным по отношению к количеству байтов в источнике, но мы не знаем какой-либо части окончательного хэша, пока не будет обработан полный источник.

RadixSort, иначе BucketSort - это O (N) (технически O (NlogM), где M - максимальное значение в N элементах, которое считается небольшим), и должно выполняться полностью, чтобы гарантировать, что любой отдельный элемент находится на своем последнем месте.

Чтобы быть «потоковым» алгоритмом, в самом простом случае алгоритм должен иметь следующие два свойства, ни одно из которых явно не ограничено по времени:

  • Лучше, чем O (N) сложность пространства (указано эквивалентно, весь источник не должен быть известен, и весь результат не должен быть сохранен)
  • Отношение O (N) I / O (алгоритм выдает количество выходов, линейно пропорциональных его входам)

Таким образом, основной класс алгоритмов этого потока - это алгоритмы, которые выполняют «проекции» (инкрементные преобразования одного входа в X> 0 выходов).


Почему бы О(журнал⁡N)использование пространства не будет в порядке? Статьи, связанные в другом вопросе, играют с множеством потоковых алгоритмов, которые используютω(1)Космос.
— Рафаэль

logN тоже хорошо; Дело в том, что алгоритм не должен знать сразу все входные или выходные данные.
— KeithS

Ω(N)Требование к пространству не означает, что ему нужен весь ввод данных (т.е. это не алгоритм потоковой передачи). Но я понимаю вашу точку зрения.
— Рафаэль
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.