From 1185c0e3f444684ee115bdf7d99f23c986a4d692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ondra=20Mi=C4=8Dka=20=40=20miles-teg?= <mitch.ondra@gmail.com> Date: Wed, 2 Jun 2021 15:12:18 +0200 Subject: [PATCH] Graphs: pictures --- om-graphs/Makefile | 11 + om-graphs/graphs.tex | 29 +-- om-graphs/heavy-light.ipe | 470 ++++++++++++++++++++++++++++++++++++++ om-graphs/lazy-update.ipe | 427 ++++++++++++++++++++++++++++++++++ om-graphs/range-tree.ipe | 401 ++++++++++++++++++++++++++++++++ 5 files changed, 1324 insertions(+), 14 deletions(-) create mode 100644 om-graphs/heavy-light.ipe create mode 100644 om-graphs/lazy-update.ipe create mode 100644 om-graphs/range-tree.ipe diff --git a/om-graphs/Makefile b/om-graphs/Makefile index ba6c63e..f030a71 100644 --- a/om-graphs/Makefile +++ b/om-graphs/Makefile @@ -1,3 +1,14 @@ TOP=.. include ../Makerules + +IMAGES=range-tree lazy-update heavy-light + +$(MAIN).pdf: images + +images: $(addsuffix .pdf, $(IMAGES)) + +%.pdf: %.ipe + ipetoipe -pdf $< $@ + +.PHONY: images diff --git a/om-graphs/graphs.tex b/om-graphs/graphs.tex index 48bf651..fec26c2 100644 --- a/om-graphs/graphs.tex +++ b/om-graphs/graphs.tex @@ -38,9 +38,9 @@ children. Note that each node represents a subpath of~$F$ with leaves being the vertices. \TODO perhaps reference the lecture notes on details about range trees -\TODO picture of path and the range tree -\figure[]{range-tree.pdf}{}{\TODO} -% temporary sketch, not in repository + +\figure[]{range-tree.pdf}{}{An example of a range tree for path on eight vertices. +Marked subtrees cover the subpath~$2\to 6$.} \theorem{Static path representation via range tree can perform \em{path query}, \em{point update} @@ -66,16 +66,18 @@ the value of~$\delta$. The mark indicates ``everything below should be increased $\delta$''. Whenever an operation touches node during a top-down traversal, it checks for the mark. If the node is marked, we update value in the node according to the mark and move the mark down to both children. If the children are already marked, we -simply add the new mark to the existing one. \TODO maybe introduces notation for marks, if -we use them more later on +simply add the new mark to the existing one. This way, other operations can work as if there were no marks and path updates can be performed in~$\O(\log n)$ time. Note that this lazy approach requires other operations to always traverse the tree top-down in order to see correct values in the nodes. -\TODO picture of lazy updates -\figure[]{lazy-update.pdf}{}{\TODO} -% temporary sketch, not in repository +\figure[]{lazy-update.pdf}{}{Example of range tree traversal with marks. We wish to travel +from $x$ to $z$. The node~$x$ is marked, with $\delta = +4$, so we need to increase value +stored in~$x$ by~4 and transfer mark to both children of~$x$. Then we can visit~$x$ and +move along to~$y$. Node~$y$ is also marked now, so we update~$y$ and transfer mark to both +children. Left child of~$y$ was already marked by $+3$, so we have change the mark to +$+7$.\TODO shorter caption} \qed @@ -104,7 +106,10 @@ This gives us the decomposition of the tree into heavy paths that are connected edges. The decomposition can be easily found using depth-first search in linear time. -\TODO decomposition example +\figure[]{heavy-light.pdf}{}{Example of heavy-light decomposition. Top part shows a tree +with heavy paths marked by thick lines. Numbers in parenthesis show the value of $s(v)$ +(ones are omitted). Bottom part shows the tree after compression of non-trivial heavy +paths.\TODO shorter caption} \subsection{Lowest common ancestor} A simple application of heavy-light decomposition is a data structure to answer lowest @@ -120,9 +125,7 @@ To answer $\LCA(x,y)$ we start at both~$x$ and~$y$ and we jump along heavy paths towards the root. Once we discover lowest common heavy path, we compare position of ``entry-points'' to decide which one of them is LCA. We have to traverse $\O(\log n)$ light edges and we can jump over a heavy path in constant time, thus we spend $\O(\log n)$ -time in total. \NOTE perhaps make it theorem/lemma? - -\TODO +time in total. \NOTE\foot{perhaps make it theorem/lemma?} \subsection{Path queries and updates} @@ -177,8 +180,6 @@ On a static tree with static weights, the path queries can be answered in $\O(\l time. } -\TODO - \section[linkcut]{Link-cut trees} \TODO diff --git a/om-graphs/heavy-light.ipe b/om-graphs/heavy-light.ipe new file mode 100644 index 0000000..16c53f7 --- /dev/null +++ b/om-graphs/heavy-light.ipe @@ -0,0 +1,470 @@ +<?xml version="1.0"?> +<!DOCTYPE ipe SYSTEM "ipe.dtd"> +<ipe version="70212" creator="Ipe 7.2.13"> +<info created="D:20210602142000" modified="D:20210602145131"/> +<ipestyle name="basic"> +<symbol name="arrow/arc(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/farc(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/ptarc(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/fptarc(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="mark/circle(sx)" transformations="translations"> +<path fill="sym-stroke"> +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e +</path> +</symbol> +<symbol name="mark/disk(sx)" transformations="translations"> +<path fill="sym-stroke"> +0.6 0 0 0.6 0 0 e +</path> +</symbol> +<symbol name="mark/fdisk(sfx)" transformations="translations"> +<group> +<path fill="sym-fill"> +0.5 0 0 0.5 0 0 e +</path> +<path fill="sym-stroke" fillrule="eofill"> +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e +</path> +</group> +</symbol> +<symbol name="mark/box(sx)" transformations="translations"> +<path fill="sym-stroke" fillrule="eofill"> +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h +</path> +</symbol> +<symbol name="mark/square(sx)" transformations="translations"> +<path fill="sym-stroke"> +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +</path> +</symbol> +<symbol name="mark/fsquare(sfx)" transformations="translations"> +<group> +<path fill="sym-fill"> +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h +</path> +<path fill="sym-stroke" fillrule="eofill"> +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h +</path> +</group> +</symbol> +<symbol name="mark/cross(sx)" transformations="translations"> +<group> +<path fill="sym-stroke"> +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h +</path> +<path fill="sym-stroke"> +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h +</path> +</group> +</symbol> +<symbol name="arrow/fnormal(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/pointed(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/fpointed(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/linear(spx)"> +<path stroke="sym-stroke" pen="sym-pen"> +-1 0.333 m +0 0 l +-1 -0.333 l +</path> +</symbol> +<symbol name="arrow/fdouble(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/double(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h +</path> +</symbol> +<pen name="heavier" value="0.8"/> +<pen name="fat" value="1.2"/> +<pen name="ultrafat" value="2"/> +<symbolsize name="large" value="5"/> +<symbolsize name="small" value="2"/> +<symbolsize name="tiny" value="1.1"/> +<arrowsize name="large" value="10"/> +<arrowsize name="small" value="5"/> +<arrowsize name="tiny" value="3"/> +<color name="red" value="1 0 0"/> +<color name="green" value="0 1 0"/> +<color name="blue" value="0 0 1"/> +<color name="yellow" value="1 1 0"/> +<color name="orange" value="1 0.647 0"/> +<color name="gold" value="1 0.843 0"/> +<color name="purple" value="0.627 0.125 0.941"/> +<color name="gray" value="0.745"/> +<color name="brown" value="0.647 0.165 0.165"/> +<color name="navy" value="0 0 0.502"/> +<color name="pink" value="1 0.753 0.796"/> +<color name="seagreen" value="0.18 0.545 0.341"/> +<color name="turquoise" value="0.251 0.878 0.816"/> +<color name="violet" value="0.933 0.51 0.933"/> +<color name="darkblue" value="0 0 0.545"/> +<color name="darkcyan" value="0 0.545 0.545"/> +<color name="darkgray" value="0.663"/> +<color name="darkgreen" value="0 0.392 0"/> +<color name="darkmagenta" value="0.545 0 0.545"/> +<color name="darkorange" value="1 0.549 0"/> +<color name="darkred" value="0.545 0 0"/> +<color name="lightblue" value="0.678 0.847 0.902"/> +<color name="lightcyan" value="0.878 1 1"/> +<color name="lightgray" value="0.827"/> +<color name="lightgreen" value="0.565 0.933 0.565"/> +<color name="lightyellow" value="1 1 0.878"/> +<dashstyle name="dashed" value="[4] 0"/> +<dashstyle name="dotted" value="[1 3] 0"/> +<dashstyle name="dash dotted" value="[4 2 1 2] 0"/> +<dashstyle name="dash dot dotted" value="[4 2 1 2 1 2] 0"/> +<textsize name="large" value="\large"/> +<textsize name="Large" value="\Large"/> +<textsize name="LARGE" value="\LARGE"/> +<textsize name="huge" value="\huge"/> +<textsize name="Huge" value="\Huge"/> +<textsize name="small" value="\small"/> +<textsize name="footnote" value="\footnotesize"/> +<textsize name="tiny" value="\tiny"/> +<textstyle name="center" begin="\begin{center}" end="\end{center}"/> +<textstyle name="itemize" begin="\begin{itemize}" end="\end{itemize}"/> +<textstyle name="item" begin="\begin{itemize}\item{}" end="\end{itemize}"/> +<gridsize name="4 pts" value="4"/> +<gridsize name="8 pts (~3 mm)" value="8"/> +<gridsize name="16 pts (~6 mm)" value="16"/> +<gridsize name="32 pts (~12 mm)" value="32"/> +<gridsize name="10 pts (~3.5 mm)" value="10"/> +<gridsize name="20 pts (~7 mm)" value="20"/> +<gridsize name="14 pts (~5 mm)" value="14"/> +<gridsize name="28 pts (~10 mm)" value="28"/> +<gridsize name="56 pts (~20 mm)" value="56"/> +<anglesize name="90 deg" value="90"/> +<anglesize name="60 deg" value="60"/> +<anglesize name="45 deg" value="45"/> +<anglesize name="30 deg" value="30"/> +<anglesize name="22.5 deg" value="22.5"/> +<opacity name="10%" value="0.1"/> +<opacity name="30%" value="0.3"/> +<opacity name="50%" value="0.5"/> +<opacity name="75%" value="0.75"/> +<layout paper="420 595" origin="0 0" frame="420 595"/> +<tiling name="falling" angle="-60" step="4" width="1"/> +<tiling name="rising" angle="30" step="4" width="1"/> +</ipestyle> +<page> +<layer name="alpha"/> +<view layers="alpha" active="alpha"/> +<text layer="alpha" matrix="1 0 0 1 0 -4" transformations="translations" pos="88 440" stroke="black" type="label" width="12.188" height="9.843" depth="0" valign="baseline" size="Large">{\bf A}</text> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="224 768" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="160 736" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="288 736" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="256 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="320 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="296 672" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="320 672" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="344 672" size="normal" stroke="black"/> +<path matrix="1 0 0 1 -32 -224" stroke="black" pen="fat"> +224 768 m +160 736 l +</path> +<path matrix="1 0 0 1 -32 -224" stroke="black"> +224 768 m +288 736 l +</path> +<path matrix="1 0 0 1 -32 -224" stroke="black"> +288 736 m +256 704 l +</path> +<path matrix="1 0 0 1 -32 -224" stroke="black" pen="fat"> +288 736 m +320 704 l +</path> +<path matrix="1 0 0 1 -32 -224" stroke="black"> +320 704 m +296 672 l +</path> +<path matrix="1 0 0 1 -32 -224" stroke="black"> +320 704 m +320 672 l +</path> +<path matrix="1 0 0 1 -32 -224" stroke="black"> +320 704 m +344 672 l +</path> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="192 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="160 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="128 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="224 672" size="normal" stroke="black"/> +<path matrix="1 0 0 1 -32 -224" stroke="black"> +160 736 m +128 704 l +</path> +<path matrix="1 0 0 1 -32 -224" stroke="black" pen="fat"> +160 736 m +160 704 l +</path> +<path matrix="1 0 0 1 -32 -224" stroke="black"> +160 736 m +192 704 l +</path> +<path matrix="1 0 0 1 -32 -224" stroke="black" pen="fat"> +192 704 m +224 672 l +</path> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="208 640" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="240 640" size="normal" stroke="black"/> +<path matrix="1 0 0 1 -32 -224" stroke="black"> +224 672 m +208 640 l +</path> +<path matrix="1 0 0 1 -32 -224" stroke="black"> +224 672 m +240 640 l +</path> +<use matrix="1 0 0 1 -32 -224" name="mark/disk(sx)" pos="144 672" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -48 -224" name="mark/disk(sx)" pos="144 640" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -64 -224" name="mark/disk(sx)" pos="128 608" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -64 -224" name="mark/disk(sx)" pos="160 608" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -64 -224" name="mark/disk(sx)" pos="144 576" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -64 -224" name="mark/disk(sx)" pos="176 576" size="normal" stroke="black"/> +<path matrix="1 0 0 1 -32 -224" stroke="black" pen="fat"> +160 704 m +144 672 l +</path> +<path stroke="black" pen="fat"> +112 448 m +96 416 l +</path> +<path stroke="black"> +96 416 m +64 384 l +</path> +<path stroke="black" pen="fat"> +96 416 m +96 384 l +</path> +<path stroke="black"> +96 384 m +80 352 l +</path> +<path stroke="black"> +96 384 m +112 352 l +</path> +<text matrix="1 0 0 1 -32 -232" transformations="translations" pos="216 784" stroke="black" type="label" width="26.014" height="7.473" depth="2.49" valign="baseline">a (20)</text> +<text matrix="1 0 0 1 -32 -232" transformations="translations" pos="136 752" stroke="black" type="label" width="26.567" height="7.473" depth="2.49" valign="baseline">b (13)</text> +<text matrix="1 0 0 1 -32 -232" transformations="translations" pos="288 752" stroke="black" type="label" width="20.479" height="7.473" depth="2.49" valign="baseline">c (6)</text> +<text matrix="1 0 0 1 -16 -232" transformations="translations" pos="104 704" stroke="black" type="label" width="5.535" height="6.918" depth="0" valign="baseline">d</text> +<text matrix="1 0 0 1 -32 -224" transformations="translations" pos="160 688" stroke="black" type="label" width="20.479" height="7.473" depth="2.49" valign="baseline">e (7)</text> +<text matrix="1 0 0 1 -48 -216" transformations="translations" pos="208 704" stroke="black" type="label" width="19.095" height="7.473" depth="2.49" valign="baseline">f (4)</text> +<text matrix="1 0 0 1 -32 -232" transformations="translations" pos="152 672" stroke="black" type="label" width="18.818" height="7.473" depth="2.49" valign="baseline">i (6)</text> +<text matrix="1 0 0 1 -56 -224" transformations="translations" pos="160 640" stroke="black" type="label" width="21.586" height="7.473" depth="2.49" valign="baseline">n (5)</text> +<text matrix="1 0 0 1 -80 -224" transformations="translations" pos="184 608" stroke="black" type="label" width="19.953" height="7.473" depth="2.49" valign="baseline">r (3)</text> +<text matrix="1 0 0 1 -72 -224" transformations="translations" pos="192 576" stroke="black" type="label" width="3.874" height="6.128" depth="0" valign="baseline">t</text> +<text matrix="1 0 0 1 -56 -208" transformations="translations" pos="144 560" stroke="black" type="label" width="3.93" height="4.289" depth="0" valign="baseline">s</text> +<text matrix="1 0 0 1 -24 -224" transformations="translations" pos="96 608" stroke="black" type="label" width="5.258" height="4.297" depth="1.93" valign="baseline">q</text> +<text matrix="1 0 0 1 -40 -224" transformations="translations" pos="256 640" stroke="black" type="label" width="5.535" height="4.297" depth="1.93" valign="baseline">p</text> +<text matrix="1 0 0 1 -48 -216" transformations="translations" pos="240 672" stroke="black" type="label" width="19.095" height="7.473" depth="2.49" valign="baseline">j (3)</text> +<text matrix="1 0 0 1 -32 -216" transformations="translations" pos="216 632" stroke="black" type="label" width="4.981" height="4.289" depth="0" valign="baseline">o</text> +<text matrix="1 0 0 1 -40 -224" transformations="translations" pos="272 704" stroke="black" type="label" width="4.981" height="4.297" depth="1.93" valign="baseline">g</text> +<text matrix="1 0 0 1 -48 -216" transformations="translations" pos="336 704" stroke="black" type="label" width="21.586" height="7.473" depth="2.49" valign="baseline">n (4)</text> +<text matrix="1 0 0 1 -24 -208" transformations="translations" pos="344 656" stroke="black" type="label" width="8.302" height="4.289" depth="0" valign="baseline">m</text> +<text matrix="1 0 0 1 -16 -208" transformations="translations" pos="312 656" stroke="black" type="label" width="2.767" height="6.918" depth="0" valign="baseline">l</text> +<text matrix="1 0 0 1 -16 -208" transformations="translations" pos="288 656" stroke="black" type="label" width="5.258" height="6.918" depth="0" valign="baseline">k</text> +<path matrix="1 0 0 1 0 32" stroke="black" pen="heavier"> +184 312 m +184 296 l +200 296 l +200 312 l +h +</path> +<path matrix="1 0 0 1 0 32" stroke="black" pen="heavier"> +224 280 m +224 264 l +240 264 l +240 280 l +h +</path> +<path matrix="1 0 0 1 0 32" stroke="black" pen="heavier"> +256 280 m +256 264 l +272 264 l +272 280 l +h +</path> +<text matrix="1 0 0 1 72 8" transformations="translations" pos="88 440" stroke="black" type="label" width="11.474" height="9.843" depth="0" valign="baseline" size="Large">{\bf B}</text> +<text matrix="1 0 0 1 168 40" transformations="translations" pos="88 440" stroke="black" type="label" width="11.656" height="9.843" depth="0" valign="baseline" size="Large">{\bf C}</text> +<use matrix="1 0 0 1 0 32" name="mark/disk(sx)" pos="208 272" size="normal" stroke="black"/> +<use matrix="1 0 0 1 0 32" name="mark/disk(sx)" pos="192 272" size="normal" stroke="black"/> +<use matrix="1 0 0 1 0 32" name="mark/disk(sx)" pos="176 272" size="normal" stroke="black"/> +<use matrix="1 0 0 1 0 32" name="mark/disk(sx)" pos="160 272" size="normal" stroke="black"/> +<use matrix="1 0 0 1 0 32" name="mark/disk(sx)" pos="224 240" size="normal" stroke="black"/> +<use matrix="1 0 0 1 0 32" name="mark/disk(sx)" pos="240 240" size="normal" stroke="black"/> +<use matrix="1 0 0 1 0 32" name="mark/disk(sx)" pos="264 240" size="normal" stroke="black"/> +<use matrix="1 0 0 1 0 32" name="mark/disk(sx)" pos="280 240" size="normal" stroke="black"/> +<use matrix="1 0 0 1 0 32" name="mark/disk(sx)" pos="296 240" size="normal" stroke="black"/> +<use matrix="1 0 0 1 0 32" name="mark/disk(sx)" pos="312 240" size="normal" stroke="black"/> +<path matrix="1 0 0 1 0 32" stroke="black"> +192 296 m +232 280 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +192 296 m +264 280 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +192 296 m +208 272 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +192 296 m +192 272 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +192 296 m +176 272 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +192 296 m +160 272 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +232 264 m +224 240 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +232 264 m +240 240 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +264 264 m +264 240 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +264 264 m +280 240 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +264 264 m +296 240 l +</path> +<path matrix="1 0 0 1 0 32" stroke="black"> +264 264 m +312 240 l +</path> +<text matrix="1 0 0 1 104 -104" transformations="translations" pos="88 440" stroke="black" type="label" width="12.188" height="9.843" depth="0" halign="center" valign="center" size="Large">{\bf A}</text> +<text matrix="1 0 0 1 0 28" transformations="translations" pos="160 264" stroke="black" type="label" width="3.93" height="4.289" depth="0" halign="center" valign="baseline">s</text> +<text matrix="1 0 0 1 144 -136" transformations="translations" pos="88 440" stroke="black" type="label" width="11.474" height="9.843" depth="0" halign="center" valign="center" size="Large">{\bf B}</text> +<text matrix="1 0 0 1 176 -136" transformations="translations" pos="88 440" stroke="black" type="label" width="11.656" height="9.843" depth="0" halign="center" valign="center" size="Large">{\bf C}</text> +<text matrix="1 0 0 1 16 28" transformations="translations" pos="160 264" stroke="black" type="label" width="3.874" height="6.128" depth="0" halign="center" valign="baseline">t</text> +<text matrix="1 0 0 1 32 28" transformations="translations" pos="160 264" stroke="black" type="label" width="5.258" height="4.297" depth="1.93" halign="center" valign="baseline">q</text> +<text matrix="1 0 0 1 48 28" transformations="translations" pos="160 264" stroke="black" type="label" width="5.535" height="6.918" depth="0" halign="center" valign="baseline">d</text> +<text matrix="1 0 0 1 64 -4" transformations="translations" pos="160 264" stroke="black" type="label" width="4.981" height="4.289" depth="0" halign="center" valign="baseline">o</text> +<text matrix="1 0 0 1 80 -4" transformations="translations" pos="160 264" stroke="black" type="label" width="5.535" height="4.297" depth="1.93" halign="center" valign="baseline">p</text> +<text matrix="1 0 0 1 104 -4" transformations="translations" pos="160 264" stroke="black" type="label" width="5.258" height="6.918" depth="0" halign="center" valign="baseline">k</text> +<text matrix="1 0 0 1 120 -4" transformations="translations" pos="160 264" stroke="black" type="label" width="2.767" height="6.918" depth="0" halign="center" valign="baseline">l</text> +<text matrix="1 0 0 1 136 -4" transformations="translations" pos="160 264" stroke="black" type="label" width="8.302" height="4.289" depth="0" halign="center" valign="baseline">m</text> +<text matrix="1 0 0 1 152 -4" transformations="translations" pos="160 264" stroke="black" type="label" width="4.981" height="4.297" depth="1.93" halign="center" valign="baseline">g</text> +</page> +</ipe> diff --git a/om-graphs/lazy-update.ipe b/om-graphs/lazy-update.ipe new file mode 100644 index 0000000..48c2aa4 --- /dev/null +++ b/om-graphs/lazy-update.ipe @@ -0,0 +1,427 @@ +<?xml version="1.0"?> +<!DOCTYPE ipe SYSTEM "ipe.dtd"> +<ipe version="70212" creator="Ipe 7.2.13"> +<info created="D:20210602104852" modified="D:20210602142558"/> +<ipestyle name="basic"> +<symbol name="arrow/arc(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/farc(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/ptarc(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/fptarc(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="mark/circle(sx)" transformations="translations"> +<path fill="sym-stroke"> +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e +</path> +</symbol> +<symbol name="mark/disk(sx)" transformations="translations"> +<path fill="sym-stroke"> +0.6 0 0 0.6 0 0 e +</path> +</symbol> +<symbol name="mark/fdisk(sfx)" transformations="translations"> +<group> +<path fill="sym-fill"> +0.5 0 0 0.5 0 0 e +</path> +<path fill="sym-stroke" fillrule="eofill"> +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e +</path> +</group> +</symbol> +<symbol name="mark/box(sx)" transformations="translations"> +<path fill="sym-stroke" fillrule="eofill"> +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h +</path> +</symbol> +<symbol name="mark/square(sx)" transformations="translations"> +<path fill="sym-stroke"> +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +</path> +</symbol> +<symbol name="mark/fsquare(sfx)" transformations="translations"> +<group> +<path fill="sym-fill"> +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h +</path> +<path fill="sym-stroke" fillrule="eofill"> +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h +</path> +</group> +</symbol> +<symbol name="mark/cross(sx)" transformations="translations"> +<group> +<path fill="sym-stroke"> +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h +</path> +<path fill="sym-stroke"> +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h +</path> +</group> +</symbol> +<symbol name="arrow/fnormal(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/pointed(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/fpointed(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/linear(spx)"> +<path stroke="sym-stroke" pen="sym-pen"> +-1 0.333 m +0 0 l +-1 -0.333 l +</path> +</symbol> +<symbol name="arrow/fdouble(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/double(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h +</path> +</symbol> +<pen name="heavier" value="0.8"/> +<pen name="fat" value="1.2"/> +<pen name="ultrafat" value="2"/> +<symbolsize name="large" value="5"/> +<symbolsize name="small" value="2"/> +<symbolsize name="tiny" value="1.1"/> +<arrowsize name="large" value="10"/> +<arrowsize name="small" value="5"/> +<arrowsize name="tiny" value="3"/> +<color name="red" value="1 0 0"/> +<color name="green" value="0 1 0"/> +<color name="blue" value="0 0 1"/> +<color name="yellow" value="1 1 0"/> +<color name="orange" value="1 0.647 0"/> +<color name="gold" value="1 0.843 0"/> +<color name="purple" value="0.627 0.125 0.941"/> +<color name="gray" value="0.745"/> +<color name="brown" value="0.647 0.165 0.165"/> +<color name="navy" value="0 0 0.502"/> +<color name="pink" value="1 0.753 0.796"/> +<color name="seagreen" value="0.18 0.545 0.341"/> +<color name="turquoise" value="0.251 0.878 0.816"/> +<color name="violet" value="0.933 0.51 0.933"/> +<color name="darkblue" value="0 0 0.545"/> +<color name="darkcyan" value="0 0.545 0.545"/> +<color name="darkgray" value="0.663"/> +<color name="darkgreen" value="0 0.392 0"/> +<color name="darkmagenta" value="0.545 0 0.545"/> +<color name="darkorange" value="1 0.549 0"/> +<color name="darkred" value="0.545 0 0"/> +<color name="lightblue" value="0.678 0.847 0.902"/> +<color name="lightcyan" value="0.878 1 1"/> +<color name="lightgray" value="0.827"/> +<color name="lightgreen" value="0.565 0.933 0.565"/> +<color name="lightyellow" value="1 1 0.878"/> +<dashstyle name="dashed" value="[4] 0"/> +<dashstyle name="dotted" value="[1 3] 0"/> +<dashstyle name="dash dotted" value="[4 2 1 2] 0"/> +<dashstyle name="dash dot dotted" value="[4 2 1 2 1 2] 0"/> +<textsize name="large" value="\large"/> +<textsize name="small" value="\small"/> +<textsize name="tiny" value="\tiny"/> +<textsize name="Large" value="\Large"/> +<textsize name="LARGE" value="\LARGE"/> +<textsize name="huge" value="\huge"/> +<textsize name="Huge" value="\Huge"/> +<textsize name="footnote" value="\footnotesize"/> +<textstyle name="center" begin="\begin{center}" end="\end{center}"/> +<textstyle name="itemize" begin="\begin{itemize}" end="\end{itemize}"/> +<textstyle name="item" begin="\begin{itemize}\item{}" end="\end{itemize}"/> +<gridsize name="4 pts" value="4"/> +<gridsize name="8 pts (~3 mm)" value="8"/> +<gridsize name="16 pts (~6 mm)" value="16"/> +<gridsize name="32 pts (~12 mm)" value="32"/> +<gridsize name="10 pts (~3.5 mm)" value="10"/> +<gridsize name="20 pts (~7 mm)" value="20"/> +<gridsize name="14 pts (~5 mm)" value="14"/> +<gridsize name="28 pts (~10 mm)" value="28"/> +<gridsize name="56 pts (~20 mm)" value="56"/> +<anglesize name="90 deg" value="90"/> +<anglesize name="60 deg" value="60"/> +<anglesize name="45 deg" value="45"/> +<anglesize name="30 deg" value="30"/> +<anglesize name="22.5 deg" value="22.5"/> +<opacity name="10%" value="0.1"/> +<opacity name="30%" value="0.3"/> +<opacity name="50%" value="0.5"/> +<opacity name="75%" value="0.75"/> +<tiling name="falling" angle="-60" step="4" width="1"/> +<tiling name="rising" angle="30" step="4" width="1"/> +</ipestyle> +<ipestyle name="a5"> +<layout paper="420 595" origin="0 0" frame="420 595"/> +</ipestyle> +<page> +<layer name="alpha"/> +<view layers="alpha" active="alpha"/> +<use layer="alpha" matrix="1 0 0 1 -56 -208" name="mark/disk(sx)" pos="160 736" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -56 -208" name="mark/disk(sx)" pos="176 704" size="normal" stroke="black"/> +<path matrix="1 0 0 1 -56 -208" stroke="black"> +160 736 m +176 704 l +</path> +<path matrix="1 0 0 1 -56 -240" stroke="black"> +120 808 m +120 792 l +136 792 l +136 808 l +h +</path> +<path matrix="1 0 0 1 -56 -208" stroke="black"> +136 760 m +160 736 l +</path> +<text matrix="1 0 0 1 -64 -208" transformations="translations" pos="152 768" stroke="black" type="label" width="5.694" height="4.289" depth="0" valign="baseline" style="math">x</text> +<text matrix="1 0 0 1 -64 -208" transformations="translations" pos="176 736" stroke="black" type="label" width="5.242" height="4.297" depth="1.93" valign="baseline" style="math">y</text> +<text matrix="1 0 0 1 -64 -208" transformations="translations" pos="192 704" stroke="black" type="label" width="5.071" height="4.289" depth="0" valign="baseline" style="math">z</text> +<use matrix="1 0 0 1 -56 -208" name="mark/disk(sx)" pos="80 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -56 -208" name="mark/disk(sx)" pos="112 704" size="normal" stroke="black"/> +<text matrix="1 0 0 1 -56 -208" transformations="translations" pos="128 768" stroke="black" type="label" width="12.73" height="6.421" depth="0.83" halign="center" valign="center" style="math">+4</text> +<use matrix="1 0 0 1 80 -208" name="mark/disk(sx)" pos="176 704" size="normal" stroke="black"/> +<path matrix="1 0 0 1 80 -208" stroke="black"> +88 744 m +88 728 l +104 728 l +104 744 l +h +</path> +<path matrix="1 0 0 1 -128 -208" stroke="black"> +336 768 m +312 744 l +</path> +<text matrix="1 0 0 1 64 -208" transformations="translations" pos="152 768" stroke="black" type="label" width="5.694" height="4.289" depth="0" valign="baseline" style="math">x</text> +<text matrix="1 0 0 1 80 -208" transformations="translations" pos="176 736" stroke="black" type="label" width="5.242" height="4.297" depth="1.93" valign="baseline" style="math">y</text> +<text matrix="1 0 0 1 72 -208" transformations="translations" pos="192 704" stroke="black" type="label" width="5.071" height="4.289" depth="0" valign="baseline" style="math">z</text> +<use matrix="1 0 0 1 80 -208" name="mark/disk(sx)" pos="80 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 80 -208" name="mark/disk(sx)" pos="112 704" size="normal" stroke="black"/> +<path matrix="1 0 0 1 80 -208" stroke="black"> +92 728 m +80 704 l +</path> +<path matrix="1 0 0 1 80 -208" stroke="black"> +100 728 m +112 704 l +</path> +<text matrix="1 0 0 1 48 -240" transformations="translations" pos="128 768" stroke="black" type="label" width="12.73" height="6.421" depth="0.83" halign="center" valign="center" style="math">+4</text> +<path matrix="1 0 0 1 112 -272" stroke="black"> +120 808 m +120 792 l +136 792 l +136 808 l +h +</path> +<text matrix="1 0 0 1 112 -240" transformations="translations" pos="128 768" stroke="black" type="label" width="12.73" height="6.421" depth="0.83" halign="center" valign="center" style="math">+4</text> +<path matrix="1 0 0 1 -128 -208" stroke="black"> +336 768 m +360 744 l +</path> +<path matrix="1 0 0 1 -128 -208" stroke="black"> +372 728 m +384 704 l +</path> +<use matrix="1 0 0 1 -128 -208" name="mark/disk(sx)" pos="336 768" size="normal" stroke="black"/> +<path matrix="1 0 0 1 216 -208" stroke="black"> +88 744 m +88 728 l +104 728 l +104 744 l +h +</path> +<path matrix="1 0 0 1 8 -208" stroke="black"> +336 768 m +312 744 l +</path> +<text matrix="1 0 0 1 200 -208" transformations="translations" pos="152 768" stroke="black" type="label" width="5.694" height="4.289" depth="0" valign="baseline" style="math">x</text> +<text matrix="1 0 0 1 208 -208" transformations="translations" pos="176 736" stroke="black" type="label" width="5.242" height="4.297" depth="1.93" valign="baseline" style="math">y</text> +<text matrix="1 0 0 1 216 -208" transformations="translations" pos="192 704" stroke="black" type="label" width="5.071" height="4.289" depth="0" valign="baseline" style="math">z</text> +<use matrix="1 0 0 1 216 -208" name="mark/disk(sx)" pos="80 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 216 -208" name="mark/disk(sx)" pos="112 704" size="normal" stroke="black"/> +<path matrix="1 0 0 1 216 -208" stroke="black"> +92 728 m +80 704 l +</path> +<path matrix="1 0 0 1 216 -208" stroke="black"> +100 728 m +112 704 l +</path> +<text matrix="1 0 0 1 184 -240" transformations="translations" pos="128 768" stroke="black" type="label" width="12.73" height="6.421" depth="0.83" halign="center" valign="center" style="math">+4</text> +<use matrix="1 0 0 1 8 -208" name="mark/disk(sx)" pos="336 768" size="normal" stroke="black"/> +<path matrix="1 0 0 1 232 -304" stroke="black"> +120 808 m +120 792 l +136 792 l +136 808 l +h +</path> +<text matrix="1 0 0 1 232 -272" transformations="translations" pos="128 768" stroke="black" type="label" width="12.73" height="6.421" depth="0.83" halign="center" valign="center" style="math">+7</text> +<path matrix="1 0 0 1 264 -304" stroke="black"> +120 808 m +120 792 l +136 792 l +136 808 l +h +</path> +<text matrix="1 0 0 1 264 -272" transformations="translations" pos="128 768" stroke="black" type="label" width="12.73" height="6.421" depth="0.83" halign="center" valign="center" style="math">+4</text> +<path matrix="1 0 0 1 -152 -208" stroke="black"> +496 768 m +528 736 l +</path> +<path matrix="1 0 0 1 -152 -208" stroke="black"> +528 736 m +512 712 l +</path> +<path matrix="1 0 0 1 -152 -208" stroke="black"> +528 736 m +544 712 l +</path> +<use matrix="1 0 0 1 -152 -208" name="mark/disk(sx)" pos="528 736" size="normal" stroke="black"/> +<path matrix="1 0 0 1 -8 -240" stroke="black"> +88 744 m +88 728 l +104 728 l +104 744 l +h +</path> +<text matrix="1 0 0 1 -40 -272" transformations="translations" pos="128 768" stroke="black" type="label" width="12.73" height="6.421" depth="0.83" halign="center" valign="center" style="math">+3</text> +<path matrix="1 0 0 1 128 -240" stroke="black"> +88 744 m +88 728 l +104 728 l +104 744 l +h +</path> +<text matrix="1 0 0 1 96 -272" transformations="translations" pos="128 768" stroke="black" type="label" width="12.73" height="6.421" depth="0.83" halign="center" valign="center" style="math">+3</text> +<path matrix="1 0 0 1 -8 -208" stroke="black"> +112 736 m +96 712 l +</path> +<path matrix="1 0 0 1 -8 -208" stroke="black"> +72 760 m +48 736 l +</path> +<path matrix="1 0 0 1 -8 -208" stroke="black"> +48 736 m +32 704 l +</path> +<path matrix="1 0 0 1 -8 -208" stroke="black"> +48 736 m +64 704 l +</path> +<path matrix="1 0 0 1 -80 -208" stroke="black"> +316 728 m +304 712 l +</path> +<use matrix="1 0 0 1 -8 -208" name="mark/disk(sx)" pos="48 736" size="normal" stroke="black"/> +<path matrix="1 0 0 1 -80 -208" stroke="black" pen="heavier" arrow="normal/normal"> +196 772 m +40 0 0 -40 220 740 244 772 a +</path> +<path matrix="1 0 0 1 64 -208" stroke="black" pen="heavier" arrow="normal/normal"> +196 772 m +40 0 0 -40 220 740 244 772 a +</path> +</page> +</ipe> diff --git a/om-graphs/range-tree.ipe b/om-graphs/range-tree.ipe new file mode 100644 index 0000000..8c59a13 --- /dev/null +++ b/om-graphs/range-tree.ipe @@ -0,0 +1,401 @@ +<?xml version="1.0"?> +<!DOCTYPE ipe SYSTEM "ipe.dtd"> +<ipe version="70212" creator="Ipe 7.2.13"> +<info created="D:20210528110052" modified="D:20210602150616"/> +<ipestyle name="basic"> +<symbol name="arrow/arc(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/farc(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/ptarc(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/fptarc(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="mark/circle(sx)" transformations="translations"> +<path fill="sym-stroke"> +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e +</path> +</symbol> +<symbol name="mark/disk(sx)" transformations="translations"> +<path fill="sym-stroke"> +0.6 0 0 0.6 0 0 e +</path> +</symbol> +<symbol name="mark/fdisk(sfx)" transformations="translations"> +<group> +<path fill="sym-fill"> +0.5 0 0 0.5 0 0 e +</path> +<path fill="sym-stroke" fillrule="eofill"> +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e +</path> +</group> +</symbol> +<symbol name="mark/box(sx)" transformations="translations"> +<path fill="sym-stroke" fillrule="eofill"> +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h +</path> +</symbol> +<symbol name="mark/square(sx)" transformations="translations"> +<path fill="sym-stroke"> +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +</path> +</symbol> +<symbol name="mark/fsquare(sfx)" transformations="translations"> +<group> +<path fill="sym-fill"> +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h +</path> +<path fill="sym-stroke" fillrule="eofill"> +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h +</path> +</group> +</symbol> +<symbol name="mark/cross(sx)" transformations="translations"> +<group> +<path fill="sym-stroke"> +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h +</path> +<path fill="sym-stroke"> +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h +</path> +</group> +</symbol> +<symbol name="arrow/fnormal(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/pointed(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/fpointed(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/linear(spx)"> +<path stroke="sym-stroke" pen="sym-pen"> +-1 0.333 m +0 0 l +-1 -0.333 l +</path> +</symbol> +<symbol name="arrow/fdouble(spx)"> +<path stroke="sym-stroke" fill="white" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h +</path> +</symbol> +<symbol name="arrow/double(spx)"> +<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen"> +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h +</path> +</symbol> +<pen name="heavier" value="0.8"/> +<pen name="fat" value="1.2"/> +<pen name="ultrafat" value="2"/> +<symbolsize name="large" value="5"/> +<symbolsize name="small" value="2"/> +<symbolsize name="tiny" value="1.1"/> +<arrowsize name="large" value="10"/> +<arrowsize name="small" value="5"/> +<arrowsize name="tiny" value="3"/> +<color name="red" value="1 0 0"/> +<color name="green" value="0 1 0"/> +<color name="blue" value="0 0 1"/> +<color name="yellow" value="1 1 0"/> +<color name="orange" value="1 0.647 0"/> +<color name="gold" value="1 0.843 0"/> +<color name="purple" value="0.627 0.125 0.941"/> +<color name="gray" value="0.745"/> +<color name="brown" value="0.647 0.165 0.165"/> +<color name="navy" value="0 0 0.502"/> +<color name="pink" value="1 0.753 0.796"/> +<color name="seagreen" value="0.18 0.545 0.341"/> +<color name="turquoise" value="0.251 0.878 0.816"/> +<color name="violet" value="0.933 0.51 0.933"/> +<color name="darkblue" value="0 0 0.545"/> +<color name="darkcyan" value="0 0.545 0.545"/> +<color name="darkgray" value="0.663"/> +<color name="darkgreen" value="0 0.392 0"/> +<color name="darkmagenta" value="0.545 0 0.545"/> +<color name="darkorange" value="1 0.549 0"/> +<color name="darkred" value="0.545 0 0"/> +<color name="lightblue" value="0.678 0.847 0.902"/> +<color name="lightcyan" value="0.878 1 1"/> +<color name="lightgray" value="0.827"/> +<color name="lightgreen" value="0.565 0.933 0.565"/> +<color name="lightyellow" value="1 1 0.878"/> +<dashstyle name="dashed" value="[4] 0"/> +<dashstyle name="dotted" value="[1 3] 0"/> +<dashstyle name="dash dotted" value="[4 2 1 2] 0"/> +<dashstyle name="dash dot dotted" value="[4 2 1 2 1 2] 0"/> +<textsize name="large" value="\large"/> +<textsize name="small" value="\small"/> +<textsize name="tiny" value="\tiny"/> +<textsize name="Large" value="\Large"/> +<textsize name="LARGE" value="\LARGE"/> +<textsize name="huge" value="\huge"/> +<textsize name="Huge" value="\Huge"/> +<textsize name="footnote" value="\footnotesize"/> +<textstyle name="center" begin="\begin{center}" end="\end{center}"/> +<textstyle name="itemize" begin="\begin{itemize}" end="\end{itemize}"/> +<textstyle name="item" begin="\begin{itemize}\item{}" end="\end{itemize}"/> +<gridsize name="4 pts" value="4"/> +<gridsize name="8 pts (~3 mm)" value="8"/> +<gridsize name="16 pts (~6 mm)" value="16"/> +<gridsize name="32 pts (~12 mm)" value="32"/> +<gridsize name="10 pts (~3.5 mm)" value="10"/> +<gridsize name="20 pts (~7 mm)" value="20"/> +<gridsize name="14 pts (~5 mm)" value="14"/> +<gridsize name="28 pts (~10 mm)" value="28"/> +<gridsize name="56 pts (~20 mm)" value="56"/> +<anglesize name="90 deg" value="90"/> +<anglesize name="60 deg" value="60"/> +<anglesize name="45 deg" value="45"/> +<anglesize name="30 deg" value="30"/> +<anglesize name="22.5 deg" value="22.5"/> +<opacity name="10%" value="0.1"/> +<opacity name="30%" value="0.3"/> +<opacity name="50%" value="0.5"/> +<opacity name="75%" value="0.75"/> +<layout paper="420 595" origin="0 0" frame="420 595"/> +<tiling name="falling" angle="-60" step="4" width="1"/> +<tiling name="rising" angle="30" step="4" width="1"/> +</ipestyle> +<page> +<layer name="alpha"/> +<view layers="alpha" active="alpha"/> +<text layer="alpha" matrix="1 0 0 1 -80 -192" transformations="translations" pos="176 656" stroke="black" type="label" width="11.602" height="4.294" depth="1.49" halign="center" valign="baseline" style="math">w_1</text> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="288 768" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="224 736" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="352 736" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="256 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="320 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="384 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="192 704" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="176 672" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="208 672" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="240 672" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="272 672" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="304 672" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="336 672" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="368 672" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="400 672" size="normal" stroke="black"/> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +288 768 m +224 736 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +224 736 m +192 704 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +288 768 m +352 736 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +352 736 m +384 704 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +384 704 m +400 672 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +384 704 m +368 672 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +320 704 m +336 672 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +320 704 m +304 672 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +352 736 m +320 704 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +224 736 m +256 704 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +256 704 m +272 672 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +256 704 m +240 672 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +192 704 m +208 672 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +192 704 m +176 672 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +176 640 m +208 640 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black" pen="fat"> +208 640 m +240 640 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black" pen="fat"> +240 640 m +272 640 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black" pen="fat"> +272 640 m +304 640 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black" pen="fat"> +304 640 m +336 640 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +336 640 m +368 640 l +</path> +<path matrix="1 0 0 1 -80 -192" stroke="black"> +368 640 m +400 640 l +</path> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="176 640" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/square(sx)" pos="208 640" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/square(sx)" pos="240 640" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/square(sx)" pos="272 640" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/square(sx)" pos="304 640" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/square(sx)" pos="336 640" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="368 640" size="normal" stroke="black"/> +<use matrix="1 0 0 1 -80 -192" name="mark/disk(sx)" pos="400 640" size="normal" stroke="black"/> +<text matrix="1 0 0 1 -80 -192" transformations="translations" pos="176 624" stroke="black" type="label" width="4.981" height="6.42" depth="0" halign="center" valign="center">1</text> +<text matrix="1 0 0 1 -80 -192" transformations="translations" pos="208 624" stroke="black" type="label" width="4.981" height="6.42" depth="0" halign="center" valign="center">2</text> +<text matrix="1 0 0 1 -80 -192" transformations="translations" pos="240 624" stroke="black" type="label" width="4.981" height="6.42" depth="0" halign="center" valign="center">3</text> +<text matrix="1 0 0 1 -80 -192" transformations="translations" pos="272 624" stroke="black" type="label" width="4.981" height="6.42" depth="0" halign="center" valign="center">4</text> +<text matrix="1 0 0 1 -80 -192" transformations="translations" pos="304 624" stroke="black" type="label" width="4.981" height="6.42" depth="0" halign="center" valign="center">5</text> +<text matrix="1 0 0 1 -80 -192" transformations="translations" pos="336 624" stroke="black" type="label" width="4.981" height="6.42" depth="0" halign="center" valign="center">6</text> +<text matrix="1 0 0 1 -80 -192" transformations="translations" pos="368 624" stroke="black" type="label" width="4.981" height="6.42" depth="0" halign="center" valign="center">7</text> +<text matrix="1 0 0 1 -80 -192" transformations="translations" pos="400 624" stroke="black" type="label" width="4.981" height="6.42" depth="0" halign="center" valign="center">8</text> +<text matrix="1 0 0 1 -48 -192" transformations="translations" pos="176 656" stroke="black" type="label" width="11.602" height="4.294" depth="1.49" halign="center" valign="baseline" style="math">w_2</text> +<text matrix="1 0 0 1 -16 -192" transformations="translations" pos="176 656" stroke="black" type="label" width="11.602" height="4.294" depth="1.49" halign="center" valign="baseline" style="math">w_3</text> +<text matrix="1 0 0 1 16 -192" transformations="translations" pos="176 656" stroke="black" type="label" width="11.602" height="4.294" depth="1.49" halign="center" valign="baseline" style="math">w_4</text> +<text matrix="1 0 0 1 48 -192" transformations="translations" pos="176 656" stroke="black" type="label" width="11.602" height="4.294" depth="1.49" halign="center" valign="baseline" style="math">w_5</text> +<text matrix="1 0 0 1 80 -192" transformations="translations" pos="176 656" stroke="black" type="label" width="11.602" height="4.294" depth="1.49" halign="center" valign="baseline" style="math">w_6</text> +<text matrix="1 0 0 1 112 -192" transformations="translations" pos="176 656" stroke="black" type="label" width="11.602" height="4.294" depth="1.49" halign="center" valign="baseline" style="math">w_7</text> +<text matrix="1 0 0 1 144 -192" transformations="translations" pos="176 656" stroke="black" type="label" width="11.602" height="4.294" depth="1.49" halign="center" valign="baseline" style="math">w_8</text> +<path stroke="black"> +176 520 m +152 472 l +200 472 l +h +</path> +<path stroke="black"> +240 520 m +216 472 l +264 472 l +264 472 l +h +</path> +<path stroke="black"> +128 488 m +120 472 l +136 472 l +h +</path> +</page> +</ipe> -- GitLab