Какие проблемы можно решить или решить проще, используя графы и деревья?

Какие наиболее распространенные проблемы можно решить с помощью обеих этих структур данных?

Было бы хорошо, если бы я получил рекомендации по книгам, которые:

  • Реализуйте конструкции
  • Реализуйте и объясните логику алгоритмов, которые их используют.

Ответов (10)

Решение

Первое, о чем я думаю, когда читаю этот вопрос: какие типы вещей используют графы / деревья? а затем я думаю о том, как я мог бы их использовать.

Например, возьмем два распространенных использования дерева:

  • ДОМ
  • Файловые системы

DOM и XML в этом отношении напоминают древовидные структуры.
альтернативный текст

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

Вы также должны спросить себя: попадают ли данные в такую ​​структуру? Создайте структуры данных, которые имеют смысл для проблемы, а остальное приложится.

Насколько проще, я думаю, что это относительно. Вы хорошо разбираетесь в рекурсивных функциях для обхода дерева / графика? Что делать, если вам нужно сбалансировать дерево?

Подумайте о программе, которая решает головоломку с поиском слов. Вы можете отобразить все буквы слова поиска в граф и проверить окружающие узлы, чтобы увидеть, соответствует ли эта строка какому-либо из слов. Но не могли бы вы сделать то же самое с одним массивом? Все, что вам действительно нужно сделать, это переместить индекс, чтобы проверять буквы слева и справа, и по ширине, чтобы проверять над и под буквами. Решить эту проблему с помощью графика несложно, но это может создать много дополнительной работы и затруднений, если вам неудобно их использовать - конечно, это не должно отговаривать вас от этого, особенно если вы изучаете их.

Надеюсь, это поможет вам задуматься об этих структурах. Что касается рекомендации по книге, я бы остановился на « Введении в алгоритмы» .

Деревья гораздо чаще используются в языках функционального программирования из-за их рекурсивной природы.

Кроме того, графики и деревья - хороший способ смоделировать множество проблем ИИ.

В моем университете есть курс для таких вещей: CSE 326 . Я не думал, что книга была слишком полезной, но проекты веселые и научат вас немного о реализации некоторых из более простых структур.

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

Алгоритмы для Java: часть 5 Роберта Седжвика посвящена алгоритмам графов и структурам данных. Это будет хорошая первая книга для работы, если вы хотите реализовать некоторые алгоритмы графов.

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

Графики сцены обычно имеют несколько слоев и атрибутов, что означает, что вы можете рисовать только некоторые узлы графа (атрибуты) в указанном порядке (слои). В зависимости от типа графа сцены он может иметь две параллельные структуры: объявления и создание экземпляров. Чт

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

@DavidJoiner / все:

FWIW: Новая версия Руководства по разработке алгоритмов должна выйти в ближайшее время.

Весь курс, для которого профессор Скиена разработал эту книгу, также доступен в Интернете:

http://www.cs.sunysb.edu/~algorith/video-lectures/2007-1.html

Принципиальные схемы.

Компиляция (Направленные ациклические графы)

Карты. Очень компактный, как графики.

Проблемы с сетевым потоком.

Деревья решений для экспертных систем (sic)

Диаграммы Fishbone для поиска неисправностей, улучшения процесса, анализа безопасности. Для получения бонусных баллов реализуйте код восстановления после ошибок в виде объектов, представляющих собой диаграмму «рыбья кость».

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

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

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