Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Моделирование.docx
Скачиваний:
11
Добавлен:
15.01.2025
Размер:
1.99 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М)

3 умножения получилось и 5 сложений. В данных условиях время выполнение сократилось на 25% .

Если применяются современные процессоры с аппаратным умножителем, то метод 3М увеличивает трудоёмкость.

Вектор y = матрица а * матрица b * вектор x

Матрица размерности N = MN NN N

  1. Y = (A*B) * X

  2. Y = A * (B*X)

С точки зрения математики результат одинаковый. Но с точки зрения трудозатрат. (второй лучше)

  1. 2N3 – N2 (тут умножение матриц) + 2N2-N (тут умножение матрицы на вектор) = 2N3 + N2 – N

  2. (2N2 – N)2 (тут умножение матрицы на вектор) = 4N2 – 2N

Засчёт правильного выбора порядка выполнения операций, сложность сократилась в 50 раз, при N = 100.

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