Perché gli alberi crescono verso il basso?


17

Perché gli alberi crescono verso il basso nell'informatica?

Ho la sensazione che risale a una stampante e che un programma che attraversa un albero per prima cosa stampi la radice e usi il concetto di una pila di carta senza fondo per esprimere i livelli indefiniti di ricorsione che potrebbero essere incontrati.

Riferimenti:

Gli alberi crescono verso il basso, con le radici nella parte superiore della pagina e le foglie in basso

Da ON HOLY WARS E UN PLEA PER LA PACE .

per convenzione, gli alberi vengono disegnati crescendo verso il basso

Dalla articolo di Wikipedia su strutture dati ad albero.

Gli alberi veri crescono dalla radice verso il cielo, ma gli alberi informatici crescono dalla radice verso il basso

Dagli appunti delle lezioni di David Schmidt .


8
Perché i tombini sono rotondi?
Giobbe

9
Alberi coltivati ​​in tutte le direzioni in natura ... verso l'alto, verso il basso, ecc.
CaffGeek,

7
@Job Per impedire la caduta dei chiusini. FTFY. :-)
Gary Rowe,

6
@GaryRowe: una falsità ampiamente propagata. I chiusini sono rotondi principalmente perché coprono le estremità dei tubi e i tubi sono rotondi. I tubi sono rotondi perché 1) che distribuisce uniformemente lo stress su di essi e 2) massimizza la sezione trasversale per un dato perimetro. Nel complesso, massimizza la resistenza e la capacità del tubo che è possibile ottenere da una specifica quantità di materiale.
Jerry Coffin,

11
@JerryCoffin: Quindi .... gli alberi crescono verso il basso perché i tubi rotondi sono più forti di quelli quadrati? ;)
FrustratedWithFormsDesigner

Risposte:


13

Solo una supposizione:

Le strutture ad albero crescono verso il basso (radice in alto, foglie in basso) perché le persone leggono dalla parte superiore della pagina verso il fondo. Inoltre, se dovessi disegnare un grande albero che si estendeva su più pagine, sarebbe imbarazzante chiedere al lettore di saltare alcune pagine e poi lavorare all'indietro.

Inoltre, indipendentemente dal fatto che la convenzione sia iniziata per il motivo spiegato sopra o per qualche altro motivo, oggi continuiamo la pratica esattamente perché è una convenzione. Abbiamo termini corrispondenti come nodo di livello superiore (che significa radice) che non avrebbe molto senso se disegnassimo la struttura con la radice in basso.


1
@BruceEdiger: ho intenzione di indovinare che si tratta solo di convenzioni diverse.
FrustratedWithFormsDesigner,

3
@BruceEdiger È qualcosa di abbastanza diverso. Il sistema di coordinate cartesiane è stato istituito 375 anni fa, quindi è abbastanza naturale attenersi a tale convenzione. I sistemi grafici (X11, QuickDraw, Quartz su iOS) usano spesso un sistema di coordinate capovolto. Non penso che ciò abbia a che fare con il modo in cui disegniamo gli alberi.
Caleb,

3
IMHO il motivo delle coordinate capovolte risale al tempo in cui si avevano i terminali. Poiché hanno visualizzato il testo a partire dall'angolo in alto a sinistra e la risoluzione effettiva può variare, è stata una decisione molto ragionevole prendere (0,0) l'angolo in alto a sinistra.
FUZxxl,

1
Le coordinate sullo schermo di @BruceEdiger essenzialmente si mappano da (x, y) alla posizione di memoria del pixel / carattere. I controller di visualizzazione video responsabili della mappatura della memoria su un'immagine iniziano nella posizione 0 nell'angolo in alto a sinistra. Quindi è una mappatura naturale avere (0,0) lì in quanto è possibile ottenere la posizione di memoria solo con (y * 80 + x). Documentazione per il computer a 8 bit Ho imparato questo con: datamuseum.dk/w/images/5/5b/RC702_Tech_Man.pdf

2
Quando si disegna un albero a mano, è difficile sapere quanto spazio è necessario, è anche difficile disporre le note ordinatamente senza prima disegnare il livello sopra. Quindi tendi a disegnare prima la "radice" mettendola in alto in modo da poter continuare con il tuo testo ovunque nella pagina finisca l'albero.
Ian,

16

La convenzione sembra derivare dal dall'algoritmo di Coffman-Graham che è progettato:

"... per disporre gli elementi di un insieme parzialmente ordinato in una sequenza di livelli. L'algoritmo sceglie una disposizione in modo tale che un elemento che segue un altro nell'ordine sia assegnato a un livello inferiore e tale che ogni livello abbia un numero di elementi che non superano un limite di larghezza fisso W. "

Il loro articolo del 1972 ( PDF ) mostra un grafico aciclico diretto che viene disegnato dall'alto verso il basso. È un breve passo per rappresentare un albero allo stesso modo.

C'è un ulteriore commento su questa visualizzazione in questo articolo sul disegno grafico a strati .


1
The Art of Computer Programming: Fundamental Algorithms, Volume 1 - Fundamental Algorithms, è stato pubblicato nel 1968 e aveva una sezione 2 sugli alberi. Qualcuno che possiede questo libro può verificare che i diagrammi mostrino gli alberi che crescono? In tal caso, la storia ci indica una convenzione iniziata anche prima. Inoltre, mi chiedo se l'informatica abbia raccolto dalla matematica questa convenzione anche prima del 1960. Wolfram mostra che gli alberi sono stati studiati nel 1857.
maxpolk

3
@maxpolk Knuth disegna i suoi alberi nel modo root-in-top e discute la sua decisione (sec. 2.3, pp. 311 nella 3a edizione) di convertire il modulo root-in-bottom prima della pubblicazione della prima edizione. Si riduce a "la maggior parte della letteratura esistente va dall'alto verso il basso e abbiamo bisogno di un modello coerente a fini di discussione" (80% secondo l'indagine di Knuth).
Ross Patterson,

1

Attingendo dal top > down e left > rightsono popolari nell'informatica perché queste sono le direzioni di partenza in inglese scritto. Considerando che la maggior parte degli articoli di informatica sono scritti in inglese indipendentemente dalla lingua madre dello scrittore, questo sarebbe il modo più diffuso per disegnare diagrammi.

È molto naturale per un lettore di lingua inglese leggere un grafico da top > down o left > rightrispetto a una delle altre alternative.

Effettua una ricerca di images.google.com per directed tree graphe rivedi i risultati. Gli unici diagrammi ad albero ho trovato che è andato fino erano diagrammi di classe UML, e solo perché questa è la convenzione che UML ha scelto per diagrammi di classe. Tutti gli altri diagrammi UML vanno left > righto up > down.

Prenderei in considerazione la lettura di grafici ad albero diretti da down > upnon naturali come la lettura dei thread di posta elettronica pubblicati in alto; che dire è completamente non naturale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.