В чем разница между структурой данных Tree и Graph?

С академической точки зрения, в чем принципиальная разница между структурой данных Tree и Graph? А как насчет поиска по дереву и поиска по графику?


person user918304    schedule 14.09.2011    source источник


Ответы (11)


Дерево - это просто ограниченная форма графа.

Деревья имеют направление (отношения родитель / потомок) и не содержат циклов. Они подходят для категории направленных ациклических графов (или DAG). Итак, деревья - это группы доступности базы данных с ограничением, что у дочернего элемента может быть только один родитель.

Важно отметить одну вещь: деревья не являются рекурсивной структурой данных. Они не могут быть реализованы в виде рекурсивной структуры данных из-за указанных выше ограничений. Но также можно использовать любую реализацию DAG, которая обычно не является рекурсивной. Моя предпочтительная реализация Tree представляет собой централизованное представление карты и не является рекурсивным.

Графики обычно ищутся в ширину или в глубину. То же самое и с деревом.

person user785287    schedule 10.10.2011
comment
Графики очень полезны и могут использоваться для моделирования огромного количества вещей. Многие другие структуры данных можно рассматривать как график с ограничениями. Например, односвязный список - это особый случай группы доступности базы данных. - person J.R. Garcia; 27.07.2012
comment
@ user785287 что вы подразумеваете под централизованным представлением карты? - person Geek; 27.03.2013
comment
Деревья не являются рекурсивной структурой данных, это вводит в заблуждение и неверно. Дерево может быть представлено нерекурсивной структурой данных (например, массивом ребер; полное дерево, подобное тому, что лежит в основе двоичной кучи, может быть очень компактно представлено в виде массива; есть другие < i> сжатые представления и т. д. и т. д.), но, вероятно, наиболее популярным и полезным способом их представления является использование рекурсивной структуры, основанной на указателях. Представление не является уникальным для некорневых деревьев, но это несущественно. - person j_random_hacker; 07.07.2014
comment
Не совсем. У деревьев не обязательно есть направление. en.wikipedia.org/wiki/Tree_(graph_theory) показывает пример дерево без направления. Они часто используются в биологических контекстах. - person Michal Palczewski; 21.11.2015
comment
В статье в Википедии о дереве говорится, что дерево является неориентированным графом, но все ответы на этой странице говорят о направленном, может ли кто-нибудь объяснить несоответствие? en.wikipedia.org/wiki/Tree_(graph_theory) - person harshpatel991; 09.04.2018
comment
Деревья @ harshpatel991 не имеют направления в том смысле, что: X и Y находятся в отношениях родитель-потомок, не имеют направления. Однако индивидуальные отношения, X - потомок Y, а Y - потомок X, являются направленными отношениями. Направление указывает именно на это; направление «движения». В деревьях идея направления на самом деле не нужна, если она не имеет смысла (что чаще всего случается с деревьями). По крайней мере, я так к этому отношусь. - person Kostas Mouratidis; 11.06.2018
comment
Дерево может быть рекурсивным, но его рекурсия всегда может быть представлена ​​циклом и всегда завершается, тогда как рекурсия некоторых рекурсивных графов может не завершаться и не может быть сведена к циклу. - person Mateja Petrovic; 13.01.2019
comment
@ harshpatel991 Хороший момент, но дерево в контексте информатики чаще всего относится к дереву в контексте теории графов, которое является дополнительно направленным и корневым (ориентированное корневое дерево). Об этом говорится в опубликованной вами статье в третьем абзаце. - person Niko Bellic; 13.07.2020
comment
Можете ли вы пояснить, что вы имеете в виду под деревьями, которые не могут быть реализованы как рекурсивная структура данных? Часто бывает, что класс узла указывает на список узлов (тот же тип класса узла), который я бы считал рекурсивным. - person Charlie Parker; 07.05.2021

Вместо того, чтобы объяснять, я предпочитаю показывать это в картинках.

Дерево в реальном времени

Дерево в реальном времени

Использование графика в реальной жизни

График в реальном времени

Да, карту можно представить в виде графической структуры данных.

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

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

электрическая принципиальная схема, план дома, компьютерная сеть или речная система - еще несколько примеров графиков. Многие примеры из реального мира можно рассматривать как графики.

Техническая схема может быть такой

Дерево:

введите описание изображения здесь

График:

введите описание изображения здесь

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

Использованная литература :

  1. http://www.introprogramming.info/english-intro-csharp-book/read-online/chapter-17-trees-and-graphs/#_Toc362296541

  2. http://www.community-of-knowledge.de/beitrag/data-trees-as-a-means-of-presenting-complex-data-analysis/

  3. Википедия

person mk..    schedule 07.01.2015

Другие ответы полезны, но в них отсутствуют свойства каждого из них:

График

Ненаправленный граф, источник изображения: Википедия

Направленный граф, источник изображения: Википедия

  • Состоит из набора вершин (или узлов) и набора ребер, соединяющих некоторые или все из них.
  • Любое ребро может соединить любые две вершины, которые еще не соединены одним и тем же ребром (в том же направлении, в случае ориентированного графа)
  • Не обязательно должен быть связан (ребра не обязательно должны соединять все вершины вместе): один граф может состоять из нескольких несвязных наборов вершин.
  • # P6 #
    # P7 #

Дерево

Источник изображения: Википедия

  • Тип графика
  • Вершины чаще называют «узлами».
  • Ребра направлены и представляют собой отношения "является дочерним элементом" (или "является родительским элементом").
  • Каждый узел (кроме корневого) имеет ровно одного родителя (и ноль или более дочерних узлов)
  • Имеет ровно один "корневой" узел (если в дереве есть хотя бы один узел), который является узлом без родителя.
  • Должен быть подключен
  • Является ацикличным, то есть не имеет циклов: «цикл - это путь [AKA sequence ] ребер и вершин, в которых вершина достижима из себя "

Вышеупомянутые свойства частично совпадают. В частности, последние два свойства подразумеваются остальными свойствами. Но все же стоит отметить их все.

person Bernhard Barker    schedule 30.04.2019
comment
Картинки сделали это настолько простым для понимания! - person Raghav Gupta; 21.10.2020

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

В графе может быть более одного пути, т.е. граф может иметь однонаправленные или двунаправленные пути (ребра) между узлами.

Также вы можете увидеть более подробную информацию: http://freefeast.info/difference-between/difference-between-trees-and-graphs-trees-vs-graphs/

person Bipon Biswas    schedule 08.05.2017

Деревья очевидны: это рекурсивные структуры данных, состоящие из узлов с дочерними элементами.

Карта (она же словарь) - это пары ключ / значение. Дайте карте ключ, и она вернет связанное значение.

Карты могут быть реализованы с использованием деревьев, надеюсь, вас это не смущает.

ОБНОВЛЕНИЕ: сбивающий с толку «график» для «карты» очень сбивает с толку.

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

Графы могут иметь однонаправленные или двунаправленные пути между узлами, быть циклическими или ациклическими и т. Д. Я бы посчитал графы более сложными.

Я думаю, что беглый поиск в любом приличном тексте структур данных (например, в «Руководстве по разработке алгоритмов») даст больше и более качественной информации, чем любое количество ответов SO. Я бы порекомендовал вам не идти по пассивному пути и начать самостоятельное исследование.

person duffymo    schedule 14.09.2011
comment
Извините, я про график, набрал карту. - person user918304; 15.09.2011
comment
Непонятный график для карты очень сбивает с толку. :) - person cpz; 18.07.2014
comment
Сказать, что графы сложнее деревьев, все равно что сказать, что вороны более специализированы, чем птицы. Не следует ли вместо этого сказать, что все деревья - это графы, но не все графы - деревья? - person dudewad; 30.06.2017
comment
Шесть лет спустя мне все равно. Конечно, здесь ты сможешь лучше провести время. - person duffymo; 30.06.2017

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

В графе каждый узел имеет один или несколько узлов-предшественников и узлов-преемников. График просматривается с использованием алгоритмов поиска в глубину (DFS) и поиска в ширину (BFS). График имеет цикл, поэтому он сложнее дерева. График - это сетевая модель. Есть два вида графов: ориентированные графы и неориентированные графы.

person Community    schedule 31.10.2018
comment
Узлы дерева могут иметь ноль или несколько узлов-преемников, а не только один или два. Бинарное дерево ограничивает количество наследников / дочерних элементов до 2, но каждое дерево имеет листовые узлы без дочерних элементов. - person Aaron; 29.11.2020

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

person patel dhruv    schedule 24.07.2020

Дерево - это такой орграф, что:

а) со снятыми краевыми направлениями он связан и ацикличен

  1. Вы можете удалить либо предположение, что он ацикличен.
  2. Если это конечно, вы можете в качестве альтернативы удалить предположение, что это связано

б) каждая вершина, кроме одной, корня, имеет степень 1

в) корень имеет степень 0

  1. Если существует только конечное число узлов, вы можете удалить либо предположение, что корень имеет степень 0, либо предположение, что узлы, отличные от корня, имеют степень 1.

Ссылка: http://www.cs.cornell.edu/courses/cs2800/2016sp/lectures/lec27-29-graphtheory.pdf

person BPL    schedule 01.06.2018

В математике граф - это представление набора объектов, в котором некоторые пары объектов связаны ссылками. Взаимосвязанные объекты представлены математическими абстракциями, называемыми вершинами, а связи, которые соединяют некоторые пары вершин, называются ребрами. [1] Обычно граф изображается в схематической форме как набор точек для вершин, соединенных линиями или кривыми для ребер. Графы - один из объектов изучения дискретной математики.

person Narender sharma    schedule 06.03.2013

один корневой узел в дереве и только один родитель для одного ребенка. Однако нет понятия корневого узла. Другое отличие состоит в том, что дерево - это иерархическая модель, а граф - сетевая модель.

person Rajan Kumar Kharel    schedule 09.02.2014

Простая концепция: Дерево не имеет цикла и его однонаправленность, тогда как График формирует цикл, и он будет двунаправленным в некоторых случаях и однонаправленным в другом.

person Velkumaran A P    schedule 13.02.2021