Детермінований лінійний алгоритм часу, щоб перевірити, чи є один масив відсортованою версією іншого


19

Розглянемо наступну проблему:

Вхідні дані: два масиви і довжиною , де у відсортованому порядку.ABnB

Запит: чи містять і однакові елементи (за їх кратністю)?AB

Який найшвидший детермінований алгоритм цієї проблеми?
Чи можна це вирішити швидше, ніж їх сортування? Чи можна цю проблему вирішити в детермінований лінійний час?


1
FWIW ймовірнісний підхід є хешуванняванням хеш-функції, що не залежить від порядку. Картер і Вегман написали одну з оригінальних статей про це ( sciencedirect.com/science/article/pii/0022000081900337 ), але я в цитатах цього документу нічого не бачив, що передбачає детермінований алгоритм (поки що).
KWillets

1
Цитата, яку ви цитуєте, стосується моделі машини Тьюрінга, яка представляє лише теоретичний інтерес. Алгоритми зазвичай аналізуються щодо моделі оперативної пам'яті.
Yuval Filmus

ах, то це модель, яку я шукаю. Я коригував питання.
Альберт Гендрікс

Чому ви просто не підсумовуєте елементи в масиві і не порівнюєте підсумки? Що стосується вашої назви, вона лінійна і відповідає на запитання "чи є один масив відсортованої версії іншого? '. Я усвідомлюю, що це не модель машини Тюрінга, а практичне рішення.
atayenel

1
@AlbertHendriks Ви (швидше за все) не можете сортувати масив у на машині Тьюрінга. Деякі нижні межі SAT (наприклад, cs.cmu.edu/~ryanw/automated-lbs.pdf ) насправді стосуються машини оперативної пам'яті, вибачте за оманливий раніше коментар. O(nlogn)
Yuval Filmus

Відповіді:


14

Ви не вказали модель обчислення, тому я припускаю модель порівняння.

Розглянемо особливий випадок, коли масив взято зі списку Словом, й елемент є або або .{ 1 , 2 } × { 3 , 4 } × × { 2 n - 1 , 2 n } . i 2 i - 1 2 iB

{1,2}×{3,4}××{2n1,2n}.
i2i12i

Я стверджую , що якщо алгоритм робить висновок , що і містять ті ж самі елементи, що алгоритм порівняв кожен елемент з його аналогом в . Дійсно, припустимо , що алгоритм робить висновок , що і містять одні і ті ж елементи, але ніколи не порівнює перший елемент його аналога в . Якщо ми переключимо перший елемент, алгоритм діяв би точно так само, хоча відповідь відрізняється. Це показує , що алгоритм повинен порівняти перший елемент (і будь-який інший елемент) до його аналогу в .Б В Б ВABBAABBAА

Це означає , що якщо і містять ті ж самі елементи, то після перевірки цього алгоритм знає відсортоване порядок . Значить, воно повинно мати принаймнірізні листя, і тому потрібен час .Б А н ! Ω ( n журналу n )АБАн!Ω(нжурналн)


Я б подумав, що це означає, що взагалі, але, мабуть, модель порівняння відрізняється від цієї. P=Ω(nlogn)
Альберт Хендрікс

@AlbertHendriks, це та сама модель, яка використовується для показу n lg n нижньої межі для сортування. Це означає, що це єдина операція, яку ви можете виконати, це порівняння, тоді ви не можете зробити краще. Я думаю, це відповідає на ваше запитання.
Каве

[Cntd] У нас немає більш міцних меж навіть для сортування! і якщо ви можете сортувати швидше, ніж n lg n, то ви можете використовувати це для вирішення проблеми швидше, ніж n lg n.
Каве

1
@AlbertHendriks, чи знаєте ви алгоритми лінійного часу для сортування цілих чисел? Подивіться це в CLRS. Ваш випадок може бути одним із випадків, коли ми можемо сортувати за лінійним часом.
Каве

6
Цілі особи можуть бути відсортовані в (див. Nada.kth.se/~snilsson/fast-sorting ) або в очікуваний час (див. Ieeexplore .ieee.org / stamp / stamp.jsp? arnumber = 1181890 ) або навіть у лінійний час, якщо розмір слова досить великий (див. LNCS 8503, стор. 26ff). O ( n О(нжурналжурналн)О(нжурналжурналн)
Yuval Filmus

10

Ця відповідь розглядає іншу модель обчислення: модель одиничної вартості оперативної пам'яті. У цій моделі машинні слова мають розмір , а операції над ними займають час. Для простоти ми також припускаємо, що кожен елемент масиву вписується в одне машинне слово (і так є не більше за величиною).O ( 1 ) n O ( 1 )О(журналн)О(1)нО(1)

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

Ідея полягає в тому, що наступна ідентичність має значення, якщо масиви містять однакові елементи: Обчислення цих многочленів точно займе занадто багато часу. Замість цього ми вибираємо випадковий простийpта випадковийx0і перевіряємо, чи n i = 1 (x0-ai) n i = 1 (x0-

i=1н(х-аi)=i=1н(х-бi).
pх0 Якщо масиви рівні, тест завжди пройде, тож давайте зосередимось на випадках, коли масиви різні. Зокрема, деякий коефіцієнтn i = 1 ( x - a i ) - n i = 1 ( x - b i ) є ненульовим. Оскільки a i , b i мають величину n O ( 1 ) , цей коефіцієнт має величину 2 n n O (
i=1н(х0-аi)i=1н(х0-бi)(модp).
i=1н(х-аi)-i=1н(х-бi)аi,бiнО(1) , і тому він має щонайбільшеO(n)простих коефіцієнтів розміруΩ(n). Це означає, що якщо ми виберемо набір щонайменше n 2 простихрозмірівpрозміром принаймні n 2 (скажімо), то для випадкового простогоpцього множини він матиме ймовірність принаймні1-1 / n,що n i = 1 (x- a i )2ннО(н)=нО(н)О(н)Ω(н)н2pн2p1-1/н Випадковий х 0 по модулю р спостерігатиме це з імовірністю 1 - п / р 1 - 1 / п (такмногочлен ступенявище п має не більше п коренів).
i=1н(х-аi)-i=1н(х-бi)0(модp).
х0p1-н/p1-1/ннн

На закінчення, якщо ми виберемо випадковий розміром приблизно n 2 серед набору принаймні n 2 різних простих чисел і випадкового x 0 по модулю p , то коли масиви не містять однакових елементів, наш тест не завершиться ймовірність 1 - O ( 1 / n ) . На виконання тесту потрібно час O ( n ), оскільки р вписується в постійну кількість машинних слів.pн2н2х0p1-О(1/н)О(н)p

н2Ω(1/журналн)p(журналн)О(1)х0pх0

О(н)1-О(1/н)1-О(1/нС)С


1
Хоча цей алгоритм є рандомізованим, він пояснює, як реалізувати ідеї в деяких інших відповідях, щоб вони фактично працювали. Він також має перевагу перед хеш-підходом: він є на місці.
Yuval Filmus

Я думаю, що ОП не любить ймовірнісні алгоритми, оскільки йому не сподобався очікуваний лінійний алгоритм часу за допомогою хеш-таблиці.
Каве

Каве, ти маєш рацію. Але звичайно це рішення також цікаве і його слід дотримуватися, воно вирішує випадок для імовірнісних алгоритмів. Крім того, я думаю, що він використовує модель, яку я шукаю.
Альберт Гендрікс

1
Мені просто цікаво, чи правильно позначення O (1 / n). Звичайно, я знаю, що ви маєте на увазі, але я думаю, що за визначенням big-O це еквівалентно O (1).
Альберт Гендрікс

2
С/ннО(1)

-3

я запропоную інший алгоритм (або принаймні схему такого алгоритму)

[мiн,мах]

  1. О(н)minmax

  2. Відняти значення minз усіх значень з обох масивів (тут той факт, що один масив уже в упорядкованому порядку не враховується, імовірно, це може бути покращено)

  3. 1c>1

  4. max-minО((мах-мiн)н)

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

Наведена вище схема алгоритму є варіацією алгоритму сортування лінійного часу, використовуючи " рухомі маси ". Фізична інтуїція за алгоритмом сортування рухомих мас така:

Припустимо, що значення кожного елемента насправді представляє його масову величину, і уявіть, як упорядкувати всі елементи в рядку і застосувати ту саму силу прискорення.

Тоді кожен предмет переміститься вгору на відстань, пов’язану з його масою, більш масивна, менша відстань, і навпаки. Потім, щоб отримати відсортовані предмети, просто збирайте їх у зворотному порядку за пройденою дистанцією.

мах-мiн

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

Можна подумати, що цей алгоритм може означати мало, але він показує хоча б одне. Що, " фундаментально ", на фізичному рівні, сортування довільних чисел є операцією лінійного часу за кількістю елементів.


Що стосується збору предметів у зворотному порядку пройденої відстані, чи не буде це переведенням до порівнянь на рівні реалізації, і чи не потрібно вам потім сортувати "відстані"?
JustA AnotherSoul
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.