- •Анализ алгоритмов (Лекции 2000)
- •Глава 1. Модели вычислений.
- •Глава 3. Перестановки как абстрактный тип данных
- •3.1 Представление перестановок в естественной форме.
- •Var a : array [1..N] of Boolean;
- •Var I, j, k, m:1..N; a:array[1..N] of Boolean;
- •If a[I] then
- •Var I,j:1..N; s:boolean:
- •Var I,j,k:1..N: a:array[1..N] of boolean;
- •If a[I] then
- •3.2 Представление перестановок в циклической форме.
- •Procedure trsl(var f: tpe; var g: tpc);
- •Var I : 1..N; s : Boolean;
- •If a[I] then
- •Procedure u1(var f : tpe; var g : tpk);
- •Var r : real;
- •3.3 Представление перестановок в виде таблицы инверсий.
- •Var I : 0..N; s : Boolean;
- •Var I, j, k : integer;
- •Var c : array [0..N] of 0..1;
- •X : array [1..N] of real;
- •Function ч3 (var r :tpi) : Boolean;
- •Var k, I, j, s, : integer;
- •3.4 Задача о складывании карт.
- •Var I,a,b : integer;
- •Var z:integer;
- •Глава 4. Генерация перестановок
- •4.1Генерация перестановок в лексикографическом порядке.
- •Var р : array [0..N] of 0..N; { текущая перестановка}
- •Var p : array [1..N] of 1..N;
- •Генерация перестановок за минимальное число транспозиций
- •Var I,k : integer;
- •Var p:array [0..N1] of 1..N1;
- •I,j,k,t: integer;
- •Глава 5. Генерация подмножеств множества
- •5.1Генерация подмножеств в лексикографическом порядке.
- •5.2 Генерация подмножеств за счет их минимального изменения.
- •Var s : array [1..N] of 0..1;
- •I : integer;
- •Var s : array [1..N] of 0..1;
- •I,j,k,p : integer;
- •Var t : array [0..N] of 1..N1; {стек}
- •Var t : array [0..N1] of 1..N2;
- •I,p : integer;
- •5.3Генерация мультимножеств.
- •Глава 6. Генерация k-подмножеств
- •Var s : array[1..K] of 1..N;
- •I,p : integer;
- •6.1Генерация k-подмножеств заменой одного элемента.
- •Var I : integer;
- •Var I,m,h:integer;
- •Упражнение. Выполните приведенный алгоритм для деревьв
- •В режиме неполного вычисления
- •Глава 8 Теорема о сложности рекурсивных программ
- •Глава 9 Производящие функции
Санкт-Петербургский государственный
университет
Математико-механический факультет
В. А. Костин
Анализ алгоритмов (Лекции 2000)
Санкт-Петербург
2000
Как найти эффективный алгоритм для решения задачи? Как сравнить найденный алгоритм с другими, решающими ту же задачу? Как оценить его качество? Предлагаемый курс предназначен для знакомства с необходимым математическим аппаратом, используемым для этой цели.
Мы не будем рассматривать задачу доказательства правильности алгоритма. Эта другая область. Считаем, что все рассматриваемые алгоритмы при их анализе удовлетворяют критериям правильности.
Будем считать, что у поставленной задачи выделено представление исходных данных и результатов решения. Выбор представлений естественно накладывает ограничения на возможные алгоритмы решения задачи. Однако такой подход позволяет ввести необходимые критерии для оценки алгоритмов. Более того, будем считать, что с каждой конкретной задачей связан некоторый набор целочисленных параметров, характеризующих размерность исходных данных. Например, такими параметрами для задачи умножения двух натуральных чисел является разрядность представления сомножителей, а для задачи перемножения матриц число строк и столбцов исходных матриц, учитывая, конечно, необходимое равенство для корректности определения умножения матриц. Для задачи нахождения кратчайшего пути между вершинами связного графа параметром может быть число вершин в графе и т. п.
Время, затрачиваемое алгоритмом как функция от размерности исходных данных, называется временной сложностью этого алгоритма. Поведение этой сложности в пределе при увеличении значений исходных параметров называется асимптотической временной сложностью.
Аналогично определяются понятия емкостной сложности и асимптотической емкостной сложности как функций определяющих объем ресурсов памяти необходимый для решения задачи по предложенному алгоритму. Обычно асимптотическая сложность
Заметим, что именно асимптотическая сложность определяет в итоге размерность задачи, которые можно решить этим алгоритмом.
Пример
Алгоритм |
Временная сложность, как функция от параметра n (в мсек) |
Максимальное значение параметра n задачи, решаемой за |
||
1 сек |
1 мин |
1 час |
||
A1 |
n |
1000 |
6104 |
3,6106 |
A2 |
n log2n |
140 |
4893 |
2,0105 |
A3 |
n2 |
31 |
244 |
1897 |
A4 |
n3 |
10 |
39 |
153 |
A5 |
2n |
9 |
15 |
21 |
A6 |
n! |
6 |
|
|
Заметим, что асимптотическая сложность алгоритма характеризует и при изменении характеристик вычислительной установки. Пример, предположим, что достигнуто десятикратное ускорение скорости ЭВМ. Эффект этого ускорения может быть представлен как
Алгоритм |
Временная сложность |
Максимальное значение до ускорения |
Максимальное значение после ускорения |
A1 |
n |
S1 |
10S1 |
A2 |
n log2n |
S2 |
10S2 для больших n |
A3 |
n2 |
S3 |
3,16S3 |
A4 |
n3 |
S4 |
2,15S4 |
A5 |
2n |
S5 |
S5+3,3 |
A6 |
n! |
S6 |
S6 |