Примеры реального мира древовидных структур

Чтобы получить общее представление о том, сколько студентов обучаются на курсах с младшим преподавателем:

SELECT t.id, count(distinct s.id) filter (WHERE s.age > t.age)
FROM teacher t
JOIN course c ON (t.id = c.course_teacher)
JOIN enrolment e ON (e.course = c.id)
JOIN student s ON (s.id = e.student)
GROUP BY 1;

... предоставит что-то вроде:

 id | count 
----+-------
  1 |     3
  2 |     1
  3 |     0
...

Если вы хотите больше понимание, просто добавьте к нему курс, например:

SELECT t.id, t.name, c.id, c.title, count(s.*) filter (WHERE s.age > t.age)
FROM teacher t
JOIN course c ON (t.id = c.course_teacher)
JOIN enrolment e ON (e.course = c.id)
JOIN student s ON (s.id = e.student)
GROUP BY 1, 2, 3, 4;

... в результате:

 id |       name       | id |  title  | count 
----+------------------+----+---------+-------
  1 | Donata Barna     |  1 | Maths   |     3
  3 | Katsurou Plourde |  3 | History |     0
  2 | Natela Kardos    |  2 | Physics |     1
...

... и если вам нужно знать, какие студенты старше их учитель, в котором курс (ы), используйте это:

SELECT s.id, s.name, array_agg(c.title) filter (WHERE s.age > t.age)
FROM teacher t
JOIN course c ON (t.id = c.course_teacher)
JOIN enrolment e ON (e.course = c.id)
JOIN student s ON (s.id = e.student)
GROUP BY 1 ORDER BY 1;

... в результате:

 id |       name       |    array_agg    
----+------------------+-----------------
  1 | Oda Peters       | 
  2 | Lourens Strand   | {Maths,Physics}
  3 | Haf Giannopoulos | {Maths}
  4 | Fuat Nervi       | {Maths}
  5 | Hadil Giffard    | 
...

Используемые тестовые данные:

INSERT INTO teacher (id, name, age) VALUES
    (1, 'Donata Barna', 25),
    (2, 'Natela Kardos', 31),
    (3, 'Katsurou Plourde', 53)
;

INSERT INTO student (id, name, age) VALUES
    (1, 'Oda Peters', 19),
    (2, 'Lourens Strand', 32),
    (3, 'Haf Giannopoulos', 29),
    (4, 'Fuat Nervi', 26),
    (5, 'Hadil Giffard', 25)
;

INSERT INTO course (id, title, course_teacher) VALUES
    (1, 'Maths', 1),
    (2, 'Physics', 2),
    (3, 'History', 3)
;

INSERT INTO enrolment (course, student)
SELECT c.id AS course, s.id AS student
FROM generate_series(1,3) AS c(id)
CROSS JOIN generate_series(1,5) AS s(id);
12
задан rjzii 3 March 2009 в 16:25
поделиться

16 ответов

Это хорошо, если примеры являются небольшим разрядным дженериком т.е. касаются графиков и не обязательно к деревьям? Если это, продолжать читать.

  • Само собой разумеется, большинство синтаксических анализаторов XML/Markup использует деревья. Посмотрите Apache Xerces, например. Или, синтаксический анализатор Xalan XSLT. Благодарен за то, что mathewsdave26 напоминает мне!

  • PDF является основанным на дереве форматом. Это имеет a root узел сопровождается a catalog узел (это часто то же), сопровождаемый a pages узел, который имеет несколько детей page узлы. Производители/потребители часто используют реализацию сбалансированного дерева, чтобы хранить документ в памяти.

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

  • Вспышка является библиотекой визуализации, записанной в AS. Можно хотеть проверить, как объекты данных отображаются. В особенности flare.analytics пакет в большой степени использует структуру графика, связующие деревья и т.д.

  • Социальная сеть является текущим модным словечком в исследовании CS. Само собой разумеется, что соединения/отношения очень естественно смоделированы с помощью графиков. Часто, деревья используются для представления/определения более интересных явлений. Как Вы отвечаете на вопросы как "Harry, и у Sally есть какой-либо общий друг (друзья)?"

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

  • Основанное на дереве решений Изучение на самом деле формирует солидную область из исследования анализа данных. Многочисленные известные методы существуют как укладывание в мешки, повышение и модификации этого, которые работают над деревьями. Такая работа часто используется для генерации прогнозирующей модели.

  • Типичная проблема в биоинформатике состоит в том, чтобы искать огромные базы данных для нахождения соответствий для данной строки запроса. Попытки являются обычным явлением там.

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

Простофиля. Посмотрите это и это.

31
ответ дан 2 December 2019 в 02:53
поделиться

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

Я думаю, что этот подход (хотя, возможно, не только двоичные деревья) используется в приложениях искусственного интеллекта также

0
ответ дан 2 December 2019 в 02:53
поделиться

Система. Наборы. Универсальный. SortedList <T> использует дерево двоичного поиска в качестве конкретной реализации. То же верно для Системы. Наборы. GenericSortedDictionary <T>. Любой код с помощью SortedList <T> или SortedDictionary <T> использует дерево двоичного поиска.

1
ответ дан 2 December 2019 в 02:53
поделиться

Запросы DNS.. что-либо с помощью карты использует AVL

1
ответ дан 2 December 2019 в 02:53
поделиться

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

Наша реализация OSPF использовала красно-черные деревья, наша реализация BGP использовала skiplists.

Технически skiplists не являются древовидными структурами, но они на практике очень похожи, и они действительно прохладны.

Мы определенно использовали "кучу", вполне немного также думающую на нем, это было некоторое время, так как я работал там.

1
ответ дан 2 December 2019 в 02:53
поделиться

Мы используем древовидную структуру для моделирования системы классификации детали. Части классифицированы в 'классы', которые имеют родительские классы и так далее. Классы верхнего уровня управляют текстом для вкладок в нашем каталоге UI. Классы также используются, чтобы применить правила оценки, определить 'горячие точки' на механизме, где части отображены в 'конфигураторе' и т.д. Мы моделируем дерево в SQL с помощью вложенных наборов Joe Celko и загружаем их по запросу в память для лучшей производительности. Наиболее распространенные запросы, которые мы делаем, 'кто мои потомки', и 'действительно ли этот класс является моим предком?'

Очень удобно

0
ответ дан 2 December 2019 в 02:53
поделиться

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

Например, в продовольственной продаже в розницу, в корне дерева у Вас могла быть бакалея, которая может выполнить развертку в молочные продукты, фрукты и овощи и т.д. После единственного потока Вы могли иметь. Банки бобов, на верхнем уровне, Вы будете говорить в загрузках грузовика, затем Вы сведетесь к панелям, полям, оловянным размерам. Все различные SKU (единицы хранения запаса) важны для кого-то в хранилище или компании. Затем различные типы бобов, различных поставщиков, производителей - все примеры деревьев для того же размера.

Все различные продукты формируют крупное дерево с различными способами резать и играть в кости.

1
ответ дан 2 December 2019 в 02:53
поделиться

Индексы базы данных обычно хранятся как варианты B* деревья, которые, несмотря на их имя не являются двоичными деревьями.

6
ответ дан 2 December 2019 в 02:53
поделиться

B в индексе B базы данных* деревья обозначает Сбалансированный, не Двоичный. Дерево сохранено на универсальной глубине для обеспечения даже времен доступа.

11
ответ дан 2 December 2019 в 02:53
поделиться

Двоичные деревья использовались для Пространства Paritioning и удаление Невидимой поверхности на 3D играх старых, я полагаю, что каждый использовался в игровой Гибели.

5
ответ дан 2 December 2019 в 02:53
поделиться
  • Запишите простой синтаксический анализатор с рекурсивным спуском и имейте его, генерируют дерево синтаксического анализа.

  • Структура перечня материалов использовала в производстве (как автомобиль, состоит из компонентов, рекурсивно, вниз к основным деталям).

  • Таблица символов (как используется в компиляторе).

  • План счетов, как используется в управлении проектами. Полный проект имеет подпроекты, к которым могут быть применены заряды.

  • Компания организационная структура: подразделения, отделы, и т.д.

  • Оглавление для документа.

  • Потомки человека, предки человека.

  • Любое s-выражение Lisp, включая любую программу Lisp.

4
ответ дан 2 December 2019 в 02:53
поделиться

Опции автоматического заполнения в программном обеспечении (например, поисковая система "предложения", завершение типа/символа IDE, электронная почта и имена адресной книги, и т.д.) часто реализуются как Попытки, которые являются древовидными структурами.

3
ответ дан 2 December 2019 в 02:53
поделиться
  • Ваша файловая система является древовидной структурой. Так проверьте источник к любой свободной файловой системе.

  • Ваш компилятор генерирует AST от Вашего исходного кода как промежуточная стадия. Так проверьте источник к любому бесплатному компилятору.

7
ответ дан 2 December 2019 в 02:53
поделиться

C++ включает много наборов (набор, multi_set, карта, multi_map), которые обычно реализуются как красно-черные деревья, своего рода сбалансированное дерево.

(Стандарт C++ явно не требует этой реализации, но это - самый простой дизайн, который отвечает требованиям сложности.)

1
ответ дан 2 December 2019 в 02:53
поделиться

В ActionScript реализован Treap. Источники:

Treap является частью AS3Commons Collections framework. Модифицированный треп используется для поддержки входящих в него коллекций SortedSet и SortedMap.

0
ответ дан 2 December 2019 в 02:53
поделиться

Общая классификация объектов очень часто выполняется с использованием деревьев. И очень часто граф может быть более подходящим, чем дерево, однако дерево имеет два больших преимущества перед графом:

  • Его можно представить в виде (вложенного) списка. Например, гораздо проще показать большое дерево на бумаге (с заголовками, субтитрами, абзацами и вложенными списками) или на экране компьютера, чем график.
  • Вы можете указать элемент в дереве, используя простую строку пути (или стек), например «http / StackOverflow.com / Users / Dimitri C», что гораздо сложнее сделать на графике.
0
ответ дан 2 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: