алгоритм аналізу часу "розмір входу" проти "вхідних елементів"


13

Я все ще трохи плутаю терміни "довжина введення" та "розмір вводу", коли використовуються для аналізу та опису верхньої межі безсимптомного алгоритму

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

Деякі автори посилаються на довжину введення до розміру символів, які необхідні для представлення вводу, тому "abcde", якщо використовувати як вхід, встановлений в алгоритмі, матиме "довжину введення" 6 символів.

Якщо замість символів у нас є число (наприклад, цілі числа), то іноді двійкове представлення використовується замість символів, тому "вхідна довжина" обчислюється як (будучи L - максимальним числом у вхідному наборі) .Nlog(L)

Є й інші проблеми: навіть якщо набір вводу є числами, вони описують "вхідну довжину" як "змінні рішення", тому для вхідного набору довжини N з цифрами в діапазоні довжина вводу становить просто N ( сума підмножини, наприклад), або ще більше ускладнити кількість значень бінарних місць, необхідних для постановки проблеми (я вважаю, що це так само, як N l o g ( L ) )0232Nlog(L)

Так:

  • це залежить від алгоритму?
  • Що означає і коли використовувати кожну довжину введення "версія"
  • Чи є якесь правило, яке я можу використовувати, щоб вирішити, яке з них використовувати?

Відповіді:


10

У самому формальному розумінні розмір вхідного сигналу вимірюється з посиланням на алгоритм виконання машиною Тьюрінга, і це кількість символів алфавіту, необхідних для кодування введення.

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

З використанням прикладу "abcde", як правило, буває, що алфавіт, який ми використовуємо для введення, невеликий, тому навіть використовуючи проксі-вимірювання в символів, ми знали, що навіть на машині Тьюрінга ми можемо, якщо нас турбують, вказати кодування введення , який буде перетворювати «ABCDE» в який - то закодованої формі , яка мала довжину не більше 5 × C в протягом деякого постійного з . Таке розширення постійною зазвичай не має значення в нашому асимптотичному аналізі, оскільки ми звичайно відкидаємо постійні фактори.55×c c

nnN=cn2lognO(p(n))ppO(p(n))=O(p(N))

mn=O(logm)O(m)O(2n)mPNPNP-повні, пам’ятайте про це). З іншого боку, якби все, що нас цікавило, - це рішучість, то це був би досить хороший проксі-захід.

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


Дякую за відповідь. Дійсно цікава частина, в якій ви говорите про вибір правильного проксі, щоб говорити про членство в P або NP для вступу, це може бути абсолютно новим питанням! Крім того, і повернення до колишнього питання. Який, на вашу думку, тоді був би найкращим проксі-сервером для алгоритму, що його вхід - це набір цілих чисел? Гадаю, може, це залежатиме від алгоритму? Я бачу 3 можливі варіанти: N (довжина набору) N * Журнал (L) (L - максимальне значення) і Журнал (Сума (встановити)).
Ісус Салас

NlogLNN 2logL

5ccn2lognnn2

Можливо, коли використовувати N або N log L, це може залежати від вартості алгоритму для роботи кожного елемента введення. Я гадаю, що якщо у нас є припущення, що алгоритм використовує постійний час для виконання своєї роботи над кожним вхідним елементом незалежно від його розміру в бітах (і це не зловживає), то N, ймовірно, є правильним, в результаті чого O (N) . З іншого боку, якщо розмір вхідного елемента в бітах збільшує операційну вартість, то N log L здається більш точним, оскільки ми повинні виражати у верхній межі, які властивості з вхідних даних беруть участь у зростанні
Ісус Салас

5c=1c=log255 O(n2logn)біти, але це досить міцна верхня межа, яка може працювати з обома звичайними кодуваннями.
Люк Матьєсон

8

Це залежить від вашої моделі обчислення, а також, на жаль, часом від самого алгоритму.

  • ababcd
  • Якщо у вашій моделі є оперативна пам’ять, то розмір входу - це кількість регістрів / комірок пам'яті, де вхід спочатку залишається. Це може бути неправильно використане, оскільки ви могли технічно записати весь вхід в один реєстр. Однак тоді розрахунки дорожчі, якщо використовувати модель логарифмічних витрат.
  • ww

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

  • O(nlogn)nO(1)n
  • n×n

n


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