- •Вступна лекція
- •§0.1. Вступ. Поняття про теорію складності обчислень (тсо). Міри складності.
- •§0.2. Обчислювальні проблеми. Екземпляри задач.
- •§0.1. Вступ. Поняття про теорію складності обчислень (тсо). Міри складності.
- •§0.2. Обчислювальні проблеми. Екземпляри задач.
- •Лекція 1
- •§1.1. Алгоритми і їх складність.
- •§1.2. Асимптотичні позначення швидкості росту функції.
- •§1.1. Алгоритми і їх складність.
- •§1.2. Асимптотичні позначення швидкості росту функції
- •2.2. −Позначення
- •2.3. −Позначення
- •Теорема (про співвідношення -, -, та -позначень)
- •2.6. Властивості асимптотичних відношень
- •Теорема (про транзитивність асимптотичних відношень)
- •Теорема (про оберненість асимптотичних відношень)
- •Лекція 2
- •§2.1. Машини з довільним доступом до пам’яті
- •Лекція 3
- •§ 3.1. Обчислювальна складність рам-програм.
- •Лекція 4
- •§ 4.1. Модель з програмою, що зберігається.
- •Лекція 5
- •§5.2. Бітові обчислення.
- •§5.3. Операції з двійковими векторами.
- •§5.4. Дерева розв’язань.
- •Лекція 6
- •§6.1. Машина Тюрінга.
- •Лекція 7
- •§ 7.1. Зв’язок машин Тюрінга і рам.
- •Недетерміновані машини Тюрінга. Np-повні задачі.
- •§2. Недетерміновані машини Тюрінга
- •Лекція 10
- •§1. Детерміноване моделювання нмт
- •§2. Алгоритм детермінованого моделювання нмт.
§5.2. Бітові обчислення.
Очевидно, що модель програм, які не розгалужуються заснована на рівномірній ваговій функції. Ця вага придатна коли всі обчислювані величини мають “розумний“ розмір. Існує проста модифікація моделі програм, які не розгалужуються, котра відповідає логарифмічній ваговій функції. Ця модель, яка називається бітовим обчисленням, по суті є тією ж програмою, яка не розгалужується, але в ній
1). всі змінні приймають значення 0 або1, тобто це біти,
2).
використовуються логічні операції
замість арифметичних (and
позначається через
,
or
– через
,
exclusive
or
– через
,
not
– через
).
Для
бітової моделі арифметичні операції
над цілими числами і
та j
займають щонайменше
кроків,що відповідає логарифмічній
вазі операндів. Дійсно, множення й
ділення за допомогою найкращих відомих
алгоритмів для множення або ділення і
на j
вимагає більше, ніж
кроків.
При
бітових обчисленнях порядок величин
позначається через
.
Бітова модель корисна, коли мова йде
про основні операції, такі, як арифметичні,
котрі є початковими в інших моделях.
Наприклад, для моделі програм, які не
розгалужуються множення двох n-розрядних
двійкових цілих чисел можна здійснити
за
кроків, тоді як для бітової моделі
найкращий відомий результат – це
кроків.
Інше застосування бітової моделі – логічні мережі (схеми). Програми, які не розгалужуються з двійковими входами й операціями взаємно однозначно відповідають комбінаційним логічним мережам, які обчислюють набір булевих функцій. Число кроків такої програми – це число логічних елементів в мережі.
Приклад
5.2. Нехай маємо програму для додавання
дворозрядних чисел
.
Вихідні змінні – це такі числа
,
що
.
Програма, яка не розгалужується
обчислює
,
,
.
Показано,
що додавання двох n-розрядних
чисел виконується за
кроків.
§5.3. Операції з двійковими векторами.
Можна було б не обмежувати значення змінних символами 1 і 0, а дозволити змінним приймати в яком сі значення довільний вектор із 0 й 1. Фактично двійкові вектори фіксованої довжини очевидним чином відповідають цілим числам, так що тут не допускається нічого такого, що не допускалося б в РАМ, тобто, коли це зручно, просто дозволяються регістри необмеженого розміру.
Проте,
у тих не багатьох алгоритмах, де
застосовується модель з двійковими
векторами ,довжина векторів буде значно
більшою від числа бітів, потрібних для
подання задачі. Величина більшості
цілих чисел, що містяться в даному
алгоритмі, буде такого ж порядку, що й
розмір задачі. Наприклад, розв’язуючи
задачу вибору шляху в графі із 100 вершинами
можна було б для подання наявності або
відсутності шляху із даної вершини v
в кожну з вершин використати двійкові
вектори довжини 100, а саме і-ту
позицію у векторі для вершини v
займає 1 тоді й тільки тоді, коли існує
шлях із v
в
.
В тій же задачі можна також використати
цілі числа для обрахунку й індексації,
наприклад, і вони, ймовірно, мали б розмір
числа 100. таким чином, для цілих чисел
було б потрібно 7 бітів, тоді як для
векторів –100 бітів.
Хоч
це порівняння й кидає деяку тінь на
обчислення з двійковими векторами,
більшість обчислювальних машин виконують
логічні операції на двійкових векторах,
які утворюють повне машинне слово, за
одну команду. Тому двійкові вектори
довжини 100 можна було б обробляти за три
або чотири кроки (замість одного для
чисел). Проте на результати про часову
й ємнісну складність алгоритмів при
застосуванні моделі з двійковими
векторами, ми повинні дивитися cum
grano
salis
(з крупинкою солі, в переносному розумінні
– з іронією), оскільки розмір задачі,
при якому модель становиться нереалістичною,
у цьому випадку набагато менший, ніж у
випадку моделей РАМ й алгоритмів, які
не розгалужуються. Порядок величин при
застосуванні моделі з двійковими
векторами позначають через
.
