This commit is contained in:
Oliver Kennedy 2017-09-12 20:19:40 -04:00
parent 2aa532c832
commit 56169d3925
19 changed files with 375 additions and 2 deletions

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="268 592 130 40" width="130pt" height="40pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.6.2 <dc:date>2017-09-12 03:18:32 +0000</dc:date></metadata><defs><linearGradient x1="0" x2="1" id="Gradient" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c2c2cd"/><stop offset="1" stop-color="#8e8fb2"/></linearGradient><linearGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(333 594) rotate(90) scale(36)"/><font-face font-family="Helvetica" font-size="16" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1037" height="842"/><g><title>Layer 1</title><rect x="270" y="594" width="126" height="36" fill="url(#Obj_Gradient)"/><rect x="270" y="594" width="126" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(275 602.5)" fill="black"><tspan font-family="Helvetica" font-size="16" font-weight="500" x="9.078125" y="15" textLength="97.84375">4, 3, 6, 1, 5, 2</tspan></text></g></g></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="461 212 85 78" width="85pt" height="78pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.6.2 <dc:date>2017-09-12 03:16:13 +0000</dc:date></metadata><defs><linearGradient x1="0" x2="1" id="Gradient" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#97ab88"/><stop offset="1" stop-color="#6e7e60"/></linearGradient><linearGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(481 252) rotate(90) scale(36)"/><font-face font-family="Helvetica Neue" font-size="16" panose-1="2 0 5 3 0 0 0 2 0 4" units-per-em="1000" underline-position="-100" underline-thickness="50" slope="0" x-height="517" cap-height="714" ascent="951.99585" descent="-212.99744" font-weight="500"><font-face-src><font-face-name name="HelveticaNeue"/></font-face-src></font-face><linearGradient id="Obj_Gradient_2" xl:href="#Gradient" gradientTransform="translate(526 252) rotate(90) scale(36)"/><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -2 5 4" markerWidth="5" markerHeight="4" color="black"><g><path d="M 2.4 0 L 0 -.9 L 0 .9 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><linearGradient x1="0" x2="1" id="Gradient_2" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#bfb0a3"/><stop offset="1" stop-color="#897d6f"/></linearGradient><linearGradient id="Obj_Gradient_3" xl:href="#Gradient_2" gradientTransform="translate(503.5 214) rotate(90) scale(29)"/><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1037" height="842"/><g><title>Layer 1</title><path d="M 467.69332 271.93356 C 461.875 270 464.1952 253.7226 473.47672 256.5 C 474.33784 251.08596 485.131 251.96472 485.06044 256.5 C 491.82808 250.69932 500.47672 262.26576 494.67568 268.06644 C 501.63664 270.87876 494.58784 286.03116 488.875 283.5 C 488.4178 287.71884 478.20496 289.1952 477.30856 283.5 C 471.52552 289.5822 459.46696 280.23048 467.69332 271.93356 Z" fill="url(#Obj_Gradient)"/><path d="M 467.69332 271.93356 C 461.875 270 464.1952 253.7226 473.47672 256.5 C 474.33784 251.08596 485.131 251.96472 485.06044 256.5 C 491.82808 250.69932 500.47672 262.26576 494.67568 268.06644 C 501.63664 270.87876 494.58784 286.03116 488.875 283.5 C 488.4178 287.71884 478.20496 289.1952 477.30856 283.5 C 471.52552 289.5822 459.46696 280.23048 467.69332 271.93356 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(473.4 260.776)" fill="black"><tspan font-family="Helvetica Neue" font-size="16" font-weight="500" x="3.456" y="15" textLength="8.288">x</tspan></text><path d="M 512.69332 271.93356 C 506.875 270 509.1952 253.7226 518.47672 256.5 C 519.33784 251.08596 530.131 251.96472 530.06044 256.5 C 536.82808 250.69932 545.47672 262.26576 539.67568 268.06644 C 546.63664 270.87876 539.58784 286.03116 533.875 283.5 C 533.4178 287.71884 523.20496 289.1952 522.30856 283.5 C 516.52552 289.5822 504.46696 280.23048 512.69332 271.93356 Z" fill="url(#Obj_Gradient_2)"/><path d="M 512.69332 271.93356 C 506.875 270 509.1952 253.7226 518.47672 256.5 C 519.33784 251.08596 530.131 251.96472 530.06044 256.5 C 536.82808 250.69932 545.47672 262.26576 539.67568 268.06644 C 546.63664 270.87876 539.58784 286.03116 533.875 283.5 C 533.4178 287.71884 523.20496 289.1952 522.30856 283.5 C 516.52552 289.5822 504.46696 280.23048 512.69332 271.93356 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(518.4 260.776)" fill="black"><tspan font-family="Helvetica Neue" font-size="16" font-weight="500" x="3.6" y="15" textLength="8">y</tspan></text><line x1="495.63855" y1="243" x2="493.03793" y2="247.7967" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="511.36145" y1="243" x2="514.66993" y2="249.10231" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="M 490 243 L 503.5 214 L 517 243 Z" fill="url(#Obj_Gradient_3)"/><path d="M 490 243 L 503.5 214 L 517 243 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(496.75 228.8)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="4.5" y="9" textLength="4.5">k</tspan></text></g></g></svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="502 313 184 86" width="184pt" height="86pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.6.2 <dc:date>2017-09-11 23:33:26 +0000</dc:date></metadata><defs><linearGradient x1="0" x2="1" id="Gradient" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c2c2cd"/><stop offset="1" stop-color="#8e8fb2"/></linearGradient><linearGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(553.5 324) rotate(90) scale(36)"/><font-face font-family="Helvetica" font-size="16" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><linearGradient id="Obj_Gradient_2" xl:href="#Gradient" gradientTransform="translate(607.5 324) rotate(90) scale(36)"/><linearGradient id="Obj_Gradient_3" xl:href="#Gradient" gradientTransform="translate(661.5 324) rotate(90) scale(36)"/><linearGradient id="Obj_Gradient_4" xl:href="#Gradient" gradientTransform="translate(634.5 324) rotate(90) scale(36)"/><linearGradient id="Obj_Gradient_5" xl:href="#Gradient" gradientTransform="translate(526.5 324) rotate(90) scale(36)"/><linearGradient id="Obj_Gradient_6" xl:href="#Gradient" gradientTransform="translate(580.5 324) rotate(90) scale(36)"/><font-face font-family="Helvetica Neue" font-size="16" panose-1="2 0 8 3 0 0 0 9 0 4" units-per-em="1000" underline-position="-100" underline-thickness="50" slope="0" x-height="517" cap-height="714" ascent="975.0061" descent="-216.99524" font-weight="bold"><font-face-src><font-face-name name="HelveticaNeue-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1037" height="842"/><g><title>Layer 1</title><rect x="540" y="324" width="27" height="36" fill="url(#Obj_Gradient)"/><rect x="540" y="324" width="27" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(545 332.5)" fill="black"><tspan font-family="Helvetica" font-size="16" font-weight="500" x="4.0507812" y="15" textLength="8.8984375">1</tspan></text><rect x="594" y="324" width="27" height="36" fill="url(#Obj_Gradient_2)"/><rect x="594" y="324" width="27" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(599 332.5)" fill="black"><tspan font-family="Helvetica" font-size="16" font-weight="500" x="4.0507812" y="15" textLength="8.8984375">2</tspan></text><rect x="648" y="324" width="27" height="36" fill="url(#Obj_Gradient_3)"/><rect x="648" y="324" width="27" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(653 332.5)" fill="black"><tspan font-family="Helvetica" font-size="16" font-weight="500" x="4.0507812" y="15" textLength="8.8984375">3</tspan></text><rect x="621" y="324" width="27" height="36" fill="url(#Obj_Gradient_4)"/><rect x="621" y="324" width="27" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(626 332.5)" fill="black"><tspan font-family="Helvetica" font-size="16" font-weight="500" x="4.0507812" y="15" textLength="8.8984375">4</tspan></text><rect x="513" y="324" width="27" height="36" fill="url(#Obj_Gradient_5)"/><rect x="513" y="324" width="27" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(518 332.5)" fill="black"><tspan font-family="Helvetica" font-size="16" font-weight="500" x="4.0507812" y="15" textLength="8.8984375">5</tspan></text><rect x="567" y="324" width="27" height="36" fill="url(#Obj_Gradient_6)"/><rect x="567" y="324" width="27" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(572 332.5)" fill="black"><tspan font-family="Helvetica" font-size="16" font-weight="500" x="4.0507812" y="15" textLength="8.8984375">6</tspan></text><text transform="translate(573.5625 365.26794)" fill="black"><tspan font-family="Helvetica Neue" font-size="16" font-weight="bold" x=".052" y="16" textLength="40.896">Array</tspan></text></g></g></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.4 KiB

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="493 421 193 86" width="193pt" height="86pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.6.2 <dc:date>2017-09-11 23:45:25 +0000</dc:date></metadata><defs><font-face font-family="Helvetica Neue" font-size="16" panose-1="2 0 8 3 0 0 0 9 0 4" units-per-em="1000" underline-position="-100" underline-thickness="50" slope="0" x-height="517" cap-height="714" ascent="975.0061" descent="-216.99524" font-weight="bold"><font-face-src><font-face-name name="HelveticaNeue-Bold"/></font-face-src></font-face><linearGradient x1="0" x2="1" id="Gradient" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="white"/><stop offset="1" stop-color="#8e8fb2"/></linearGradient><linearGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(657 432) rotate(90) scale(36)"/><font-face font-family="Helvetica" font-size="17" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><linearGradient id="Obj_Gradient_2" xl:href="#Gradient" gradientTransform="translate(625.5 432) rotate(90) scale(36)"/><linearGradient id="Obj_Gradient_3" xl:href="#Gradient" gradientTransform="translate(598.5 432) rotate(90) scale(36)"/><linearGradient id="Obj_Gradient_4" xl:href="#Gradient" gradientTransform="translate(571.5 432) rotate(90) scale(36)"/><linearGradient id="Obj_Gradient_5" xl:href="#Gradient" gradientTransform="translate(544.5 432) rotate(90) scale(36)"/><linearGradient id="Obj_Gradient_6" xl:href="#Gradient" gradientTransform="translate(517.5 432) rotate(90) scale(36)"/></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1037" height="842"/><g><title>Layer 1</title><text transform="translate(536.5625 473.26794)" fill="black"><tspan font-family="Helvetica Neue" font-size="16" font-weight="bold" x=".34" y="16" textLength="96.32">Sorted Array</tspan></text><path d="M 639 468 L 639 432 L 666 432 L 666 432 L 675 450 L 666 468 L 666 468 Z" fill="url(#Obj_Gradient)"/><path d="M 639 468 L 639 432 L 666 432 L 666 432 L 675 450 L 666 468 L 666 468 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(644 440)" fill="black"><tspan font-family="Helvetica" font-size="17" font-weight="500" x="0" y="16" textLength="14.177734"> 6</tspan></text><path d="M 612 468 L 612 432 L 639 432 L 639 432 L 639 450 L 639 468 L 639 468 Z" fill="url(#Obj_Gradient_2)"/><path d="M 612 468 L 612 432 L 639 432 L 639 432 L 639 450 L 639 468 L 639 468 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(617 440)" fill="black"><tspan font-family="Helvetica" font-size="17" font-weight="500" x="3.772705" y="16" textLength="9.45459">5</tspan></text><path d="M 585 468 L 585 432 L 612 432 L 612 432 L 612 450 L 612 468 L 612 468 Z" fill="url(#Obj_Gradient_3)"/><path d="M 585 468 L 585 432 L 612 432 L 612 432 L 612 450 L 612 468 L 612 468 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(590 440)" fill="black"><tspan font-family="Helvetica" font-size="17" font-weight="500" x="3.772705" y="16" textLength="9.45459">4</tspan></text><path d="M 558 468 L 558 432 L 585 432 L 585 432 L 585 450 L 585 468 L 585 468 Z" fill="url(#Obj_Gradient_4)"/><path d="M 558 468 L 558 432 L 585 432 L 585 432 L 585 450 L 585 468 L 585 468 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(563 440)" fill="black"><tspan font-family="Helvetica" font-size="17" font-weight="500" x="3.772705" y="16" textLength="9.45459">3</tspan></text><path d="M 531 468 L 531 432 L 558 432 L 558 432 L 558 450 L 558 468 L 558 468 Z" fill="url(#Obj_Gradient_5)"/><path d="M 531 468 L 531 432 L 558 432 L 558 432 L 558 450 L 558 468 L 558 468 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(536 440)" fill="black"><tspan font-family="Helvetica" font-size="17" font-weight="500" x="3.772705" y="16" textLength="9.45459">2</tspan></text><path d="M 504 468 L 504 432 L 531 432 L 531 432 L 531 450 L 531 468 L 531 468 Z" fill="url(#Obj_Gradient_6)"/><path d="M 504 468 L 504 432 L 531 432 L 531 432 L 531 450 L 531 468 L 531 468 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(509 440)" fill="black"><tspan font-family="Helvetica" font-size="17" font-weight="500" x="3.772705" y="16" textLength="9.45459">1</tspan></text></g></g></svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="385 214 58 76" width="58pt" height="76pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.6.2 <dc:date>2017-09-12 02:41:06 +0000</dc:date></metadata><defs/><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1037" height="842"/><g><title>Layer 1</title><rect x="387" y="216" width="54" height="72" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>

After

Width:  |  Height:  |  Size: 769 B

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="223 448 31 40" width="31pt" height="40pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.6.2 <dc:date>2017-09-12 02:34:52 +0000</dc:date></metadata><defs><linearGradient x1="0" x2="1" id="Gradient" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c2c2cd"/><stop offset="1" stop-color="#8e8fb2"/></linearGradient><linearGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(238.5 450) rotate(90) scale(36)"/><font-face font-family="Helvetica" font-size="16" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1037" height="842"/><g><title>Layer 1</title><rect x="225" y="450" width="27" height="36" fill="url(#Obj_Gradient)"/><rect x="225" y="450" width="27" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(230 458.5)" fill="black"><tspan font-family="Helvetica" font-size="16" font-weight="500" fill="black" x="4.5" y="15" textLength="8">x</tspan></text></g></g></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="484 547 130 40" width="130pt" height="40pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.6.2 <dc:date>2017-09-12 03:48:05 +0000</dc:date></metadata><defs><linearGradient x1="0" x2="1" id="Gradient" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="white"/><stop offset="1" stop-color="#8e8fb2"/></linearGradient><linearGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(549 549) rotate(90) scale(36)"/><font-face font-family="Helvetica" font-size="15" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1037" height="842"/><g><title>Layer 1</title><path d="M 486 585 L 486 549 L 603 549 L 603 549 L 612 567 L 603 585 L 603 585 Z" fill="url(#Obj_Gradient)"/><path d="M 486 585 L 486 549 L 603 549 L 603 549 L 612 567 L 603 585 L 603 585 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(491 558)" fill="black"><tspan font-family="Helvetica" font-size="15" font-weight="500" fill="black" x="12.135742" y="15" textLength="91.728516">1, 2, 3, 4, 5, 6</tspan></text></g></g></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="241 187 94 85" width="94pt" height="85pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.6.2 <dc:date>2017-09-12 02:42:28 +0000</dc:date></metadata><defs><linearGradient x1="0" x2="1" id="Gradient" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#90a0cb"/><stop offset="1" stop-color="#6173a3"/></linearGradient><linearGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(288 189) rotate(90) scale(36)"/><font-face font-family="STIXGeneral" font-size="20" units-per-em="1000" underline-position="-75" underline-thickness="50" slope="0" x-height="450" cap-height="662" ascent="1055.00214" descent="-455.00092" font-weight="500"><font-face-src><font-face-name name="STIXGeneral-Regular"/></font-face-src></font-face><linearGradient x1="0" x2="1" id="Gradient_2" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#97ab88"/><stop offset="1" stop-color="#6e7e60"/></linearGradient><linearGradient id="Obj_Gradient_2" xl:href="#Gradient_2" gradientTransform="translate(261 234) rotate(90) scale(36)"/><font-face font-family="Helvetica Neue" font-size="16" panose-1="2 0 5 3 0 0 0 2 0 4" units-per-em="1000" underline-position="-100" underline-thickness="50" slope="0" x-height="517" cap-height="714" ascent="951.99585" descent="-212.99744" font-weight="500"><font-face-src><font-face-name name="HelveticaNeue"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -2 5 4" markerWidth="5" markerHeight="4" color="black"><g><path d="M 2.4 0 L 0 -.9 L 0 .9 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><linearGradient id="Obj_Gradient_3" xl:href="#Gradient_2" gradientTransform="translate(315 234) rotate(90) scale(36)"/></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1037" height="842"/><g><title>Layer 1</title><circle cx="288" cy="207" r="18.000029" fill="url(#Obj_Gradient)"/><circle cx="288" cy="207" r="18.000029" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(278.6 192)" fill="black"><tspan font-family="STIXGeneral" font-size="20" font-weight="500" x="3.2" y="21" textLength="12.4"></tspan></text><path d="M 247.69332 253.93356 C 241.875 252 244.1952 235.7226 253.47672 238.5 C 254.33784 233.08596 265.131 233.96472 265.06044 238.5 C 271.82808 232.69932 280.47672 244.26576 274.67568 250.06644 C 281.63664 252.87876 274.58784 268.03116 268.875 265.5 C 268.4178 269.71884 258.20496 271.1952 257.30856 265.5 C 251.52552 271.5822 239.46696 262.23048 247.69332 253.93356 Z" fill="url(#Obj_Gradient_2)"/><path d="M 247.69332 253.93356 C 241.875 252 244.1952 235.7226 253.47672 238.5 C 254.33784 233.08596 265.131 233.96472 265.06044 238.5 C 271.82808 232.69932 280.47672 244.26576 274.67568 250.06644 C 281.63664 252.87876 274.58784 268.03116 268.875 265.5 C 268.4178 269.71884 258.20496 271.1952 257.30856 265.5 C 251.52552 271.5822 239.46696 262.23048 247.69332 253.93356 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(253.4 242.776)" fill="black"><tspan font-family="Helvetica Neue" font-size="16" font-weight="500" fill="black" x="3.456" y="15" textLength="8.288">x</tspan></text><line x1="278.7369" y1="222.43851" x2="274.16793" y2="230.05345" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="M 301.69332 253.93356 C 295.875 252 298.1952 235.7226 307.47672 238.5 C 308.33784 233.08596 319.131 233.96472 319.06044 238.5 C 325.82808 232.69932 334.47672 244.26576 328.67568 250.06644 C 335.63664 252.87876 328.58784 268.03116 322.875 265.5 C 322.4178 269.71884 312.20496 271.1952 311.30856 265.5 C 305.52552 271.5822 293.46696 262.23048 301.69332 253.93356 Z" fill="url(#Obj_Gradient_3)"/><path d="M 301.69332 253.93356 C 295.875 252 298.1952 235.7226 307.47672 238.5 C 308.33784 233.08596 319.131 233.96472 319.06044 238.5 C 325.82808 232.69932 334.47672 244.26576 328.67568 250.06644 C 335.63664 252.87876 328.58784 268.03116 322.875 265.5 C 322.4178 269.71884 312.20496 271.1952 311.30856 265.5 C 305.52552 271.5822 293.46696 262.23048 301.69332 253.93356 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(307.4 242.776)" fill="black"><tspan font-family="Helvetica Neue" font-size="16" font-weight="500" x="3.6" y="15" textLength="8">y</tspan></text><line x1="297.2631" y1="222.43851" x2="302.62907" y2="231.38179" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

View file

@ -100,7 +100,7 @@
<td>(MS In Progress)</td>
<td>(BS 2017)</td>
<td>(MS 2014)</td>
<td>(Asst. Prof @ UB)</td>
<td>(Prof @ UB)</td>
</tr>
</table>
</section>
@ -115,9 +115,130 @@
- Batch vs Individual Updates
- Scan vs Lookup vs Range Queries
-->
<section>
<img src="graphics/conan.png" />
<h3>What is best in life?</h3>
<p class="fragment">(for organizing your data)</p>
<attribution>&copy; Universal Pictures</attribution>
</section>
<section>
<svg width="280" height="500" style="float: right">
<image x="55" y="20" width="180" height="180"
xlink:href="figs/ExampleDSes-BinTree.svg"
/>
<image x="20" y="185" width="250" height="170"
xlink:href="figs/ExampleDSes-LinkedList.svg"
/>
<image x="75" y="290" width="145" height="145"
xlink:href="figs/ExampleDSes-SortedArray.svg"
/>
</svg>
<h3>API</h3>
<ul>
<p>Insert $\lt key, value\gt$</p>
<p>Query for $key \in [low, high)$</p>
</ul>
<hr/>
<h3>Available Structures</h3>
<p>
Binary Tree, Linked List, Sorted Array
</p>
</section>
<section>
<svg width="600" height="600">
<image x="0" y="0" width="600" height="600"
xlink:href="figs/DSTradeoffs.svg"
/>
</svg>
</section>
<section>
<h2>Other Tradeoffs</h2>
<ul>
<li>Support for Threads</li>
<li>Lookup vs Full Scan vs Range Scan</li>
<li>Optimal Update Size</li>
</ul>
</section>
<section>
<svg width="400" height="400" style="float: right">
<image x="0" y="0" width="400" height="400"
xlink:href="figs/DSTradeoffs.svg"
/>
<g class="fragment" data-fragment-index="2">
<g class="fragment fade-out" data-fragment-index="4">
<text x="105" y="97" style="font-weight: bold; fill: red;">[Best]</text>
</g>
</g>
<g class="fragment" data-fragment-index="4">
<g class="fragment fade-out" data-fragment-index="6">
<text x="140" y="224" style="font-weight: bold; fill: red;">[Best]</text>
</g>
</g>
<g class="fragment" data-fragment-index="6">
<g class="fragment fade-out" data-fragment-index="8">
<text x="285" y="280" style="font-weight: bold; fill: red;">[Best]</text>
</g>
</g>
<g class="fragment" data-fragment-index="8">
<text x="95" y="97" style="font-weight: bold; fill: red;">[Best?]</text>
<text x="130" y="224" style="font-weight: bold; fill: red;">[Best?]</text>
</g>
</svg>
<h3>Interactive Analytics</h3>
<ol style="margin-top: 20px;">
<li class="fragment" data-fragment-index="1" style="margin-top: 10px;">User Opens CSV File</li>
<li class="fragment" data-fragment-index="3" style="margin-top: 10px;">User Poses Query as File Loads</li>
<li class="fragment" data-fragment-index="5" style="margin-top: 10px;">Lots More Queries</li>
<li class="fragment" data-fragment-index="7" style="margin-top: 10px;">User Adds More Data</li>
</ol>
<p class="fragment" data-fragment-index="9" style="clear: right; font-weight: bold;">
Even in a single session, there may be more than one "optimal" data structure.
</p>
</section>
</section>
<section>
<section>
<h2>State of the Art</h2>
<ul>
<li>Find a jack-of-all-trades data structure</li>
<li>Trash and re-build structures for different workloads</li>
<li>Use a bespoke data structure</li>
</ul>
<p class="fragment" data-fragment-index="1" style="clear: right; font-weight: bold;">
What would it take to enable incremental transitions from one set of tradeoffs to another one?
</p>
<aside class="notes">
<p>1. Jack-of-all-trades, master of none. e.g., B+Tree, LSM Tree</p>
<p>2. a) Expensive, b) Need to be able to predict workload shifts before needed</p>
<p>3. Mountain of programmer effort</p>
</aside>
</section>
<section>
<h2>Incremental Transitions</h2>
<ol>
<li class="fragment">What does it mean for a data structure to be halfway between a Binary Tree and a Linked List?</li>
<li class="fragment">How would we access and manipulate such a data structure?</li>
<li class="fragment">When and how should a data structure transition?</li>
<li class="fragment">How do we automatically generate bespoke data-structures?</li>
</ol>
</section>
<section>
<h2>Incremental Transitions</h2>
<ol>
<li style="color: black;">A Universal Instance Language</li>
<li style="color: grey;">Realizing Universal Data Structures</li>
<li style="color: grey;">Just-In-Time Data Structure Optimization</li>
<li style="color: grey;">Optimization Policy Discovery</li>
</ol>
</section>
<!-- Get deeper in to the problem:
- Dynamic workloads: (E.g., Data Loading -> Data access || Regional Differences in Access Patterns)
- State of the art:
@ -135,8 +256,142 @@
</section>
<section>
<section>
<p style="text-align: center">Logical Content</p>
<p style="text-align: center" class="fragment"></p>
<p style="text-align: center">Physical Structure</p>
</section>
<section>
<p style="text-align: center">A <i>Bag</i> of $\lt Key \rightarrow Value \gt$ Pairs</p>
<p style="text-align: center"></p>
<p style="text-align: center" class="fragment grow">One Physical Realization of the Bag</p>
</section>
<section>
<b>Core Idea</b>: A grammar of physical realizations.
</section>
<section>
<h3>Primitives</h3>
<ul>
<li>A Key ($\mathbb K$)</li>
<li>A Record ($\mathbb R$)<br/>Logically a single record</li>
<li>A Pointer ($\mathbb P$)<br/>Logically a bag of records</li>
</ul>
</section>
<section>
<h3>Grammar</h3>
<p style="text-align: left; width: 300px; margin-left: auto; margin-right: auto; margin-top: 50px">
\begin{align}
\mathbb P :=\; &|\;Sng(\mathbb R) \\
&|\uplus(\mathbb P, \mathbb P) \\
&|\;BT_{\mathbb K}(\mathbb P, \mathbb P) \\
&|\;Array_N(\mathbb R \ldots \mathbb R) \\
&|\;Sorted_N(\mathbb R \ldots \mathbb R)
\end{align}
</p>
</section>
<section>
<h3>Singleton</h3>
<table>
<tr><td style="text-align: right;">Visual:</td><td><img src="figs/singleton.svg" style="margin: 0px;"/></td></tr>
<tr><td style="text-align: right;">UIL:</td><td>$Sng(x: \mathbb R)$</td></tr>
<tr><td style="text-align: right;">Logical:</td><td>$\{ x \}$</td></tr>
</table>
</section>
<section>
<h3>Union Node</h3>
<table>
<tr><td style="text-align: right;">Visual:</td><td><img src="figs/union.svg" style="margin: 0px;"/></td></tr>
<tr><td style="text-align: right;">UIL:</td><td>$\uplus(x: \mathbb P, y: \mathbb P)$</td></tr>
<tr><td style="text-align: right;">Logical:</td><td>$x \uplus y$</td></tr>
</table>
</section>
<section>
<h3>Combining Primitives: Linked List</h3>
<table>
<tr><td style="text-align: right;">Visual:</td><td><img src="figs/linkedlist.svg" style="margin: 0px;"/></td></tr>
<tr><td style="text-align: right;">UIL:</td><td>\begin{align}LL :=\;&|\;U(Sng(x: \mathbb R), y: LL)\\&|\;Sng(x)\end{align}</td></tr>
<tr><td style="text-align: right;">Logical:</td><td>$\{ x \} \uplus y$</td></tr>
</table>
<p class="fragment" data-fragment-index="1" style="clear: right; font-weight: bold;">
Existing data structures can be expressed as syntactic restrictions on this grammar.
</p>
</section>
<section>
<h3>Extension 1: Semantic Constraints</h3>
<table>
<tr><td style="text-align: right;">Visual:</td><td><img src="figs/BTreeNode.svg" style="margin: 0px;"/></td></tr>
<tr><td style="text-align: right;">UIL:</td><td>$BT_{k: \mathbb K}(x: \mathbb P, y: \mathbb P)$</td></tr>
<tr><td style="text-align: right;">Logical:</td><td>$x \uplus y$</td></tr>
<tr><td style="text-align: right;">Constraint:</td><td>$\forall r \in x: r.key \lt K$<br/>$\forall r \in y: r.key \geq K$</td></tr>
</table>
<p class="fragment" data-fragment-index="1" style="clear: right; font-weight: bold;">
Nodes can define syntactic constraints on the contents of descendents.
</p>
</section>
<section>
<h3 style="margin-bottom: 60px;">Combining Primitives: Binary Tree</h3>
\begin{align}
BinTree :=\;&|\;BT_{k: \mathbb K}(x: BinTree, y: BinTree)\\&|\;Sng(x: \mathbb R)
\end{align}
</section>
<section>
<h3>Extension 2: Repetition</h3>
<table>
<tr><td style="text-align: right;">Visual:</td><td><img src="figs/Array.svg" style="margin: 0px;"/></td></tr>
<tr><td style="text-align: right;">UIL:</td><td>$Array_{N : \mathbb N}(x_1: \mathbb R, \ldots, x_N: \mathbb R)$</td></tr>
<tr><td style="text-align: right;">Logical:</td><td>$\{ x_1, \ldots, x_N \}$</td></tr>
</table>
<p class="fragment" data-fragment-index="1" style="clear: right; font-weight: bold;">
Can repeat structures for efficiency (e.g., B+Tree vs BinTree)
</p>
</section>
<section>
<h3>Combining Extensions</h3>
<table>
<tr><td style="text-align: right;">Visual:</td><td><img src="figs/SortedArray.svg" style="margin: 0px;"/></td></tr>
<tr><td style="text-align: right;">UIL:</td><td>$Sorted_{N : \mathbb N}(x_1: \mathbb R, \ldots, x_N: \mathbb R)$</td></tr>
<tr><td style="text-align: right;">Logical:</td><td>$\{ x_1, \ldots, x_N \}$</td></tr>
<tr><td style="text-align: right;">Constraint:</td><td>$\forall i \lt j: x_i.key \leq x_j.key$</td></tr>
</table>
</section>
<section>
<h3>Example</h3>
<svg width="300" height="300">
<image x="0" y="0"
width="300" height="300"
xlink:href="figs/Hybrid.svg"/>
<g>
<polygon points="0,300 150,300 150,218 240,218 240,300 300,300 300,0 0,0" style="fill:white; stroke-width:0" class="fragment fade-out" data-fragment-index="1"/>
<polygon points="0,300 150,300 150,218 200,200 235,120 300,0 0,0" style="fill:white; stroke-width:0" class="fragment fade-out" data-fragment-index="2"/>
<polygon points="0,170 80,170 125,100 150,70 100,0 0,0" style="fill:white; stroke-width:0" class="fragment fade-out" data-fragment-index="3"/>
</g>
</svg>
<p style="font-size: smaller;">
<span class="fragment" data-fragment-index="3">$\uplus(Sng(1), $</span>
<span class="fragment" data-fragment-index="2">$\uplus(Array_2(2,4,7), $</span>
<span class="fragment" data-fragment-index="1">$BT_6($</span>
$Sorted_2(3, 5)$
<span class="fragment" data-fragment-index="1">$, Sng(6))$</span>
<span class="fragment" data-fragment-index="2">$)$</span>
<span class="fragment" data-fragment-index="3">$)$</span>
</p>
</section>
<!-- A Universal Data Structure Instance description language
- Initial goal: Describing an instance of a data structure at one specific point in time.
- Definitions:
- Logical vs Physical state (set of records vs the way that those records are laid out on disk)
- Approach: Commonalities between different data structures... standard patterns
- Records
- Pointers (to a address of a physical entity that describes a collection of records)
@ -153,19 +408,83 @@
</section>
<section>
<section>
<h2>Incremental Transitions</h2>
<ol>
<li style="color: grey;">A Universal Instance Language</li>
<li style="color: black;">Realizing Universal Data Structures</li>
<li style="color: grey;">Just-In-Time Data Structure Optimization</li>
<li style="color: grey;">Optimization Policy Discovery</li>
</ol>
</section>
<section>
<h3>Universal Data Structures</h3>
<ul>
<li>Physiological Morphisms<ul>
<li>Queries</li>
<li>Updates</li>
</ul></li>
<li>Purely Physical Morphisms<ul>
<li>Optimization</li>
</ul></li>
</ul>
</section>
<section>
<h3 style="margin-bottom: 60px">Example: Range Queries</h3>
$Q_{\ell,h} : \mathbb P \mapsto \mathbb P$
<p>Return tuples in $[\ell,h)$</p>
</section>
<section style="font-size: smaller">
\begin{align}
Q_{\ell,h}(\uplus(x, y)) \equiv &\;\uplus(Q_{\ell,h}(x), Q_{\ell,h}(y))\\[10px]
Q_{\ell,h}(BT_k(x, y)) \equiv &\;
\begin{cases}
Q_{\ell,h}(x) & \text{if } h \lt k\\
Q_{\ell,h}(y) & \text{if } \ell \geq k\\
BT_k(Q_{\ell,h}(x), Q_{\ell,h}(y)) & \text{otherwise}
\end{cases}\\[10px]
Q_{\ell,h}(Array_N(x_1,\ldots,x_N)) \equiv &\;
Array_{|Y|}(y_1, \ldots, y_{|Y|}) \\&\;\;\text{ s.t. } Y = \{\;x_i\;|\;\ell \leq x_i \lt h\;\}\\[10px]
Q_{\ell,h}(Sorted_N(x_1,\ldots,x_N)) \equiv &\;
Sorted_{j-i+1}(x_i, \ldots, x_j) \\&\;\;\text{ s.t. } i = argmin_i(x_i \geq \ell); \\&\;\;\;\;\;\;\;\;j = argmax_(x_j \lt h);
\end{align}
</section>
<section>
<h3 style="margin-bottom: 60px">Insert</h3>
$$Insert: \mathbb P \times \mathbb P \rightarrow \mathbb P$$
<p style="font-weight: bold; margin-top: 60px" class="fragment">Do the least work possible (optimize later)</p>
<div class="fragment" style="margin-top: 60px">
$$Insert(x, y) \equiv \uplus(x, y)$$
</div>
</section>
<!-- Accessing Static Data Structures
- Queries as morphisms on the language
- Enumeration + Pop
- Lookups
- Scans
- Enumeration via "Pop"
- Implementing "Pop lowest"
-->
<!-- Dynamic Data
- Definition: Physical vs logical state transitions: Dynamic data is a physiological transition.
- Do the minimum work possible: Linked List
-->
</section>
<section>
<section>
<h2>Incremental Transitions</h2>
<ol>
<li style="color: grey;">A Universal Instance Language</li>
<li style="color: grey;">Realizing Universal Data Structures</li>
<li style="color: black;">Just-In-Time Data Structure Optimization</li>
<li style="color: grey;">Optimization Policy Discovery</li>
</ol>
</section>
<!-- Optimizing Static Data Structures
- Now we're talking about purely physical state transitions
- Pattern + Replacement Language
- Events
- Examples
@ -176,6 +495,18 @@
</section>
<section>
<section>
<h2>Incremental Transitions</h2>
<ol>
<li style="color: grey;">A Universal Instance Language</li>
<li style="color: grey;">Realizing Universal Data Structures</li>
<li style="color: grey;">Just-In-Time Data Structure Optimization</li>
<li style="color: black;">Optimization Policy Discovery</li>
</ol>
</section>
<section>
<h1>Policy Discovery</h1>
</section>
<!-- Policy Discovery and Optimization
- Purely Heuristic Design: Cracker Index / Transition Policy / Splay Trees
- Assisted Discovery: Parameterized Search Space + Cost Model