Программирование на языке Ruby
Шрифт:
Не будем объяснять принцип работы алгоритма, интересующийся читатель может найти описание в любой книге по дискретной математике. Но в листинге 9.4 приведена его реализация на Ruby.
В примере упомянут метод
Можно было бы усовершенствовать этот алгоритм, так чтобы он находил все связные компоненты несвязного графа. Но мы не станем этого делать.
9.4.3. Есть ли в графе эйлеров цикл?
Нет такой отрасли математики, сколь угодно абстрактной, которая со временем не нашла бы применения в реальной жизни.
Иногда нужно знать, есть ли в графе эйлеров цикл. Термин связан с математиком Леонардом Эйлером, который основал область топологии, занимающуюся этим вопросом. (Графы, обладающие таким свойством, называют иногда уникурсивными, поскольку их можно нарисовать не отрывая карандаша от бумаги и не проходя дважды по одному и тому же ребру.)
В немецком городе Кенигсберг был остров посередине реки. С двумя берегами остров связывало семь мостов. Горожане хотели знать, можно ли обойти город так, чтобы побывать на каждом мосту ровно один раз и вернуться в исходную точку. В 1735 году Эйлер доказал, что это невозможно. Эта классическая задача стала первой проблемой теории графов.
Как часто бывает в жизни, решение кажется простым, когда оно найдено. Оказалось, что для существования в графе эйлерова цикла необходимо и достаточно, чтобы все вершины имели четную степень. Вот короткий код, проверяющий выполнение этого свойства:
9.4.4. Есть ли в графе эйлеров путь?
Эйлеров путь и эйлеров цикл — разные вещи. Слово «цикл» подразумевает, что нужно вернуться в исходную точку. А наличие пути предполагает, что нужно лишь посетить каждую вершину ровно один раз. В следующем фрагменте демонстрируется это различие:
9.4.5. Инструменты для работы с графами в Ruby
В сообществе пользователей Ruby известно несколько таких инструментов. Они в большинстве своем имеют ограниченную функциональность и предназначены для работы с ориентированными или неориентированными графами. Поищите эти инструменты в архиве RAA или на сайте Rubyforge . Называются они как-то вроде RubyGraph, RGraph, GraphR и по большей части еще не достигли зрелости.
Княжий пир
1. Княжеский пир
Фантастика:
фэнтези
рейтинг книги
На Берлин!
2. Моё пространственное убежище
Фантастика:
фэнтези
боевая фантастика
рпг
постапокалипсис
рейтинг книги
История Древнего мира. От истоков Цивилизации до падения Рима
Страницы истории
Научно-образовательная:
история
рейтинг книги
Черный Маг Императора 5
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
рейтинг книги
Сирота
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
рейтинг книги
Эволюционер из трущоб. Том 4
4. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
рейтинг книги
Защитник
11. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
рейтинг книги
Локки 4 Потомок бога
4. Локки
Фантастика:
аниме
фэнтези
рейтинг книги
Властелин Севера
3. Саксонские хроники
Приключения:
исторические приключения
рейтинг книги
Сталин
3. Загадки жизни и смерти
Проза:
историческая проза
рейтинг книги
История человечества. Россия
Научно-образовательная:
история
рейтинг книги
Черная метка
7. Гибрид
Фантастика:
технофэнтези
аниме
фэнтези
попаданцы
рейтинг книги
Двенадцатая реинкарнация. Трилогия
Фантастика:
боевая фантастика
рейтинг книги
Linux Mint и его Cinnamon. Очерки применителя
Компьютеры и Интернет:
ос и сети
рейтинг книги