Алгоритмы

Автор работы: Пользователь скрыл имя, 10 Января 2014 в 19:36, доклад

Описание работы

Алгори́тм — набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий. В старой трактовке вместо слова «порядок» использовалось слово «последовательность», но по мере развития параллельности в работе компьютеров слово «последовательность» стали заменять более общим словом «порядок». Это связано с тем, что работа каких-то инструкций алгоритма может быть зависима от других инструкций или результатов их работы. Таким образом, некоторые инструкции должны выполняться строго после завершения работы инструкций, от которых они зависят. Независимые инструкции или инструкции, ставшие независимыми из-за завершения работы инструкций, от которых они зависят, могут выполняться в произвольном порядке, параллельно или одновременно, если это позволяют используемые процессор и операционная система.

Файлы: 1 файл

ответы.doc

— 89.50 Кб (Скачать файл)

  • Время работы

  • Распространенным  критерием оценки алгоритмов является время работы и порядок роста продолжительности работы в зависимости от объема входных данных.

    Для каждой конкретной задачи составляют некоторое число, которое называют ее размером. Например, размером задачи вычисления произведения матриц может быть наибольший размер матриц-множителей, для задач на графах размером может быть количество ребер графа.

    Время, которое  тратит алгоритм как функция от размера  задачи , называют временной сложностью этого алгоритма T(n). Асимптотику поведения этой функции при увеличении размера задачи называют асимптотичной временной сложностью, а для ее обозначения используют специальную нотацию.

    Именно асимптотическая  сложность определяет размер задач, которые алгоритм способен обработать. Например, если алгоритм обрабатывает входные данные размером  за время cn², где c — некоторая константа, то говорят, что временная сложность такого алгоритма O(n²).

    Часто, во время  разработки алгоритма пытаются уменьшить асимптотическую временную сложность для наихудших случаев. На практике же бывают случаи, когда достаточным является алгоритм, который «обычно» работает быстро.

    Грубо говоря, анализ средней асимптотической  временной сложности можно разделить на два типа: аналитический и статистический. Аналитический метод дает более точные результаты, но сложен в использовании на практике. Зато статистический метод позволяет быстрее осуществлять анализ сложных задач.

    В следующей  таблице приведены распространенные асимптотические сложности с комментариями.

    Сложность

    Комментарий

    Примеры

    O(1)

    Устойчивое  время работы не зависит от размера  задачи

    Ожидаемое время поиска в в хеш-таблице

    O(log log n)

    Очень медленный рост необходимого времени

    Ожидаемое время работы интерполирующего поиска n элементов

    O(log n)

    Логарифмический рост — удвоение размера задачи увеличивает время работы на постоянную величину

    Вычисление xn; Двоичный поиск в массиве из n элементов

    O(n)

    Линейный  рост — удвоение размера задачи удвоит и необходимое время

    Сложение/вычитание  чисел из n цифр; Линейный поиск в массиве из n элементов

    O(n log n)

    Линеаритмичный  рост — удвоение размера задачи увеличит необходимое время чуть более чем вдвое

    Сортировка слиянием или кучей n элементов; нижняя граница сортировки сопоставлениемn элементов

    O(n²)

    Квадратичный  рост — удвоение размера задачи увеличивает необходимое время в четыре раза

    Элементарные алгоритмы сортировки

    O(n³)

    Кубичный  рост — удвоение размера задачи увеличивает необходимое время в восемь раз

    Обычное умножение матриц

    O(cn)

    Экспоненциальный  рост — увеличение размера задачи на 1 приводит к c-кратному увеличению необходимого времени; удвоение размера задачи увеличивает необходимое время в квадрат

    Некоторые задачи коммивояжёра, алгоритмы поиска полным перебором


     

  • Наличие исходных данных и некоторого результата


  • Алгоритм — это точно определённая инструкция, последовательно применяя которую к исходным данным, можно получить решение задачи. Для каждого алгоритма есть некоторое множество объектов, допустимых в качестве исходных данных. Например, в алгоритме деления вещественных чисел делимое может быть любым, а делитель не может быть равен нулю.

    Алгоритм служит, как правило, для решения не одной  конкретной задачи, а некоторого класса задач. Так, алгоритм сложения применим к любой паре натуральных чисел. В этом выражается его свойство массовости, то есть возможности применять многократно один и тот же алгоритм для любой задачи одного класса.

    Для разработки алгоритмов и программ используется алгоритмизация — процесс систематического составления алгоритмов для решения поставленных прикладных задач. Алгоритмизация считается обязательным этапом в процессе разработки программ и решении задач на ЭВМ. Именно для прикладных алгоритмов и программ принципиально важны детерминированность, результативность и массовость, а также правильность результатов решения поставленных задач.

    Алгоритм — это понятное и точное предписание, исполнительно совершить последовательность действий, направленных на достижение цели.

  • Представление алгоритмов


  • Формы записи алгоритма:

    • словесная или вербальная (языковая, формульно-словесная);
    • псевдокод (формальные алгоритмические языки);
    • схематическая:
      • графическая (блок-схемы и ДРАКОН-схемы);
      • структурограммы (диаграммы Насси-Шнейдермана).

    Обычно сначала (на уровне идеи) алгоритм описывается  словами, но по мере приближения к  реализации он обретает всё более формальные очертания и формулировку на языке, понятном исполнителю (например, машинный код).

  • Эффективность алгоритмов


  • Хотя в определении  алгоритма требуется лишь конечность числа шагов, требуемых для достижения результата, на практике выполнение даже хотя бы миллиарда шагов является слишком медленным. Также обычно есть другие ограничения (на размер программы, на допустимые действия). В связи с этим вводят такие понятия как сложность алгоритма (временна́я, по размеру программы, вычислительная и др.).

    Для каждой задачи может существовать множество алгоритмов, приводящих к цели. Увеличение эффективности  алгоритмов составляет одну из задач  современной информатики. В 50-х гг. XX века появилась даже отдельная её область — быстрые алгоритмы. В частности, в известной всем с детства задаче об умножении десятичных чисел обнаружился ряд алгоритмов, позволяющих существенно (в асимптотическом смысле) ускорить нахождение произведения. См. быстрое умножение

    Ярким примером является алгоритм Чудновского для вычисления числа .

     


    Информация о работе Алгоритмы