Algorithm for Drawing Trees
rachel53461.wordpress.com
rachel53461.wordpress.com
In general, a family tree is a directed acyclic graph. Branches of the tree will always join back together if you follow the history far enough.
The number of ancestors in a generation is 2^N, with N being the number of generations back you're looking. There were only 100 billion people that ever lived, so by the time you get about a thousand years back, it becomes literally impossible for all your ancestors to appear only once.
Of course, that's just an easy upper bound to make the point that becoming a graph is unavoidable. In practice, branches will come together a lot sooner than that.
Though, you may need a cyclic directed graph for fictional family trees and time travel paradoxes.
The graph of civil relationships can certainly contain cycles. If the relationship in question is "is a legal parent of", for example, then adopt your parent.
The opportunities for cycles multiply if both blood and legal relationships are taken into account.
In an August 1992 interview with Time Magazine Allen said, “I am not Soon-Yi's father or stepfather”, adding, “I’ve never even lived with Mia. I've never in my entire life slept at Mia's apartment, and I never even used to go over there until my children came along seven years ago. I never had any family dinners over there. I was not a father to her adopted kids in any sense of the word.” Adding that Soon-Yi never treated him as a father figure and that he rarely spoke to her before the affair, Allen seemed to see few issues with their relationship.[196]. https://en.wikipedia.org/wiki/Woody_Allen
However, if your mapping out relationships in software without considering the timeline it looks like a circular relationship. Further, I am sure you can find cases that are actually incestuous.
https://research.tableau.com/sites/default/files/p189-robert...
and variants thereof at https://infovis-wiki.net/wiki/Cone_Trees
Oddly, there has been some work done on source code trees such as Gource, but for some reason nobody has yet thought of applying this to file systems or browser navigation paths.
Are those fancy tree displays actually useful for anything or is just pretty?
I'm a a researcher and my source material is ~50gb spread across ~50k hand-picked files with pretty arbitrary structure, plus another 4-5 times that in mirrors of other collections. Trees let me see things that I would overlook by reading lists all the time.
Right now I half-ass use some bioinformatics tools originally intended for cladistics and proteome research to visualize the collection. Some days I go looking for specific information or catalog what I have, other days I stumble across a cache of valuable data and might select hundreds of individual files.
It works OK, but it means directory listings first have to be kicked into a Newick tree format: https://en.wikipedia.org/wiki/Newick_format
I use a variety of other graph-based tools too, such as Maltego, Gephi, and Cytoscape, but to be honest I do so in a very ad-hoc way for specific tranches of data ( afile collection, or a relevant social media stream) and keep most of it my head. Otherwise I will get hung up on tooling rather than the underlying material.
I reduced text size enough, to a point it wasn't really text I was looking, but patterns of line content and length. This was enough to see that things were running proper.
Broot is a good example of just how much effort goes into making nested structures easily navigable. Trees may be good for presentation but ultimately lists with indentation for nesting are for more navigable.
This translates to GUI concepts as well. Both Windows and MacOS show a few flat lists relative to the current directory rather than showing all nestings at once like a tree does.
Most tree visualization research is focused on static rendering of whole tree. For file browsing and many other applications it's better to have just section of tree with interactive navigation around trees. This makes visualization an easier with more predictable layout, and the user is not overwhelmed with data. This approach is basically replicating model of our attention/focus and how we make sense of complex structures.
The design of file browsers indeed seems to be stuck in 80s. Online storage services are copying this design as well. Is anyone aware of better design, in form of paper or prototype?
Which led me to wonder why is there even an "algorithm" per se for binary trees: wouldn't it be acceptable to just trace out a complete binary tree with spaces reserved for each potential node, and only fill in a space with a node if it is non-null? Or does this not meet some criterion of "niceness" for drawings?
And I colored it like a tree, just for fun - https://giphy.com/gifs/TKFUkrWQtil60Ij2YJ/html5
If your nodes have width, you should read "Improving Walker's Algorithm to Run in Linear Time" (I have an implementation here: https://github.com/Drup/tree_layout)
If your nodes have width and height, you need to read "Drawing Non-layered Tidy Trees in Linear Time"
If you want to go bananas visualizing n-ary trees: https://treevis.net/ :D
But you can embedd any tree into the Hilbert space :)
EDIT wrong kind of tree :D