Skip to content
Snippets Groups Projects
Select Git revision
  • defbcae6a4f9412b4170ce9c68c763aee43a1df6
  • master default protected
  • jiri-skrobanek/persistence
  • om-graphs
  • vk-dynamic
  • fs-succinct
  • pm-streaming
7 results

splay-rotate.asy

Blame
  • splay-rotate.asy 3.40 KiB
    import ads;
    import trees;
    
    pair e = bst_edge;
    pair le = rotate(-45) * e;
    pair re = rotate(45) * e;
    pair le1 = rotate(-60) * e * 1.2;
    pair re1 = rotate(60) * e * 1.2;
    pair le2 = rotate(-45) * e * 0.7;
    pair re2 = rotate(45) * e * 0.7;
    
    real ux = 0;
    real vx = 5.5;
    real ly = 0;
    real lly = -3.2;
    real lry = -6.8;
    real arrlen = 0.5;
    real arrx = (ux+vx)/2;
    real arry = -0.5;
    
    /*** L: předtím ***/
    
    pair lu[];
    lu[0] = (ux, ly);
    lu[1] = lu[0] + le;
    lu[2] = lu[0] + re;
    lu[3] = lu[1] + le2;
    lu[4] = lu[1] + re2;
    lu[5] = lu[0] + bst_mini;
    
    tree_init(lu);
    tree_edge(0, 1, thick);
    tree_edge(0, 2);
    tree_edge(0, 5);
    tree_edge(1, 3);
    tree_edge(1, 4);
    tree_node(0, "y");
    tree_node(1, "x");
    tree_sub(2, "C");
    tree_sub(3, "A");
    tree_sub(4, "B");
    
    /*** L: potom ***/
    
    pair lv[];
    lv[0] = (vx, ly);
    lv[1] = lv[0] + re;
    lv[2] = lv[0] + le;
    lv[3] = lv[1] + le2;
    lv[4] = lv[1] + re2;
    lv[5] = lv[0] + bst_mini;
    
    tree_init(lv);
    tree_edge(0, 1, thick);
    tree_edge(0, 2);
    tree_edge(0, 5);
    tree_edge(1, 3);
    tree_edge(1, 4);
    tree_node(0, "x");
    tree_node(1, "y");
    tree_sub(2, "A");
    tree_sub(3, "B");
    tree_sub(4, "C");
    
    /*** LL: předtím ***/
    
    pair llu[];
    llu[0] = (ux, lly);		// z
    llu[1] = llu[0] + le1;		// y
    llu[2] = llu[1] + le;		// x
    llu[3] = llu[0] + re1;		// D
    llu[4] = llu[1] + re;		// C
    llu[5] = llu[2] + le2;		// A
    llu[6] = llu[2] + re2;		// B
    llu[7] = llu[0] + bst_mini;
    
    tree_init(llu);
    tree_edge(0, 1, thick);
    tree_edge(1, 2, thick);
    tree_edge(0, 3);
    tree_edge(0, 7);
    tree_edge(1, 4);
    tree_edge(2, 5);
    tree_edge(2, 6);
    tree_node(0, "z");
    tree_node(1, "y");
    tree_node(2, "x");
    tree_sub(3, "D");
    tree_sub(4, "C");
    tree_sub(5, "A");
    tree_sub(6, "B");
    
    /*** LL: poté ***/
    
    pair llv[];
    llv[0] = (vx, lly);		// x
    llv[1] = llv[0] + re1;		// y
    llv[2] = llv[1] + re;		// z
    llv[3] = llv[0] + le1;		// A
    llv[4] = llv[1] + le;		// B
    llv[5] = llv[2] + le2;		// C
    llv[6] = llv[2] + re2;		// D
    llv[7] = llv[0] + bst_mini;
    
    tree_init(llv);
    tree_edge(0, 1, thick);
    tree_edge(1, 2, thick);
    tree_edge(0, 7);
    tree_edge(0, 3);
    tree_edge(1, 4);
    tree_edge(2, 5);
    tree_edge(2, 6);
    tree_node(0, "x");
    tree_node(1, "y");
    tree_node(2, "z");
    tree_sub(3, "A");
    tree_sub(4, "B");
    tree_sub(5, "C");
    tree_sub(6, "D");
    
    /*** LP: předtím ***/
    
    pair lru[];
    lru[0] = (ux, lry);		// y
    lru[1] = lru[0] + le1;		// w
    lru[2] = lru[1] + re;		// x
    lru[3] = lru[0] + re1;		// D
    lru[4] = lru[1] + le;		// A
    lru[5] = lru[2] + le2;		// B
    lru[6] = lru[2] + re2;		// C
    lru[7] = lru[0] + bst_mini;
    
    tree_init(lru);
    tree_edge(0, 1, thick);
    tree_edge(1, 2, thick);
    tree_edge(0, 3);
    tree_edge(0, 7);
    tree_edge(1, 4);
    tree_edge(2, 5);
    tree_edge(2, 6);
    tree_node(0, "y");
    tree_node(1, "w");
    tree_node(2, "x");
    tree_sub(3, "D");
    tree_sub(4, "A");
    tree_sub(5, "B");
    tree_sub(6, "C");
    
    /*** LP: poté ***/
    
    pair lrv[];
    lrv[0] = (vx+0.2, lry);		// x
    lrv[1] = lrv[0] + le1;		// w
    lrv[2] = lrv[0] + re1;		// y
    lrv[3] = lrv[1] + le2;		// A
    lrv[4] = lrv[1] + re2;		// B
    lrv[5] = lrv[2] + le2;		// C
    lrv[6] = lrv[2] + re2;		// D
    lrv[7] = lrv[0] + bst_mini;
    
    tree_init(lrv);
    tree_edge(0, 1, thick);
    tree_edge(0, 2, thick);
    tree_edge(0, 7);
    tree_edge(1, 3);
    tree_edge(1, 4);
    tree_edge(2, 5);
    tree_edge(2, 6);
    tree_node(0, "x");
    tree_node(1, "w");
    tree_node(2, "y");
    tree_sub(3, "A");
    tree_sub(4, "B");
    tree_sub(5, "C");
    tree_sub(6, "D");
    
    /*** Šipky ***/
    
    void arr(real y, string lab)
    {
    	y += arry;
    	draw((arrx-arrlen, y) -- (arrx+arrlen, y), Arrow(size=6));
    	label("\bf " + lab, (arrx, y), 1.5N);
    }
    
    arr(ly, "zig");
    arr(lly, "zig-zig");
    arr(lry, "zig-zag");