Опришник писал(а):tyomitch писал(а):Опришник писал(а):Дерево - это связанный граф не имеющий циклов.
Двоичное дерево это дерево у которого для каждой вершины максимальное количество детей - 2.
Не так. У двоичного дерева различаются левый и правый потомок. Т.ч. двоичное дерево - это не частный вид дерева, и даже не граф.
Левый и правый потомок - это всего лишь интерпретация, с помощью которой легче понимаются алгоритмы, и которая никакой роли не играет.
Обращение порядка
всех потомков - да, не играет.
Некоторых - совершенно меняет всю картину. Представь себе отсортированное дерево (каждый узел больше своего левого потомка и меньше правого), в нём поиск занимает O(log N) времени
именно благодаря тому, что потомки упорядочены.
Опришник писал(а):А можно вопрос, а почему не граф? (не говоря уже о дереве) Или контр-пример можно? (двоичное дерево ведь вписуется в определение графа)
Блин. Если у графа (или дерева) произвольным образом переставить вершины, получим тот же самый граф (дерево).
Если у B-дерева некоторым образом переставить вершины, получим новое B-дерево.
Пример:
- Код: Выделить всё
1 3 1
/ \ / / \
2 3 1 3 2
/
2
Если трактовать эти картинки как изображения графов (деревьев), то это один и тот же объект. Если как изображения B-деревьев - то три разных объекта.
Поэтому B-дерево - не граф (и не дерево).
Опришник писал(а):tyomitch писал(а): Возможно, есть какой-то конкретный алгоритм, называемый "метод графа". Возможно, даже не один.
Ладна, твоя взяла, я просто не подумал что может быть есть класс CGraph в котором как методы реализованны некоторые алгоритмы...
