Проміжок часу та простору для проблеми, що відсутня


14

Ось відома проблема.

Враховуючи масив додатних цілих чисел, виведіть найменше додатне ціле число не в масиві.A[1n]

Проблему можна вирішити в просторі та часі: прочитайте масив, відслідковуйте в просторі , скануйте на предмет найменшого елемента.O(n)O(n)1,2,,n+1

Я помітив, що ви можете торгувати простором на час. Якщо у вас є лише пам'ять, ви можете зробити це в раундах і отримати час . У спеціальному випадку, очевидно, існує алгоритм квадратичного часу з постійним простором.O(nk)kO(kn)

Моє запитання:

Це оптимальний компроміс, тобто чи ? Загалом, як можна довести такий тип меж?timespace=Ω(n2)

Припустимо модель RAM з обмеженою арифметикою та випадковим доступом до масивів в O (1).

Натхнення для цієї проблеми: компроміс часу та простору для паліндромів в односмуговій моделі (див., Наприклад, тут ).


2
Ні, ви можете сортувати свій масив в а потім знайти відсутнє число (перше число має бути 1, друге - 2, ... інше ви знайдете) в O (n), це сортування може бути зроблено з inplace mergesort означає додатковий простір, тому час простір належить . Я не знаю, я точно визначив вашу проблему чи ні (через це я не відповів, також не знаю, чи є краща межа). O(nlogn)O(1)O(nlogn)

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

Який алгоритм постійного простору? Здається, вам знадобиться простір для версії яка для мене "очевидна"lognn2
Xodarap

У цій моделі цілі числа розміру слова приймають ; якщо це зручніше, ви можете відповісти на будь-який варіант запитання з часом space = Ω ( n 2O(1)для деякої постійноїk. timespace=Ω(n2logkn)k
sdcvvc

@sdcvvc, я не можу зрозуміти ваш алгоритм , ти б описав це трохи більше? (лише зауважте, що читання в біти займає O ( log n ) ). O(n)/O(1)O(logn)

Відповіді:


2

Це можна зробити в словах O(nlogn) та O(1) слова пам'яті (відповідно O(nlog2n) часу та O(logn) пам'яті в бітовій моделі RAM). Дійсно, рішення базуватиметься на наступному спостереженні.

Скажіть, що в діапазоні [ 1 , n + 1 ] є n0 парних і n1 непарних чисел (тому n 0n 1 і n 0 + n 1 = n + 1 ). Тоді є b { 0 , 1 } такий, що на вході є максимум n b - 1 значення з парністю b . Дійсно, інакше є принаймні n 0[1,n+1]n0n1n0+n1=n+1b{0,1}nb1bn0парні і принаймні n1 непарні значення на вході, що означає, що принаймні n0+n1=n+1 значення на вході, суперечливість (їх є лише n ). Це означає, що ми можемо продовжувати шукати пропущене число лише серед непарних чи парних чисел. Цей же алгоритм може бути застосований і до більш високих бітів бінарних позначень.

Отже, наш алгоритм буде виглядати так:

  1. Припустимо , що ми вже зараз , що є тільки x значення у вхідних даних із залишком по модулю 2b дорівнює r[0,2b) , але існує, принаймні , x+1 число в діапазоні [1,n+1] , які мають залишок r модуль 2b (на початку ми знаємо, що для b=0,r=0 ).

  2. Скажімо, що у вхідному значенні є значення x0 з залишком r modulo 2b+1 і x1 у вході з залишком r+2b по модулю 2b+1 (ми можемо знайти ці числа за один прохід через вхід). Ясна річ, x0+x1=x . Більше того, оскільки на вході є щонайменше x+1 числа з залишком r modulo 2b , принаймні одна з пар(r,b+1),(r+2b,b+1) відповідає вимогам кроку1 .

  3. Ми знайшли відсутнє число, коли 2bn+1 : є лише одне число в діапазоні [1,n+1] яке може мати залишок r модуль 2b ( сам r , якщо воно знаходиться в діапазоні), тому є в більшість нульових значень на вході, які мають такі залишки. Так що r дійсно відсутня.

Зрозуміло, що алгоритм зупиняється на етапах O(logn) , кожен з них потребує часу O(n) (один прохід по вхідному масиву). Більше того, потрібні лише O(1) слова пам'яті.


Я радий бачити запитання, відповів після цього часу :)
sdcvvc

1

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

Відповідь, дана в цьому питанні, задовольняє.

Це неможливо запустити з меншим часом або простором, а додавання додаткового часу або простору марно, тому тут немає простору між часом та простором. (Зауважте, що , тому компроміс, який ви спостерігали, ні в якому разі не має асимптотики.)n=O(n/k)

З точки зору вашого загального питання, я не знаю жодної приємної теореми, яка допоможе вам довести компроміси в просторі та часі. Це питання, схоже, вказує на відсутність (відомої) простої відповіді. В основному:

Припустимо, деяка мова вирішується за час (використовуючи деяку кількість простору) та s простір (використовуючи деяку кількість часу). Чи можемо ми знайти f , g таким, що L визначається за M, який працює у f ( t , s ) час та g ( t , s ) просторі?tsf,gLMf(t,s)g(t,s)

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


EDIT: Гаразд, з повторенням (але я все-таки припускаю, що при введенні розміру максимально можливе число - n + 1 ).nn+1

Зауважте, що наш алгоритм повинен вміти розрізняти принаймні можливих відповідей. Припустимо, при кожному проходженні даних ми можемо отримати максимум k фрагментів даних. Тоді нам знадобляться п / к пропуски для диференціації всіх відповідей. Припустимо, що k = n / s, тоді ми біжимо в nnkn/kk=n/sчас. Тому я думаю, що це доводить те, чого ти хочеш.nn/sn=sn

Складність полягає в тому, що ми показуємо, що кожен раз через нас отримують лише біт. Якщо ви припускаєте, що наша єдина юридична операція =, то ми добрі. Однак якщо ви дозволите більш складні операції, ви зможете отримати більше інформації.k


3
Питання, яке ви пов’язали, передбачає, що кожне число з’являється не більше одного разу. Я не роблю цього припущення, тому рішення не застосовується. Дякую за друге посилання
sdcvvc

@sdcvvc: Моя помилка, я припускав, що ви використовуєте версію, з якою я знайомий. У мене немає повної відповіді, але коментар задовгий - сподіваюся, моя редакція корисна.
Xodarap

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