- •Основные понятия. Справочный материал
- •Основные понятия
- •1.2. Справочный материал. Сравнение скорости роста основных функций
- •2 Новые быстрые версии старых алгоритмов
- •2.1. Сортировки массивов
- •2.1.1 Метод прямого выбора (SelectSort)
- •2.1.2 Быстрая сортировка методом двоичных вставок (MergeSort)
- •2.2. Преобразование Фурье (бпф)
- •2.2.1. Дискретное преобразование Фурье
- •2.2.2. Полубыстрое преобразование Фурье (ппф)
- •2.2.3. Быстрое преобразование Фурье (бпф)
- •2.3. Быстрая свертка
- •2.3.1. Понятие свертки
- •2.3.2. Обычный и быстрый алгоритм свертки
- •2.4. Быстрое умножение
- •2.4.1. Быстрое умножение чисел
- •1 Суммирование
- •4 Произведения чисел вдвое меньшей
- •2.4.2. Быстрое умножение матриц
- •2.4.3. Очень быстрое умножение числе (алгоритм Шенхаге – Штрассена)
- •3. Задачи на графах
- •3.1. Справочный материал
- •3.2. Поиск минимального остова в связном неориентированном взвешенном графе
- •3.3. Нахождение кратчайшего расстояния
- •3.3.1. Алгоритм Форда – Беллмана
- •3.3.2. Алгоритм Дейкстры
- •3.4. Нахождение диаметра, радиуса и центра графа
- •3.5. Задача об изоморфизме графов
- •3.6. Задача коммивояжера. Её решение методом ветвей и границ.
- •Задачи динамического программирования
- •Задачи динамического программирования. Её решение методом динамического программирования.
- •4.2. Задача об оптимальном наборе самолетом скорости и высоты
- •4.3. Задача грабителя (задача о рюкзаке)
- •4.4. Задача о перемножении матриц
- •5 Классы p и np
- •5.1 Машина Тьюринга
- •5.2 Недетерменированные машины Тьюринга(ндмт)
- •5.3 Сводимость. Np-полнота.
- •5.4 Иерархия по сложности. Труднорешаемые задачи.
- •Классы сложности.
- •6 Неразрешимые задачи
- •6.1 Новая модель алгоритма вычислений.
- •6.2 Нумерация программ
- •6.3 Неразрешимые проблемы
- •6.4 Теорема об ускорении
- •Лабораторные работы
- •Расчетно-графическое задание
- •Ответы к домашним заданиям
6.4 Теорема об ускорении
Теорема 6.7 Теорема Блюма об ускорении.
Существуют функции, которые можно вычислять ве быстрее и быстрее почти всюду, а именно: пусть М1 – некоторая МНР, вычисляющая функцию f(n), пусть t1(n) – время ее работы.
Тогда существует машина М2, которая также вычисляет функцию f(n), причем для почти всех n время ее работы t2(n)≤𝜑(t1(n)), где 𝜑 – произвольная функция ускорения со свойствами
.
n→∞
Комментарий. Если φ(n)=
100 раз быстрее машины М1.
Если φ(n)=, то ускорение уже происходит не в разы, а на порядок.
Без доказательства.
Таким образом, нашу функцию f мы можем вычислять все быстрее и быстрее, но при этом исключительное множество( множество чисел, для которых ускорение не происходит) становится все больше.
Если задать распределение вероятности входов, то существует некоторая программа, которая будет оптимальным образом на этих входах работать, то есть будет иметь минимальное математическое ожидание времени работы.
Лабораторные работы
Сортировка массивов
Метод «Пузырька»
Метод прямого выбора(SelectSort)
Метод прямого слияния (MergeSort)
Преобразование Фурье
Дискретное преобразование Фурье.
«Полу-быстрое» преобразование Фурье.
Быстрое преобразование Фурье.
Свертки
Свертка с помощью обычного алгоритма.
Свертка с помощью быстрого алгоритма (через ДПФ).
Умножение чисел
Умножение чисел столбиком.
Быстрое умножение чисел.
Задачи на графах
Поиск минимального остова в связанном неориентированном графе с помощью алгоритма Краскалла.
Нахождение кратчайшего расстояния с помощью алгоритма Форда-Беллмана.
Нахождение кратчайшего расстояния с помощью алгоритма Дейкстры.
Задачи динамического программирования
Задача грабителя(задача «о рюкзаке»).
Задача о перемножении матриц.
Расчетно-графическое задание
Вариант расчетно-графического задания выбирается по номеру в журнале. Символ b в матрице расстояний означает ∞.
Вариант1. Написать 2 программы, вычисляющие произведение двух матриц A[i,j]=(-1)^(i+j), B[i,j]=i+j,i,j=1…100. Использовать алгоритмы быстрого и обычного умножения. Сравнить трудоемкость двух алгоритмов.
Вариант2. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одновременного ветвления). Сравнить трудоемкость двух алгоритмов.
Вариант3. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одностороннего ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант4. Написать 2 программы, вычисляющие произведение двух матриц A[i,j]=(-1)^(i+j), B[i,j]=i-j,i,j=1…100. Использовать алгоритмы быстрого и обычного умножения. Сравнить трудоемкость двух алгоритмов.
Вариант5. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одновременного ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант6. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одностороннего ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант7. Написать 2 программы, вычисляющие произведение двух матриц A[i,j]=(-1)^j, B[i,j]=i+j,i,j=1…100. Использовать алгоритмы быстрого и обычного умножения. Сравнить трудоемкость двух алгоритмов.
Вариант8. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одновременного ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант9. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одностороннего ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант10. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одностороннего ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант11. Написать 2 программы, вычисляющие произведение двух матриц A[i,j]=(-1)^(i+j), B[i,j]=i+j,i,j=1…100. Использовать алгоритмы быстрого и обычного умножения. Сравнить трудоемкость двух алгоритмов.
Вариант12. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одновременного ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант13. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одностороннего ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант14. Написать 2 программы, вычисляющие произведение двух матриц A[i,j]=(-1)^(i+j), B[i,j]=i-j,i,j=1…100. Использовать алгоритмы быстрого и обычного умножения. Сравнить трудоемкость двух алгоритмов.
Вариант15. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одновременного ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант16. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одностороннего ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант17. Написать 2 программы, вычисляющие произведение двух матриц A[i,j]=(-1)^j, B[i,j]=i+j,i,j=1…100. Использовать алгоритмы быстрого и обычного умножения. Сравнить трудоемкость двух алгоритмов.
Вариант18. Написать 2 программы, вычисляющие произведение двух матриц A[i,j]=(-1)^(i+j), B[i,j]=i+j,i,j=1…100. Использовать алгоритмы быстрого и обычного умножения. Сравнить трудоемкость двух алгоритмов.
Вариант19. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одновременного ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант20. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одностороннего ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант21. Написать 2 программы, вычисляющие произведение двух матриц A[i,j]=(-1)^(i+j), B[i,j]=i-j,i,j=1…100. Использовать алгоритмы быстрого и обычного умножения. Сравнить трудоемкость двух алгоритмов.
Вариант22. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одновременного ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант23. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одностороннего ветвления). Сравнить трудоемкость двух алгоритмов.
С=
Вариант24. Написать 2 программы, вычисляющие произведение двух матриц A[i,j]=(-1)^j, B[i,j]=i+j,i,j=1…100. Использовать алгоритмы быстрого и обычного умножения. Сравнить трудоемкость двух алгоритмов.
Вариант25. Написать 2 программы, решающие задачу коммивояжера. Граф G задан матрицей c[i,j]. Использовать алгоритмы прямого перебора и метод ветвей и границ (схема одновременного ветвления). Сравнить трудоемкость двух алгоритмов.
С=