Программирование на языках высокого уровня Сложность алгоритма
Сложность алгоритма n Временная (вычислительная): функция от объема входных (и, возможно, выходных) данных, равная количеству операций, необходимых для их обработки. n n В худшем случае рассматривается максимальное количество операций. В лучшем – минимальное. n Пространственная (по данным): функция от объема входных (и, возможно, выходных) данных, равная объему необходимой для их обработки памяти. n Асимптотическая (временная или пространственная) сложность – функция, ограничивающая сложность сверху или снизу асимптотически. Обычно выбирают функцию простой структуры: n n логарифмическую, линейную, полиномиальную, экспоненциальную.
Классификация алгоритмов n Полиномиальные (класс P), «хорошо решаемые» задачи. n Примеры: n n n сортировка массива, поиск элемента в массиве и другие. n Неполиномиальные (класс NP), экспоненциальные, полный перебор, «трудно решаемые» задачи. n Примеры: n n задача о назначении задача об упаковке ( «Тетрис) оптимальное решения для игры « 15» и другие.
Уменьшение вычислительной сложности n Уменьшить вычислительную сложность экспоненциального алгоритма означает найти полиномиальный алгоритм, решающий ту же задачу. Известны следующие основные способы: n Сужение задачи (решение частного случая, с заданными ограничениями). n Поиск приближенного решения (потеря точности ради сокращения времени). n Выявление и использование закономерностей. n Использование других форматов входных и промежуточных данных. n Все задачи могут быть решены экспоненциальным (переборным) алгоритмом. Поиск полиномиального алгоритма – творческая задача.