Для таких людей, як я, які вивчають алгоритми для життя, стандартною моделлю обчислень 21 століття є ціла ОЗП . Модель призначена для відображення поведінки реальних комп'ютерів точніше, ніж модель машини Тьюрінга. Комп'ютери в реальному світі обробляють багатобітні цілі числа в постійному часі, використовуючи паралельне обладнання; НЕ довільні цілі числа, але (оскільки розміри слів неухильно зростати з плином часу) НЕ фіксований розмір цілих чисел, або.
Модель залежить від одного параметра , який називається розміром слова . Кожна адреса пам'яті містить одне бітове ціле число або слово . У цій моделі розмір вводу - це кількість слів на вході, а час виконання алгоритму - кількість операцій над словами . Стандартні арифметичні операції (додавання, віднімання, множення, цілочисельне ділення, залишок, порівняння) і логічні операції (побітові і, або, XOR, зрушення, поворот) на словах вимагають часу за визначенням .wwnO(1)
Формально розмір слова НЕ є постійноюw для аналізу алгоритмів у цій моделі. Щоб модель відповідала інтуїції, нам потрібно , оскільки в іншому випадку ми навіть не можемо зберегти ціле число в одному слові. Тим не менш, для більшості нечислових алгоритмів час роботи фактично не залежить від , оскільки ці алгоритми не переймаються базовим двійковим поданням їх вводу. І Mergesort, і гипсорт виконуються в час; серединний-3-квакісорт працює в час, в гіршому випадку. Одним з помітних винятків є двійковий сорт радіакса, який працює в час.w≥log2nnwO(nlogn)O(n2)O(nw)
Встановлення дає нам традиційну модель RAM з логарифмічною вартістю. Але деякі цілочисельні алгоритми оперативної пам’яті розроблені для великих розмірів слів, як алгоритм сортування цілочисельних лінійних ліній за часом Andersson та ін. , що вимагає .w=Θ(logn)w=Ω(log2+εn)
Для багатьох алгоритмів, які виникають на практиці, розмір слова просто не є проблемою, і ми можемо (і ми можемо) повернутися до набагато простішої моделі оперативної пам'яті з однорідною вартістю. Єдина серйозна складність полягає у вкладеному множенні, яке може бути використане для створення дуже великих цілих чисел дуже швидко. Якби ми могли виконати арифметику на довільних цілих числах у постійному часі, ми могли б вирішити будь-яку проблему в PSPACE у поліноміальний час .w
Оновлення: Я також повинен зазначити, що існують винятки із "стандартної моделі", як- от алгоритм множення цілого числа Фюрера , який використовує багатотактні машини Тьюрінга (або, що еквівалентно, "бітова оперативна пам'ять"), і більшість геометричних алгоритмів, які аналізуються теоретично чиста, але ідеалізована модель "справжньої оперативної пам'яті" .
Так, це банка з глистами.