# Treeviz

A set of types, classes, and functions for visualizing computation decomposition trees.

## Introduction

This library can assist you in visualizing how computation is broken down, or decomposed, by certain *Divide-And-Conquer* type algorithms. Such algorithms are often capable of significantly reducing the order of complexity of an operation, by taking advantage of recursions, which occur when the original input is broken into halves, thirds, etc. Such repeated recursive breakdown often produces tree structures from an initially linear data input. And being able to visualize how the elements of these trees are recombined, when the operation is evaluated, can help us make smarter choices about how to apply a particular type of massively parallel computational resource to the computational problem.

One specific example is provided, a fast Fourier transform (FFT). Here is typical output from that example:

(If you compile and run *Main.hs*, note that the two output files, *tree.gv* and *legend.gv* need to be post-processed, as follows, in order to generate the graphics shown, below.)

dot <filename_root>.gv -Tpng ><filename_root>.png

## ToDo

- Figure out why some mixed decimation style FFT implementations are giving an incorrect result.
- Move code from explicit recursion to Foldable/Traversable based, instead.