Чи кожен алгоритм лінійного часу є алгоритмом потокового?


14

Над цим питанням про підрахунок інверсії я знайшов документ, який доводить нижню межу складності простору для всіх (точних) потокових алгоритмів . Я стверджував, що ця межа поширюється на всі лінійні алгоритми часу. Це трохи сміливо, як і взагалі, лінійний алгоритм часу може стрибати за бажанням (випадковий доступ), який алгоритм потокового потоку не може; він повинен досліджувати елементи в порядку. Я можу виконувати кілька проходів, але тільки постійно багато (для лінійного виконання).

Тому моє запитання:

Чи може кожен алгоритм лінійного часу виражатись як алгоритм потокового потоку з постійно численними пропусками?

Випадковий доступ, здається, перешкоджає (простої) конструкції, що підтверджує позитивну відповідь, але я не зміг придумати зустрічний приклад.

Залежно від моделі машини, випадковий доступ може навіть не бути проблемою для виконання. Мені будуть цікаві відповіді на ці моделі:

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

як ви бачите у відповідях, "алгоритми потокової передачі" часто мають на увазі крихітний (полілогічний простір). але з огляду на вашу мотивацію, на мою думку, має бути таке питання: чи може кожен лінійний алгоритм часу, який використовує слів робочої області, перетворити на алгоритм потокового передачі, що використовує простір слів . таким чином, контрприклад може бути проблемою, яку можна вирішити з простором з випадковим доступом, тоді як будь-який алгоритм потокової передачі з постійним проходом вимагає простору. жоден відповідь ще не дав такого прикладуO ( s ) o ( n ) Ω ( n )sO(s)o(n)Ω(n)
— Сашо Ніколов

@SashoNikolov: Власне, все космічне питання є дотичним. Моє запитання в основному стосується часу виконання. Якби відповідь була "так", то нижні межі (про складність простору), доведені в роботі, застосовувались би до всіх лінійних часових алгоритмів. Те, що нижня межа знаходиться на просторі, є випадковим, але не є фокусом питання як такого.
— Рафаель

Я не розумію. Тривіально зробити так, щоб алгоритм лінійного часу був "потоком в один прохід" з необмеженим простором. Ваше запитання має сенс лише в тому випадку, якщо у формі "чи може алгоритм лінійного довільного часу з довільним доступом бути постійним потоковою передачею, зберігаючи приблизно міру складності ". Тож вам слід вибрати міру складності, о / ш це не має сенсу. μ
— Сашо Ніколов

@SashoNikolov: Я не знав, що "алгоритм потокової передачі" має такі визначені проблеми. Враховуючи, що вони показують лінійний простір, нижній для алгоритмів потокової передачі, я припускав, що простір не є ядром визначення. Але я здогадуюсь, що ви могли б перекласти це прив’язане до "Не існує алгоритму потокової передачі ...". Однак, що з цим визначенням: "Алгоритм потокової передачі - це алгоритм, якому дається введення (список) одного елемента на час. Для кожного нового елемента він може виконувати обчислення в . Після постійно багатьох таких проходів , він повинен вивести відповідь через додатковий o ( n ) час. " o(n)o(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 , T 3 . Цікаво, що ви можете обчислити масив суфіксів, якщо у вас є масив суфіксів T 1 ⋅ T 2 у лінійному часі. Отже, алгоритм потребуєT0,1,2T1,T2,T3T1⋅T2

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

час. Ця рекурсія чітко вирішується на . Я не бачу, як це можна перетворити на алгоритм потокового передавання.t(n)=O(n)

Ще одним відомим прикладом є класичний алгоритм вибору лінійного часу .


Ось ще один можливий приклад. Побудова купи займає O (n) і використовує внутрішньо підпрограму на основі ділення та підкорення.
— Массімо Кафаро

але це не доказ, чи не так? ти просто кажеш, що наївне моделювання не буде працювати. але іноді бувають дивовижні алгоритми
— Сашо Ніколов

@SashoNikolov: Що я говорю, це те, що я не розглядаю алгоритм DC3 як алгоритм потокового передачі, оскільки він вимагає багато робочої пам'яті. Можливо, ви можете змінити алгоритм на потоковий алгоритм, але результатом буде не DC3. Я не обговорював, чи існує алгоритм потокової передачі для побудови суфіксного масиву. Це було б зовсім інше питання. 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)

O(1/log2⁡n)ps=Ω(n)psO(log2⁡n)


1

Навіть у найпростішому визначенні "алгоритму потокової передачі" (алгоритму, який після кожної інкрементальної ітерації на джерелі призводить до негайного знання наступної інкрементальної частини результату), я можу придумати кілька лінійних алгоритмів, які не поводитись так. Алгоритми хешування - великий; FNV-1a лінійна до кількості байтів у джерелі, але ми не знаємо жодної частини остаточного хеша, поки не буде оброблено повне джерело.

RadixSort aka BucketSort - це O (N) (технічно O (NlogM), де M - максимальне значення N елементів, що вважається малим), і повинен виконуватись у повному обсязі, щоб гарантувати, що будь-який окремий предмет знаходиться на останньому місці.

Щоб бути "потоковим" алгоритмом, найпростіше, алгоритм повинен мати такі дві властивості, жодна з яких не є чітко обмеженими часом:

  • Краще, ніж O (N) складність простору (заявляється рівнозначно, не потрібно знати все джерело і весь результат не потрібно зберігати)
  • Співвідношення O (N) вводу / виводу (алгоритм створює кількість виходів лінійно пропорційним його входам)

Тому основним класом алгоритмів, які передаються, є алгоритми, які виконують "проекції" (покрокові перетворення одного входу на X> 0 виходів).


O(log⁡n)ω(1)

logN теж добре; справа в тому, що алгоритму не потрібно одразу знати весь вхід або вихід.
— KeithS

Ω(n)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.