Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборные_Ответы_Вопросы_МСиП_v1.docx
Скачиваний:
17
Добавлен:
15.01.2025
Размер:
31.36 Mб
Скачать

Методы снижения сложности алгоритмов

Как правило, при решении задач моделирования оказывается, что выч. сложность алгоритма очень высока -> невозможно провести моделирование. Поэтому требуется решить задачу, упрощение (снижение сложности алгоритма, чтобы можно было в реальности провести моделирование).

Известно два подхода для снижения выч. сложности:

  1. Результат работы алгоритма не изменяется

Вектор x -> Алгоритм-> вектор y

Вектор y = вектор F (вектор x)

Данный подход наиболее желателен, так как результат работы алгоритма тот же, а сложность меньше.

  1. Применяется, когда подход первый невозможно применить или он себя исчерпал

Результат работы алгоритма изменяется (данные на выходе изменяются, но не очень существенно).

Вектор x -> Алгоритм-> вектор y с тильдой

Вектор y с тильдой = вектор Fс тильдой (вектор x)

Алгоритм изменяется, но не значительно изменяется. вектор y ~ y с тильдой.

Существенно можно снизить сложность, но будут потери. Рассматриваем ток первые подход. (сокращение сложности, без изменения результата)

Возможности снижения сложности без изменения выходных данных

  1. Преобразования алгоритма с экспоненциальной сложность в полиноминальную. (На практике почти невозможно сделать): NP-> P

  2. Снижение порядка сложности (Иногда возможно снизить): P: NK где K – порядок сложности

  3. Снижение мультипликативной постоянной альфа в алгоритме с полиноминальной сложность. (Если есть алгоритм полиноминальный, у него есть коэффициент альфа на NK нет универсального способа уменьшения выч сложности алгоритма, но есть методы:

  1. Метод «Разделяй и властвуй» - согласно этому методу, исходная сложная задача (большой размер входных данных) разбивается на нескольких простых задач. Каждая задача решается каким-либо методом. Затем решение подзадач комбинируется, а затем на их основе. Очень часто такой подход носит рекурсивный характер. (Пример: быстрое преобразование Фурье, алгоритм Штрассена для быстрого умножения матриц.)

  2. Метод исключения повторяющихся операций. (выявить повторяющиеся операции и их исключить, самое трудное – найти повторяющиеся операции).

Задача перемножения двух комплексных чисел:

(a+jb)(c+jb) = (ac-bd)+j(bc+ad)

Одно комплексное число в компе – пара действительных чисел.

В данном случае результат – пара действительных чисел. 4 действительных умножения и 2 действительных сложения (действительные операции без j). Задача – сократить кол-во таких операций. Если для выполнение этих операций используется процессор без аппаратного умножения, то время операций умножения в разы больше, чем время операций сложения. Задача упрощение сводится к задаче сокращения кол-ва операций умножения

Рисунок 1 – Унгерн (Метод 3М)

  1. Алгоритмы экспоненциальной и полиноминальной сложности. Порядок сложности алгоритмов.

Алгоритмы по скорости роста функции сложности делятся на классы:

  1. Алгоритмы полиномиальной сложности

  2. Алгоритмы экспоненциальной сложности

Обратимся к алгоритмам полиномиальной сложности: число называется порядком сложности алгоритма.

  • – алгоритм с линейной сложностью (первого порядка)

  • – алгоритм с квадратичной сложностью (второго порядка)

  • – алгоритм с кубической сложностью (третьего порядка)

При увеличении производительности вычислительного устройства в 1000 раз размер входных данных алгоритма 1-го порядка может быть увеличен тоже в 1000 раз. Для алгоритма 2-го порядка – только в 31 раз, а для алгоритма 3-го порядка только в 10 раз. Если требуется реализовывать полиномиальные алгоритмы высокого порядка или алгоритмы экспоненциальной сложности, то требования к производительности процессора катастрофически вырастают.