Почему деревья растут вниз?


17

Почему деревья растут вниз в информатике?

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

Ссылки:

Деревья растут вниз, их корни вверху страницы, а листья внизу

С ПО СВЯТЫМ ВОЙН И мольба МИРА .

условно деревья растут вниз

Из статьи Википедии о древовидных структурах данных.

Настоящие деревья растут от корня вверх к небу, но деревья информатики растут от корня вниз

Из лекций Дэвида Шмидта .


8
Почему люки круглые?
Работа

9
Деревья, растущие во всех направлениях в природе ... вверх, вниз и т. Д.
CaffGeek

7
@Job Чтобы предотвратить падение крышек люков. FTFY. :-)
Гэри Роу

6
@GaryRowe: широко распространенная ложь. Крышки люков круглые, потому что они закрывают концы труб, а трубы круглые. Трубы круглые, потому что 1) равномерно распределяет нагрузку на них и 2) максимизирует поперечное сечение для данного периметра. В целом, это максимизирует прочность и вместимость трубы, которую вы можете получить из определенного количества материала.
Джерри Коффин

11
@JerryCoffin: Так .... деревья растут вниз, потому что круглые трубы сильнее, чем квадратные? ;)
FrustratedWithFormsDesigner

Ответы:


13

Просто предположение:

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

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


1
@BruceEdiger: я собираюсь предположить, что это просто сводится к различным соглашениям.
FrustratedWithFormsDesigner

3
@BruceEdiger Это что-то совсем другое. Декартова система координат была создана 375 лет назад, так что это довольно естественно придерживаться этой конвенции. Графические системы (X11, QuickDraw, Quartz на iOS) часто используют перевернутую систему координат. Я не думаю, что это имеет какое-то отношение к тому, как мы рисуем деревья.
Калеб

3
ИМХО причина перевернутых координат восходит ко времени, когда у кого-то были терминалы. Так как они отображали текст, начинающийся с верхнего левого угла, и фактическое разрешение может отличаться, было очень разумно принять значение (0,0) в верхнем левом углу.
FUZxxl

1
Экранные координаты @BruceEdiger по существу отображаются из (x, y) в ячейку памяти пикселя / символа. Контроллеры видеодисплея, отвечающие за отображение памяти на изображение, начинаются с местоположения 0 в верхнем левом углу. Следовательно, вполне естественно иметь (0,0) там, поскольку вы можете получить место в памяти только с помощью (y * 80 + x). Документация для 8-битного компьютера, с которой я узнал это: datamuseum.dk/w/images/5/5b/RC702_Tech_Man.pdf

2
Когда вы рисуете дерево вручную, трудно понять, сколько места вам понадобится, также сложно аккуратно расположить ноты без предварительного рисования уровня выше. Таким образом, вы стремитесь сначала нарисовать «корень», подняв его вверх, чтобы вы могли продолжить работу со своим текстом, где бы ни находилось дерево на странице.
Ян

16

Соглашение, как представляется, вытекает из алгоритма Кофмана-Грэма, который разработан:

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

Их статья 1972 года ( PDF ) показывает направленный ациклический граф, нарисованный сверху вниз. Это короткий шаг, чтобы представить дерево таким же образом.

В этой статье есть несколько дополнительных комментариев по этой визуализации в Layered Graph Drawing .


1
Искусство компьютерного программирования: фундаментальные алгоритмы, том 1 - фундаментальные алгоритмы, было опубликовано в 1968 году и имело раздел 2 о деревьях. Может ли кто-нибудь, владеющий этой книгой, проверить, что на диаграммах изображены деревья, растущие вниз? Если так, история указывает нам на соглашение, начатое еще раньше. Кроме того, мне интересно, перенял ли информатика это соглашение с математики еще раньше, чем в 1960 году. Вольфрам показывает, что деревья изучались в 1857 году.
maxpolk

3
@maxpolk Кнут рисует свои деревья в корне вверху и обсуждает свое решение (раздел 2.3, с. 311 в 3-м издании) преобразовать форму корня внизу до публикации первого издания. Это сводится к тому, что «большая часть существующей литературы идет сверху вниз, и нам нужна последовательная модель для целей обсуждения» (80% согласно опросу Кнута).
Росс Паттерсон

1

Рисование от top > downи left > rightпопулярны в информатике, потому что это отправные точки в письменном английском языке. Учитывая, что большинство статей по информатике написаны на английском языке, независимо от родного языка автора, это будет наиболее распространенный способ рисования диаграмм.

Это наиболее естественно для читателя английского языка , чтобы прочитать график из top > downили left > rightчем - либо из других альтернатив.

Выполните поиск images.google.com directed tree graphи просмотрите результаты. Единственное дерево диаграммы я мог бы найти , что пошло вверх была UML диаграммы классов, и только потому , что это соглашение , что UML выбрал для диаграмм классов. Все остальные диаграммы UML идут left > rightили up > down.

Я бы посчитал чтение диаграмм направленного дерева не down > upтаким естественным, как чтение самых популярных тем в электронной почте; что сказать, совершенно не естественно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.