В чем разница между жадным и эвристическим алгоритмом?

в чем разница между жадным и эвристическим алгоритмом?

Я прочитал несколько статей об аргументе, и мне кажется, что они более или менее одинаковы, поскольку их основная характеристика-выбрать лучший (локальный) вариант на каждой итерации для решения проблемы.

5 ответов


способ, которым эвристика была описана мне, заключается в том, что они являются "эмпирическими правилами". Их способность производить глобально оптимальное решение не может быть непосредственно доказуемой, но, как правило, они делают хорошую работу. Они часто используются, когда стоимость определения оптимального решения слишком высока. Кроме того, эвристика часто кодирует определенный опыт решения проблемы в прошлом. Лучший способ описать эвристику - это "стратегия решения".

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

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

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

закруглялись...

  • все эвристики, жадные алгоритмы - нет

  • все жадные алгоритмы, эвристика-в общем, да.

чтобы помочь обеспечить некоторый фон, одна из первых проблем, которую я преподавал в своем классе алгоритмов в университете был Задача Коммивояжера. Он относится к NP-полному классу задач, что означает отсутствие эффективных средств решения. То есть по мере того, как размер проблемы растет, время, необходимое для поиска решения, существенно растет. Существует ряд доказуемых алгоритмов, но их производительность невелика, и в реальных приложениях мы склонны отдавать предпочтение эвристике (которая включает жадные алгоритмы - см. ссылку).


их основная характеристика-выбрать лучший (локальный) вариант на каждой итерации

Не совсем верно для эвристики. Эвристические алгоритмы делают выбор, который, как известно, является неоптимальным в теории, но был доказан на практике для получения разумных результатов. эвристика обычно найти примерное устранение:

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

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

в области информатики искусственного интеллекта генетический алгоритм (GA) - это поисковая эвристика, имитирующая процесс естественного отбора.


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

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


Это две разные вещи: жадные алгоритмы пытаются взять "лучший выбор" на каждой итерации (например, если вы выбираете ребра в графике по их длине, он выберет самое длинное/кратчайшее ребро, возможное на каждой итерации). Жадные алгоритмы дают точное решение!

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


обратите внимание: Я не уверен, что следующее относится ко мне и моему "социальному кругу" или является стандартной глобальной концепцией.

на мой взгляд, эвристический алгоритм, как говорит Википедия:

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

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