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

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

Существуют два подхода для снижения вычислительной сложности:

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

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

  2. Снижение порядка сложности (менее радикальный подход, но его также крайне редко сделать): P: NK где K – порядок сложности

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

  1. Метод “Разделяй и властвуй” (согласно этому методу, исходная сложная задача (большой размер входных данных) разбивается на нескольких более простых задач. Решение сложной задачи формируется из решения подзадач. Очень часто такой подход носит рекурсивный характер.)

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

  3. Метод оптимального порядка выполнения операций (Данный метод используется, когда от порядка выполнения операций результат не зависит, а сложность зависит)

Существует теория сложности алгоритмов, которая занимается анализом сложности и снижением сложности алгоритмов. Существует две возможности для снижения вычислительной сложности:

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

  2. Сложность снижается с изменением результата работы алгоритма.

Теория сложности занимается только 1-ым способом.

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

Иногда теория сложности может предложить способ сокращения сложности без изменения результата. как можно снизить вычислительную сложность.

Мы рассмотрели 2 подхода– когда результат работы не меняется и когда меняется.

Когда меняется результат мы это не рассматриваем – смотрим способы как снизить сложность не меняя результат работы алгоритма.

Рассмотрим способы снижения сложности, не изменяющие результат работы алгоритма. Нужно чтобы результат оставался тем же.

Снижение вычислительной сложности:

  1. Преобразование алгоритма, имеющего экспоненциальную сложность в алгоритм с полиномиальной сложностью. Сделать это удаётся в исключительно редких случаях.

  1. Снижение порядка сложности (m) алгоритма с полиномиальной сложностью.

  1. Уменьшение значений мультипликативных постоянных.

Например, , где – мультипликативная постоянная.

Эта цель представляется более лёгкой для достижения, но тоже не всегда.

К сожалению не существует универсального (для всех случаев) метода снижения вычислительной сложности, но существуют некоторые подходы

Как можем взять и выявить повторяющиеся операции? Рассмотрим пример выявления повторяющихся операций для задачи перемножения комплексных чисел.

Сложений: 2

Умножений: 4

Допустим, в нашем процессоре нет аппаратного умножителя –тогда нужно за счёт увеличения сложений уменьшить умножения

Сложений: 5

Умножений: 3 – меньше на 1

Здесь мы получаем сокращение числа умножений на , что соответствует общему снижению сложности или времени выполнения операции тоже примерно на , но это только в случае, если у нас нету встроенного умножителя – когда умножение намного сложнее, чем сложение.

Доказано что невозможно перемножить 2 комплексных числа делая только 2 умножения –минимум 3.

Следующий вопрос – а если у нас имеется умножитель, тогда метод не приведёт к уменьшению сложности, а наоборот.

Как правило мы же не перемножаем 2 комплексных числа просто – мы перемножаем комплексные векторы, матрицы и т.д. Что будет если у нас перемножаются комплексные матрицы и векторы?