Сравнение алгоритмов жадности, разделяй и властвуй и динамического программирования

Опубликовано: 23 Февраля, 2023

Жадный алгоритм:

Жадный алгоритм определяется как метод решения задач оптимизации путем принятия решений, которые приводят к наиболее очевидной и непосредственной выгоде независимо от конечного результата. Это простой, интуитивно понятный алгоритм, который используется в задачах оптимизации.

Разделяй и властвуй Алгоритм:

Разделяй и властвуй — это алгоритмическая парадигма, в которой проблема решается с помощью стратегии «Разделяй, властвуй и комбинируй». Типичный алгоритм «разделяй и властвуй» решает проблему, используя следующие три шага:

Divide: This involves dividing the problem into smaller sub-problems.
Conquer: Solve sub-problems by calling recursively until solved.
Combine: Combine the sub-problems to get the final solution of the whole problem.

Динамическое программирование:

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

Жадный алгоритм против алгоритма «разделяй и властвуй» против динамического алгоритма:

Сл.№ Жадный алгоритм Разделяй и властвуй Динамическое программирование
1 Следует подходу «сверху вниз» Следует подходу «сверху вниз» Применяет подход «снизу вверх»
2 Используется для решения задачи оптимизации Используется для решения проблемы принятия решения Используется для решения задачи оптимизации
3 Оптимальное решение генерируется без повторного обращения к ранее сгенерированным решениям; таким образом, он избегает повторного вычисления Решение подзадачи вычисляется рекурсивно более одного раза. Решение подзадач вычисляется один раз и сохраняется в таблице для дальнейшего использования.
4 Он может генерировать или не генерировать оптимальное решение. Используется для получения решения поставленной задачи, не стремится к оптимальному решению Он всегда генерирует оптимальное решение.
5 Итеративный характер. Рекурсивный характер. Рекурсивный характер.
6 эффективно и быстро, чем разделяй и властвуй. менее эффективен и медленнее. эффективнее и быстрее, чем жадный.
7 дополнительная память не требуется. требуется некоторая память. требуется больше памяти для хранения подзадач для последующего использования.
8 Примеры: задача о дробном рюкзаке,
Проблема выбора деятельности,
Проблема последовательности выполнения заданий.
Примеры: сортировка слиянием,
Быстрая сортировка,
Умножение матриц Штрассена.
Примеры: 0/1 Рюкзак,
Все пары кратчайший путь,
Матрично-цепочное умножение.