Merge branch 'master' of gram.cse.buffalo.edu:ODIn/Website

pull/2/head
Oliver Kennedy 2022-09-20 21:34:54 -04:00
commit 9f746c0a46
Signed by: okennedy
GPG Key ID: 3E5F9B3ABD3FDB60
9 changed files with 43723 additions and 12 deletions

View File

@ -11,7 +11,7 @@
"country" : "USA"
}
},
"blurb" : "My work melds ideas from compilers and query languages into databases to solve practical data management problems. The Mimir system developed by my group is among the most performant, practical systems for managing incomplete data; My work on just-in-time data structures represents an entirely novel way of thinking about data structure design and management; and I also have made numerous contributions to the area of incremental data processing. I have received several invitations to 'best-of' compilations for top database conferences, and my work has influenced the design of SQLite, the world's most wildely deployed database system.",
"blurb" : "My work melds ideas from compilers and query languages into databases to solve practical data management problems. My group developed the Vizier notebook for reproducible data science, which has spun off into Breadcrumb Analytics. My group also developed TreeToaster, a drop-in tool that makes optimizing compilers run faster on larger code.",
"home" : {
"street" : "63 Bassett Road",
"city" : "Amherst",
@ -206,8 +206,15 @@
"type" : "award",
"source" : "UB",
"individual" : "YES"
},
{
"description" :
"Oliver received the IEEE Region 1 Technological Innovation Award",
"year" : 2022,
"type" : "award",
"source" : "IEEE",
"individual" : "YES"
}
],
"chairs" : [
{ "venue" : "pVLDB", "position" : "Reproducibility Co-Chair", "years" : [ 2018, 2019, 2020, 2021, 2022 ] },

View File

@ -252,7 +252,6 @@ schedule:
- date: 09/16/22
topic: ADTs, Sequences, Arrays
dow: Fri
due: PA1
section_a:
slides: slide/lec08a.pdf
section_b:
@ -261,7 +260,10 @@ schedule:
lectures:
- date: 09/19/22
topic: ArrayBuffer, Amortized Runtime, and Option types
due: PA1
dow: Mon
section_a:
slides: slide/lec09a.pdf
section_b:
slides: slide/8b-ArrayBufferAmortized.html
- date: 09/21/22
@ -272,7 +274,8 @@ schedule:
- date: 09/23/22
topic: Recursion Intro
dow: Fri
due: WA0
section_b:
slides: slide/10b-Recursion.html
- week: 5
lectures:
- date: 09/26/22
@ -281,6 +284,7 @@ schedule:
- date: 09/28/22
topic: Recursive Analysis (contd...)
dow: Wed
due: WA0
- date: 09/30/22
topic: Data-Bounded Analysis
dow: Fri

View File

@ -0,0 +1,165 @@
---
template: templates/cse250_2022_slides.erb
title: Recursion
date: Sept 21, 2022
textbook: tbd
---
<section>
<svg data-src="graphics/10b/matroska.svg" class="stretch"/>
<attribution><a href="https://www.etsy.com/listing/916447505/ukrainian-nesting-doll-nesting-dolls">Ukranian Nesting Doll Nesting Dolls Handmade Dolls | Etsy</a>
</section>
<section>
<h4 class="slide_title">Factorial</h4>
<pre><code>
def factorial(n: Int): Long =
if(n <= 1){ 1 }
else { n * factorial(n-1) }
</code></pre>
</section>
<section>
<h4 class="slide_title">Factorial</h4>
<b>Base Case:</b>
<pre><code>
if(n <= 1){ 1 }
</code></pre>
<b>Recursive Case:</b>
<pre><code>
else { n * factorial(n-1) }
</code></pre>
</section>
<section>
<h4 class="slide_title">Fibonacci</h4>
<p>
1, 1,
<span class="fragment">2, </span>
<span class="fragment">3, </span>
<span class="fragment">5, </span>
<span class="fragment">8, </span>
<span class="fragment">13, </span>
<span class="fragment">21, </span>
</p>
</section>
<section>
<h4 class="slide_title">Fibonacci</h4>
<pre><code>
def fibb(n: Int): Long =
if(n < 2){ 1 }
else { fibb(n-1) + fibb(n-2) }
</code></pre>
</section>
<section>
<h4 class="slide_title">Fibonacci</h4>
<b>Base Case:</b>
<pre><code>
if(n < 2){ 1 }
</code></pre>
<b>Recursive Case:</b>
<pre><code>
else { fibb(n-1) + fibb(n-2) }
</code></pre>
</section>
<section>
<h4 class="slide_title">Towers of Hanoi</h4>
<p>Live demo!</p>
</section>
<section>
<h4 class="slide_title">Towers of Hanoi</h4>
<pre><code>
var towers = Array(new Stack(), new Stack(), new Stack())
def moveFrom(fromTower: Int, toTower: Int, numDisks: Int): Unit =
{
val otherTower = (Set(0, 1, 2) - fromTower - toTower).head
if(numDisks < 0){
return
} else if(numDisks == 1){
moveTopDisk(from = fromTower, to = toTower)
} else {
moveFrom(fromTower, otherTower, numDisks-1)
moveTopDisk(from = fromTower, to = toTower)
moveFrom(otherTower, toTower, numDisks-1)
}
}
</code></pre>
</section>
<section>
<h4 class="slide_title">Factorial</h4>
<p>What's the complexity? (in terms of <tt>n</tt>)</p>
<pre><code>
def factorial(n: Int): Long =
if(n <= 1){ 1 }
else { n * factorial(n-1) }
</code></pre>
</section>
<section>
<h4 class="slide_title">Factorial</h4>
$$T(n) = \begin{cases}
\Theta(1) & \textbf{if } n \leq 0\\
T(n-1) + \Theta(1) & \textbf{otherwise}
\end{cases}$$
</section>
<section>
<h4 class="slide_title">Fibonacci</h4>
<b>Base Case:</b>
$$\Theta(1) \textbf{ if } n < 2$$
<b>Recursive Case"</b>
$$T(n-1) + \Theta(1) \textbf{ otherwise}$$
</section>
<section>
<h4 class="slide_title">Factorial</h4>
$$T(n) = \begin{cases}
\Theta(1) & \textbf{if } n \leq 0\\
T(n-1) + \Theta(1) & \textbf{otherwise}
\end{cases}$$
<p>Solve for $T(n)$</p>
</section>
<section>
<h4 class="slide_title">Fibonacci</h4>
<p>What's the complexity? (in terms of <tt>n</tt>)</p>
<pre><code>
def fibb(n: Int): Long =
if(n < 2){ 1 }
else { fibb(n-1) + fibb(n-2) }
</code></pre>
</section>
<section>
<h4 class="slide_title">Fibonacci</h4>
$$T(n) = \begin{cases}
\Theta(1) & \textbf{if } n < 2
T(n-1) + T(n-2) + \Theta(1) & \textbf{otherwise}
\end{cases}$$
</section>

View File

@ -5,6 +5,10 @@ date: Sept 7 and 12, 2022
textbook: "Ch. 7.3-7.4"
---
<!--
2022 by OK: It would be worth adding a slide on what it means for bounds to be "tight"
-->
<section>
<h4 class="slide_title">When is an algorithm "fast"?</h4>
<ul style="font-size: 80%">

View File

@ -1,7 +1,7 @@
---
template: templates/cse250_2022_slides.erb
title: Linked Lists and Iterators
date: Sept 18, 2022
title: ArrayBuffers, Amortized Analysis
date: Sept 19, 2022
textbook: "Ch. 6.4"
---
@ -238,8 +238,8 @@ textbook: "Ch. 6.4"
<pre><code>
def append(elem: T): Unit =
{
if(used == data.size){
/* 🙁 case; assume newLength > data.size, but pick it later */
if(used == data.size){ /* 🙁 case */
/* assume newLength > data.size, but pick it later */
val newData = Array.copyOf(original = data, newLength = ???)
/* Array.copyOf doesn't init elements, so we have to */
for(i <- data.size until newData.size){ newData(i) = None }
@ -354,7 +354,7 @@ textbook: "Ch. 6.4"
<section>
<h4 class="slide_title">newLength = data.size × 2</h4>
<p>How many boxes for $n$ inserts? <span class="fragment">$\log(n)$</span></p>
<p>How many boxes for $n$ inserts? <span class="fragment">$\Theta(\log(n))$</span></p>
<p class="fragment">How much work for box $j$?
<center>
<span class="fragment">
@ -364,7 +364,7 @@ textbook: "Ch. 6.4"
</center>
</p>
<p class="fragment">How much work for $n$ inserts?
$$\sum_{j = 0}^{\log(n)}\Theta(2^j)$$
$$\sum_{j = 0}^{\Theta(\log(n))}\Theta(2^j)$$
</p>
<p class="fragment"><b>Total for $n$ insertions: </b> $\Theta(n)$</p>
@ -388,4 +388,13 @@ textbook: "Ch. 6.4"
<p class="fragment">e.g., the amortized runtime of <tt>append</tt> is $O(\frac{n}{n}) = O(1)$</p>
<p class="fragment">(even though the worst-case runtime is $O(n)$)</p>
</section>
<section>
<h4 class="slide_title">Next time...</h4>
<ul>
<li>Linked Lists</li>
<li>Iterators</li>
<li>Access-by-reference</li>
</ul>
</section>

View File

@ -1,7 +1,7 @@
---
template: templates/cse250_2022_slides.erb
title: Linked Lists and Iterators
date: Sept 18, 2022
date: Sept 21, 2022
textbook: "Ch. 7"
---

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

View File

@ -38,7 +38,7 @@ schedule:
materials:
talk: /talks/2022-09-20-501-Vizier.html
- speaker: Erdem Sariyuce
topic: "TBD"
topic: Practical algorithms for real-world networks
- date: 09/27/22
talks:
- speaker: Zhuoyue Zhao