
- •Понятие сложности алгоритма, оценки времени исполнения.
- •Общая классификация вычислительных алгоритмов.
- •Точность представления чисел.
- •Вычисление «машинного нуля».
- •Понятие стека. Операции над стеком.
- •Программная реализация стека на основе статического массива.
- •Использование стека при организации связи функций в языке Си и в ос.
- •Понятие очереди. Операции над очередями.
- •Кольцевая очередь. Деки.
- •Программная реализация очереди на основе статического массива.
- •Структура данных «список».
- •Ссылки.
- •Линейные списки – основные операции.
- •Реализ списков на основе динам стру.
- •Двусвязный список и его программная реализация.
- •Кольцевые списки.
- •Многосвязные (слоеные) списки.
- •Бинарный поиск.
- •Алгоритм прямого поиска.
- •Алгоритм Кнута-Мориса-Пратта.
- •Алгоритм Боуера-Мура.
- •Сортировки – общая классификация.
- •Сортировка с помощью включения.
- •Сортировка с помощью выделения
- •Сортировка с помощью обменов
- •Шейкерная сортировка
- •Сортировка Шелла
- •Сравнение рассмотренных сортировок
- •Пирамидальная сортировка
- •Быстрая сортировка.
- •Сортировка слиянием
- •Графы – основные понятия.
- •Формы представления графов. Матрица смежности
- •Матрица инцидентности
- •Списки смежности
- •Массив дуг
- •Достижимость и обходы графа
- •Алгоритм Дейкстры
- •[30, 1] Постоянная
- •[40, 3] Постоянная
- •Вычисление выражений по их символьному представлению.
- •Построение обратной польской записи выражения.
Понятие сложности алгоритма, оценки времени исполнения.
Алгоритмическая сложность — это зависимость времени исполнения алгоритма от длины входных данных. Если нам нужно что-то найти во входных данных или что-то переставить местами, то чем больше количество информации на входе, тем больше времени понадобится, чтобы получить результат. "Время" здесь величина довольно абстрактная. Естественно, она должна быть универсальной, и не зависеть от типа и производительности компьютера или иного устройства, а также от других частностей. Измеряется она числом элементарных шагов.
Время поиска оценивается как О(n) (O большое от n)
O(log n) потребуется 20 микросекунд, O(n2) – более 12 дней
Если n – длина строки, то <кол-во операций>=2*n2 - для сложения матриц, 32 (n2) раз – для перемножения матриц.
2*n3 - алгоритм кубической сложности О(n3).
O() показывает исключительно асимптотику!
Основание логарифма не пишется.
Пусть есть O(log2 n).
log 2 n = log 3 n / log 3 2,
O(log 2 n) = O(log 3 n)
Общая классификация вычислительных алгоритмов.
Вычислительные алгоритмы – для вычисления математических объектов(констант, функций, уравнений и тд)
Теория чисел – вычисление констант и математических функций
Решение алгебраических задач
Нахождение корней уравнений
Приближение функций
Вычислит. и геометрия и др.
Точность представления чисел.
Для реальных вычислений нужно использовать тип double.
Нормальной формой числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале [0; 1). Распространена также другая форма записи — нормализованная, в которой мантисса десятичного числа принимает значения от 1 (включительно) до 10 (не включительно), а мантисса двоичного числа принимает значения от 1 (включительно) до 2 (не включительно).
Число одинарной точности (float) — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — 32 бита или 4 байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.
Число двойной точности (double) — компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — 64 бита или 8 байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.
Вычисление «машинного нуля».
Машинный нуль — числовое значение, меньше которого невозможно задавать точность для любого алгоритма, возвращающего вещественные числа. Абсолютное значение "машинного нуля" зависит от разрядности сетки применяемой ЭВМ, от принятой в конкретном трансляторе точности представления вещественных чисел и от значений, используемых для оценки точности.
#include <stdio.h> void main ()
{ float e, e1; int k=0; e=1.0; m: e=e/2.0; e1=e+1.0; k++; if (e1>1.0) goto m; printf ("\n Число делений на
2 %6d\n", k) ; printf ("машинный нуль
%e\n", e) ; }