Commit 9abd703e authored by Filip Stedronsky's avatar Filip Stedronsky
Browse files

Succinct: tree shapes + picture

parent e4b72369
PICS=sole sole_boxes sole_hilevel mixer composition mixer_chain mixer_tree
PICS=sole sole_boxes sole_hilevel mixer composition mixer_chain mixer_tree tree_shapes
include ../Makerules
......@@ -9,3 +9,4 @@ sole_boxes.pdf:: succinct_common.asy
sole_hilevel.pdf:: succinct_common.asy
mixer_chain.pdf:: succinct_common.asy
mixer_tree.pdf:: succinct_common.asy
tree_shapes.pdf:: succinct_common.asy
......@@ -398,7 +398,7 @@ parent (thus most vertices receive two carry inputs but it is trivial to
combine them into one). This is depicted in fig. \figref{mixer_tree}. Now we
need $Y\cdot Z \cdot C \le 2^M$.
\figure[mixer_tree]{mixer_tree.pdf}{}{Mixer tree for string encoding}
\figure[mixer_tree]{mixer_tree.pdf}{}{A single mixer vertex and the organization of those into a tree}
Then you can create a linear order on the vertices (e.g. by layers
bottom-to-top), split the input string into blocks and feed the blocks through
......@@ -409,8 +409,21 @@ Note that this scheme still has all the nice properties, for example it is local
decodable. To decode a vertex's input, you only need the output of that vertex and
its parent.
But how does a tree help us determine individual mixer parameters more easily?
The parameters of a mixer in a vertex are uniquely determined by the shape of the
subtree under that vertex. This is easily seen by induction: all leaves have the
same parameters (as they have dummy carry-in alphabets of size 1) and the parameters
of any vertex are determined by the parameters of its children.
We will use the same tree shape as for binary heaps: all the levels are full, except
for possibly the last and in the last level all the vertices in one contiguous segement
starting at the very left.
Now let us consider a level at height $h$ (from the bottom). There are at most three
subtree types at that level: full subtrees of height $h$, full subtrees of height $h-1$
and one irregular subtree in the middle (unless the whole tree is full; then there would
be only one kind of subtree). See fig. \figref{tree_shapes}.
\figure[tree_shapes]{tree_shapes.pdf}{}{Tree and subtree shapes}
import succinct_common;
draw((-3,-2) -- (3,-2), 0.3*white);
draw((-3.2,-4)--(-3.2,-2), Arrows);
label((-3.2, -3), "$h$", W);
draw((3.2,-3.5)--(3.2,-2), Arrows);
label((3.2, -2.75), "$h-1$", E);
void subtree(path p) {
filldraw(p, 0.5*white);
subtree((-1.75, -4)--(-0.75,-4)--(-1.25,-2)--cycle);
subtree((-0.5, -4)--(0,-4)--(0,-3.5)--(0.5,-3.5)--(0,-2)--cycle);
subtree((1.75, -3.5)--(0.75,-3.5)--(1.25,-2)--cycle);
draw((-3, -4) -- (0,-4) -- (0,-3.5) -- (3,-3.5) -- (0, 0) -- cycle, halfthick);
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment