ycliper

Популярное

Музыка Кино и Анимация Автомобили Животные Спорт Путешествия Игры Юмор

Интересные видео

2025 Сериалы Трейлеры Новости Как сделать Видеоуроки Diy своими руками

Топ запросов

смотреть а4 schoolboy runaway турецкий сериал смотреть мультфильмы эдисон
Скачать

Задача: "Три подружжя". Пролог vs Гаскелл

Автор: SunSay, Сенсей, Sensei

Загружено: 2026-02-07

Просмотров: 13

Описание: Задача "Три подружжя"

Задача про три подружжя (відоміша як Jealous Husbands problem) є класичною логічною задачею з обмеженнями. У ній три подружні пари мають переправитися через річку за допомогою човна, який може перевозити одну або дві людини. Основне обмеження полягає в тому, що жодна жінка не може залишатися на одному березі з чужими чоловіками, якщо її власного чоловіка на цьому березі немає.

З формальної точки зору задача полягає в пошуку послідовності допустимих станів, що переводить систему з початкової конфігурації (усі люди та човен на лівому березі) у цільову (усі люди на правому березі), не порушуючи заданих умов безпеки на жодному з кроків.

Історичний контекст
Задача має давнє походження і зустрічається ще в середньовічних збірниках логічних задач, зокрема у працях Алкуїна Йоркського (VIII століття). У різних варіаціях вона відома також як задача про братів і сестер або ревнивих чоловіків. У сучасному контексті ця задача часто використовується як навчальний приклад для демонстрації пошуку в просторі станів, формалізації обмежень та застосування алгоритмів BFS і DFS.

Можливі підходи до реалізації та вибір BFS
Задачу можна реалізувати різними способами та різними мовами програмування:
декларативно (наприклад, у Prolog), задаючи правила і дозволяючи системі автоматично шукати розв’язок;
імперативно або функціонально, явно моделюючи стани, переходи між ними та алгоритм пошуку;
із застосуванням пошуку в глибину (DFS) або пошуку в ширину (BFS).

У цій роботі було обрано пошук у ширину (BFS), оскільки він гарантує знаходження найкоротшого розв’язку за кількістю кроків. Для даної задачі це принципово важливо, адже кожен крок відповідає реальній переправі човна, і оптимальність рішення є чітко визначеною.

Опис BFS і його використання в роботі
Алгоритм BFS розглядає задачу як граф станів, де:
вершини — це допустимі конфігурації (стани) системи;
ребра — це допустимі переходи між станами за один крок.

У реалізації кожен стан описується типом State, який містить:
положення човна;
списки людей на лівому та правому берегах.

Пошук починається з початкового стану і поступово розширюється рівень за рівнем. Для уникнення зациклення використовується множина вже відвіданих станів (Set). Для коректного відновлення шляху застосовується parent-map, який зберігає для кожного нового стану батьківський стан та набір пасажирів, що був перевезений на відповідному кроці.

Після досягнення цільового стану шлях відновлюється у зворотному напрямку — від цілі до старту — і формується впорядкована послідовність кроків.

Особливості та сильні сторони реалізації
Ключовою особливістю цієї роботи є чітке розділення логічних компонентів задачі:
Явне представлення станів Стани моделюються окремим типом з семантичними полями, що робить модель зрозумілою та типобезпечною.
Окрема функція neighbors Вона формалізує поняття одного кроку — генерацію всіх допустимих наступних станів з поточного. Це дозволяє розглядати задачу саме як пошук у графі.
Канонізація станів Списки людей на берегах сортуються, що гарантує унікальність представлення однакових конфігурацій і коректну роботу множини visited.
Ефективні структури даних Використання Set для відвіданих станів і Sequence як черги відповідає класичній реалізації BFS і покращує ефективність алгоритму.
Чистота та відсутність побічних ефектів Уся логіка побудована у функціональному стилі, без мутабельного стану.

Результат роботи програми
У результаті виконання програма знаходить коректний та найкоротший розв’язок задачі. Вивід містить покроковий опис:
номер кроку;
положення човна;
списки людей на кожному березі;
пасажирів, які були перевезені на даному кроці.
Фінальний стан підтверджує, що всі шість людей успішно переправлені на правий берег без порушення умов безпеки.

Джерела
1. Bratko, I. "Prolog Programming for Artificial Intelligence" — Chapter 11-12: Planning and Search
2. Nilsson, N. "Principles of Artificial Intelligence" — Chapter 2: Problem Solving
3. Clocksin, W., Mellish, C. "Programming in Prolog" — Chapter 7: More Example Programs

НаУКМА, ф-т Інформатики
Студенти:
© Дем`янік Катерина (https://github.com/logic-programming-...) Пролог + Гаскелл
© Самсоненко Катерина (kate-lp-three-couples/ at main · Kate-Samsonenko/kate-lp-three-couples) Гаскелл
© Шалаєв Андрій (https://github.com/logic-programming-...) Python
© Ющенко Юрій Олексійович - доцент, к.ф.-м.н.

Не удается загрузить Youtube-плеер. Проверьте блокировку Youtube в вашей сети.
Повторяем попытку...
Задача: "Три подружжя". Пролог vs Гаскелл

Поделиться в:

Доступные форматы для скачивания:

Скачать видео

  • Информация по загрузке:

Скачать аудио

Похожие видео

Надоели файлы? Вот, пожалуйста, сокеты • C • Live coding

Надоели файлы? Вот, пожалуйста, сокеты • C • Live coding

Дії з множинами-списками в Prolog та порівняння з SQL, Haskell і Python. Реляційне ділення.

Дії з множинами-списками в Prolog та порівняння з SQL, Haskell і Python. Реляційне ділення.

Пространство вариантов: аномалии, которые не укладываются в модели

Пространство вариантов: аномалии, которые не укладываются в модели

Вся IT-база в ОДНОМ видео: Память, Процессор, Код

Вся IT-база в ОДНОМ видео: Память, Процессор, Код

Теоретико-множинні операції та операції алгебри Кодда мовою Prolog на прикладі

Теоретико-множинні операції та операції алгебри Кодда мовою Prolog на прикладі "Родинні відношення"

Логічне програмування в обмеженнях clp(fd)

Логічне програмування в обмеженнях clp(fd)

10 возможностей Python, которые вы не используете (но действительно должны)

10 возможностей Python, которые вы не используете (но действительно должны)

Вся необходимая для ИИ/машинного обучения математика объяснена за 5 минут (полный план развития).

Вся необходимая для ИИ/машинного обучения математика объяснена за 5 минут (полный план развития).

Гипотеза Какея (не смеяться, это серьёзная математика) | LAPLAS

Гипотеза Какея (не смеяться, это серьёзная математика) | LAPLAS

ChatGPT продает ваши чаты, Anthropic создает цифровых существ, а Маск как всегда…

ChatGPT продает ваши чаты, Anthropic создает цифровых существ, а Маск как всегда…

ГОЛ ТРУБІНА досі палає. РЕАКЦІЯ світу і недругів на історичну гру українського воротаря!

ГОЛ ТРУБІНА досі палає. РЕАКЦІЯ світу і недругів на історичну гру українського воротаря!

Граница вычислений

Граница вычислений

Если у тебя спросили «Как твои дела?» — НЕ ГОВОРИ! Ты теряешь свою силу | Еврейская мудрость

Если у тебя спросили «Как твои дела?» — НЕ ГОВОРИ! Ты теряешь свою силу | Еврейская мудрость

Вселенная состоит из информации? Объясняю на пальцах

Вселенная состоит из информации? Объясняю на пальцах

Замах на ТОП ГЕНЕРАЛА ГРУ у Москві! Хто наступний? Труханов хоче до Кобзона. Вата Одеси. Корчинський

Замах на ТОП ГЕНЕРАЛА ГРУ у Москві! Хто наступний? Труханов хоче до Кобзона. Вата Одеси. Корчинський

Как на самом деле работают адвокаты в России | Суд и уголовные дела изнутри

Как на самом деле работают адвокаты в России | Суд и уголовные дела изнутри

Google Colab для начинающих пользователей Python — наглядное объяснение.

Google Colab для начинающих пользователей Python — наглядное объяснение.

Там, где ветер рисует воду — озеро Лох-Корриб, графство Голуэй, Ирландия

Там, где ветер рисует воду — озеро Лох-Корриб, графство Голуэй, Ирландия

Но что такое нейронная сеть? | Глава 1. Глубокое обучение

Но что такое нейронная сеть? | Глава 1. Глубокое обучение

Jak Mike Tyson rozbijał ringowych kolosów

Jak Mike Tyson rozbijał ringowych kolosów

© 2025 ycliper. Все права защищены.



  • Контакты
  • О нас
  • Политика конфиденциальности



Контакты для правообладателей: [email protected]