С Новым годом! Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/47: Рейтинг темы: голосов - 47, средняя оценка - 4.74
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 104
1

Что такое приближенный алгоритм и в чем отличие от эвристического или жадного?

11.08.2015, 19:21. Показов 9743. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Правильно ли я понимаю, что приближенный алгоритм - это алгоритм, который всегда дает почти точное решение и его точность доказана, в то время как эвристический - это тоже приближенный, но его точность не доказана и в некоторых случаях могут получаться совершенно не приближенные результаты или даже не оптимальные? В то время как жадный выбирает локально оптимальные решения, и так же может давать точный, приближенный или даже самый не оптимальный результат?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.08.2015, 19:21
Ответы с готовыми решениями:

Нюансы использования оператора запятая или что такое UB и с чем его едят
Почему студия и ideone выдают разные значения для a и b? в студии выходит a = 10 , b = 10 в...

DrawingVisual, что это такое и с чем его едят, или как перерисовать
Суть: есть Canvas (с координатами x) на котором рисуются DrawingVisual'ы, далее делается замена...

Что такое TableAdapterManager и TableAdapter и в чём их отличие?
Не могу понять что такое TableAdapterManager и TableAdapter в чём их отличие?

Что такое Container и OWNER и в чём отличие от PARENT
Поискал инфу в интернете, но внятное объяснение найти не смог, на счёт разницы между Parent и...

6
2769 / 1817 / 200
Регистрация: 05.06.2011
Сообщений: 5,264
11.08.2015, 19:40 2
Про жадный — приблизительно так, если я сам понимаю. Насчёт точного, приближённого и т.п. — не совсем. Насколько я знаю, есть задачи, решаемые жадным алгоритмом и не решаемые. Встречал термин только в отношении комбинаторики, там нет приближённых результатов. Либо даёт ответ, либо не даёт.
Эвристический, то, что встречал — неполный, что ли. Вот, например, задача о рюкзаке. Решается полным перебором, но можно ускорить некоторыми приёмами. Иногда условия выполняются и приём работает (ускоряет, в данном случае, перебор). Иногда условия не выполняются и приём неприменим.
Приближённый алгоритм — как термин не встречал. Есть алгоритмы, находящие приближение к результату, но приближёнными их не называют.
1
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,163
Записей в блоге: 24
12.08.2015, 18:04 3
Лучший ответ Сообщение было отмечено kquick как решение

Решение

iifat, я понял, о чём спрашивается в теме!

Под приближенными алгоритмами (решениями) понимаются такие алгоритмы для решения комбинаторных задач, которые возвращают вариант, отличающийся от оптимального не более, чем на определённую погрешность. Например, задачу коммивояжера можно заменить такой: «найти какой-либо гамильтонов цикл, длина которого отличается от длины оптимального гамильтонового цикла не более, чем на m%». Если для данной задачи найдётся алгоритм, который может решить задачу с указанной точностью за меншее время или с лучшей сложностью решения, чем любой алгоритм, находящий точное решение (т.е. m=0), то такой алгоритм будет приближенным.

Кстати, ты точно не встречал подобных алгоритмов?
1
2769 / 1817 / 200
Регистрация: 05.06.2011
Сообщений: 5,264
12.08.2015, 19:28 4
Цитата Сообщение от Mysterious Light Посмотреть сообщение
подобных алгоритмов
Подобных — наверняка встречал. Один даже писал. Разбивал .zip-файл на дискеты, многотомных архивов тогда ещё не было. Вот названия «приближённые алгоритмы» в этом смысле не помню. Хотя и не возражаю — название вполне подходит
1
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 104
14.08.2015, 12:44  [ТС] 5
Цитата Сообщение от Mysterious Light Посмотреть сообщение
приближенными алгоритмами
Что тогда насчет эвристических и жадных? Чем они отличаются?

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

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

Правильно ?

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

Тогда получается, что всякий жадный алгоритм - это частный случай эвристического?

Жадный:
- нет строго обоснования (не доказан, а может быть и доказан в отличии от эвристического)
- приемлемые результаты в большинстве случаев (самый неоптимальный быть не может, поскольку принимаются локально оптимальные решения)
Вот опять же. Взять тот же алгоритм муравья. Он же жадный? Но в связи с элементом случайности может выдать самый плохой результат (маловероятно, но все же). Получается, что второе утверждение про жадный не верно и он просто эвристический?
0
2769 / 1817 / 200
Регистрация: 05.06.2011
Сообщений: 5,264
14.08.2015, 13:26 6
Не, вот тут куда-то не туда тебя понесло.
Жадный алгоритм — вполне себе доказан. Собственно, «жадный алгоритм» — это не конкретный алгортм, жадность это свойство алгоритма (принимать оптимальные локальные решения на каждом этапе). Некоторые задачи решаются жадным алгоритмом, некоторые нет. И то, и другое надо доказывать. Задача коммивояжера относится к нерешаемым этим алгоритмом.
Цитата Сообщение от kquick Посмотреть сообщение
- нет строгого обоснования (не доказан)
Как-то жестоко Вот, посмотри Википедию, например. Совсем уж недоказанный алгоритм и применять-то страшно. Нет полного доказательства. Ну вот, к примеру, задача о рюкзаке. Решаем полным перебором; а теперь добавим в начало проверку — соберём всё и посмотрим, не поместится ли в рюкзак. По-моему, этот приём заслуживает названия эвристического. Понятно, что если сработает, то здорово ускорит работу алгоритма; но вот оценить вероятность — безнадёга. Всё, как понимаю, предельно доказано, но вот оценить долю решаемых задач невозможно.
1
Модератор
Эксперт функциональных языков программирования
3077 / 2226 / 462
Регистрация: 26.03.2015
Сообщений: 8,634
14.08.2015, 20:42 7
Лучший ответ Сообщение было отмечено kquick как решение

Решение

Между жадным, эвристическим и приближенным алгоритмом нет взаимно однозначного соответствия.

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

Пример 1.
Есть N предметов разного веса и разной стоимости. Нужно выбрать n предметов так, чтобы суммарная стоимость была как можно больше.
Жадный алгоритм (на каждом шаге выбираем самый дорогой предмет) даёт оптимальное решение.

Пример 2.
Есть N предметов разного веса и разной стоимость. Нужно выбрать предметы общим весом не больше G так, чтобы суммарная стоимость была как можно больше.
Жадный алгоритм (на каждом шаге выбираем предмет с самой большой удельной - цена/вес - стоимостью) не даёт оптимальное решение. Более того, получаемое решение может во сколько угодно раз отличаться от оптимального. (Суммарный вес X, предметы: {вес 1, цена 1}, {вес X, цена X/2}. Жадным алгоритмом получаем суммарную цену 1.)

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

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

Пример 3.
Найти кратчайший путь между двумя точками (на графе).
Жадный алгоритм (на каждом шаге выбираем узел, который ближе всего к цели).
Жадный эвристический алгоритм (на каждом шаге выбираем узел так, чтобы минимизировать эвристическую функцию).
Пусть, например, граф состоит из 4х точек S, A, B, F и 4х рёбер: [SA] = 1, [SB] = 100, [AF] = 5, [BF] = 1. Предложенный жадный алгоритм на первом шаге выбирет точку B, так как она ближе к цели. Итоговый путь 101.
Если в качестве эвристики взять пройденный путь + расстояние по прямой до цели, то жадный эвристический алгоритм выберет на первом шаге точку A, так как эвристика (1+5 < 100 + 1).
Можно использовать поиск в ширину и найти точное решение. При этом можно использовать описанную выше эвристическую функцию для задания приоритета на каждом шаге. У нас будет эвристический алгоритм, находящий точное решение, но работающий быстрее, чем просто поиск в ширину.
1
14.08.2015, 20:42
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2015, 20:42
Помогаю со студенческими работами здесь

В чем отличие и что лучше изучать???
Вот есть язык программирования C, есть C++, есть C#, есть 1С. Так вот какой из них лучше учить

Core i5-3470 или Xeon L5410: в чем отличие
правильно ли я понимаю, что Core i5-3470 снабжен дополнительно видеоядром Intel HD Graphics 2500?...

Как такое проделать с мемо? или что подходит под такое?
Привет всем! Как сделать такое? и на чем лучше мемо,листбокс.... или просто как вставить...

Приближенный алгоритм. Грузовики и камни
Подскажите алгоритм, ибо мой не проходит по времени(ограничения 1 секунда). Я делал так:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru