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

pull/2/head
Oliver Kennedy 2024-01-16 13:18:36 -05:00
commit f00ce7b43e
Signed by: okennedy
GPG Key ID: 3E5F9B3ABD3FDB60
8 changed files with 966 additions and 13 deletions

View File

@ -214,6 +214,14 @@
"type" : "award",
"source" : "IEEE",
"individual" : "YES"
},
{
"description" :
"Oliver was recognized as a Distinguished Reviewer for pVLDB Vol 16 (VLDB 2023)",
"year" : 2023,
"type" : "award",
"source" : "pVLDB",
"individual" : "YES"
}
],
"chairs" : [

View File

@ -92,21 +92,23 @@
},
"github" : "bicknrown"
},
"Caleb Levine" : {
"status" : "BS",
"Victoria Dib" : {
"status" : "PhD",
"projects" : ["vizier"],
"joint_advisor" : false,
"ubit" : "caleblev"
"ubit" : "vdib"
},
"Nachiket Deo" : {
"Shawn Zimmerman" : {
"status" : "MS",
"projects" : ["vizier"],
"joint_advisor" : false
"joint_advisor" : false,
"ubit" : "zimmerm3"
},
"Jacky Lin" : {
"status" : "BS",
"projects" : ["iskra"],
"joint_advisor" : false
"Juseung Lee" : {
"status" : "PhD",
"projects" : [],
"joint_advisor" : false,
"ubit" : "juseungl"
}
},
"temp-leave" : {
@ -140,6 +142,22 @@
"status" : "BS",
"projects" : ["mimir", "vizier"],
"ubit" : "jpowathi"
},
"Caleb Levine" : {
"status" : "BS",
"projects" : ["vizier"],
"joint_advisor" : false,
"ubit" : "caleblev"
},
"Nachiket Deo" : {
"status" : "MS",
"projects" : ["vizier"],
"joint_advisor" : false
},
"Jacky Lin" : {
"status" : "BS",
"projects" : ["iskra"],
"joint_advisor" : false
}
},
"collaborators" : [

View File

@ -12,7 +12,8 @@
"length" : 7,
"urls" : {
"preprint" : "https://odin.cse.buffalo.edu/papers/2023/HILDA-OverlaySpreadsheets-submitted.pdf",
"slides" : "https://odin.cse.buffalo.edu/talks/2023-06-18-HILDA.html"
"slides" : "https://odin.cse.buffalo.edu/talks/2023-06-18-HILDA.html",
"video" : "http://odin.cse.buffalo.edu/video/overlay_spreadsheets.m4v"
}
},
{

View File

@ -0,0 +1,57 @@
# P0 - Setup
**Deadline**: Sunday, Jan 28
**Accept Assignment**: https://classroom.github.com/a/NwaGafIS
**Submit Assignment**: https://autolab.cse.buffalo.edu/courses/cse410-s24/assessments/P0-Setup
In this assignment, we will implement binary search using O(1) memory using file handles.
This assignment is intended to:
- Ensure that you have a viable build environment
- Familiarize you with the Cargo build process
- Ensure that you are able to submit
- Record an association between your Github username and UBIT for later assignments
You should expect to spend approximately 10-60 minutes on this assignment. Plan accordingly.
----
To complete this assignment, you should:
1. Accept this assignment through [GitHub Classroom](https://classroom.github.com/a/NwaGafIS).
2. Modify the file `src/main.rs`, setting your UBIT and Github username
3. `cargo run`
4. Commit `handin.json` to your repository and push it.
5. Upload `handin.json` to [Autolab](https://autolab.cse.buffalo.edu/courses/cse410-s24/assessments/P0-Setup),
You may repeat steps 2-5 as many times as desired
----
## Overview
In this assignment you will set up your rust development environment. You will not need to write any code for this assignment.
----
## Documentation
You may find the following documentation useful:
* [The Rust Book](https://doc.rust-lang.org/book/)
----
## Objectives
In this assignment, you must set two build-time constants in `src/main.rs`
* `UBIT_NAME`: This should be your UBIT username (your email address **without** the `@buffalo.edu`)
* `GITHUB_USERNAME`: This should be your Github username.
Running the code with `cargo run` will generate a file `handin.json`. You should:
1. Commit the file `handin.json` to your repository
2. Push the commit to Github
3. Submit the file `handin.json` through Autolab.

View File

@ -0,0 +1,108 @@
# P1 - Binary Search (On Disk)
**Deadline**: Sunday, Feb 11; 11:59 PM
**Accept Assignment**: https://classroom.github.com/a/hsxNiYoj
**Submit Assignment**: https://autolab.cse.buffalo.edu/courses/cse410-s24/assessments/P1-Binary
In this assignment, we will implement binary search using O(1) memory using file handles.
This assignment is intended to:
- Familiarize you with Rust and Cargo
- Familiarize you with Rust's `File` API, including `Seek`
- Familiarize you with working with binary data encodings
- Familiarize you with implementing bounded-memory algorithms.
You should expect to spend approximately 10-15 hours on this assignment. Plan accordingly.
----
To complete this assignment, you should:
1. Accept this assignment through [GitHub Classroom](https://classroom.github.com/a/hsxNiYoj).
2. Modify the file `src/data_file.rs`, implementing the functions labeled `todo!()`.
3. Commit your changes and push them to Github.
4. Go to [Autolab](https://autolab.cse.buffalo.edu/courses/cse410-s24/assessments/P1-Binary), select your repository, acknowledge the course AI Policy, and click Submit.
You may repeat steps 2-4 as many times as desired
----
## Overview
In this assignment, you will be provided with a data file consisting of an arbitrary number of serialized `Record` objects, each consisting of a `key` and a `value`. Each record will have a unique `key`, and records will be stored in ascending sorted order of their `key`.
Your `data_file::DataFile` implementation should be able to:
- Open the file
- Retrieve the nth record from the file
- Perform an O(1)-memory binary search over the file to find a specific key
----
## Documentation
You may find the following documentation useful:
* [The Rust Book](https://doc.rust-lang.org/book/)
* [std::fs::File](https://doc.rust-lang.org/std/fs/struct.File.html)
* [std::fs::Metadata](https://doc.rust-lang.org/std/fs/struct.Metadata.html)
----
The following utility methods are provided for your convenience:
#### `buffer_to_record(buffer)`
Given a buffer, exactly the size of one record, this function will transmute it into a Record object.
----
## Objectives
In this assignment, you will implement three functions:
#### `DataFile::open(path)`
This method should instantiate a DataFile object using the file at the provided path. Note the four fields of a `DataFile`:
* `file`: A `File` reference storing an open, read-only filehandle.
* `number_of_records`: The number of records in the file.
* `min_key`: The least key of any record in the file (the key of the first record)
* `max_key`: The greatest key of any record in the file (the key of the last record)
You should derive the `number_of_records`, `min_key`, and `max_key` attributes directly from the file. The length of the file (in bytes) is given as part of the file's `Metadata`.
**Complexity:**
- Runtime: O(1)
- Memory: O(1)
- IO: O(1)
#### `data_file.get(idx)`
This method should return the `idx`th record stored in the file. If `idx` is out of bounds, you should panic.
Note the `buffer_to_record` helper function.
Note also the bound on memory.
**Complexity:**
- Runtime: O(1)
- Memory: O(1)
- IO: O(1)
#### `data_file.find(key)`
If a record with key `key` is present in the file, this method should return it. If a record is not present, this function should return:
- The successor of `key` (the record with the next highest key) if one exists
- None if `key` has no successor
You may assume that the records in the file are stored in sorted order.
Note the bound on memory.
**Complexity:**
- Runtime: O(log_2(N))
- Memory: O(1)
- IO: O(log_2(N))

View File

@ -0,0 +1,747 @@
---
title: CSE-350 Data Structures (Fall 2024)
instructor:
name: Oliver Kennedy
hours: Weds 12:00-1:50
location: Capen 212
email: okennedy@buffalo.edu
web: "https://odin.cse.buffalo.edu/"
times:
date: M/W/F
time: "2:00 PM - 2:50 PM"
location: Baldy 206
resign_date: April 16, 2024
resources:
online:
- title: "The Rust Programming Language."
url: https://doc.rust-lang.org/book/
- title: Piazza
url: https://piazza.com/buffalo/spring2024/cse410
- title: Autolab
url: https://autolab.cse.buffalo.edu/courses/cse410-s24
schedule:
- topic: Introduction
detail: Course logistics and high level overview.
- topic: Rust Basics
detail: How Rust differs from Java, and how to work with the borrow checker.
- topic: "Background: Data Structures and SQL"
detail: A review of 250, collection data models, and SQL.
- topic: Data Serialization
detail: An overview of how structured/collection data is represented in memory (and on disk).
- topic: The RAM and EM models
detail: A review of the memory hierarchy, formalizing the external memory model, and an overview of techniques for managing data in external memory, including sorting as an example.
- topic: B+ Trees
detail: We build a B+ Tree from first principles and binary search
- topic: Write-Optimized structures
detail: We build up LSM trees and Beta-Epsilon Trees from first principles
- topic: The Shuffle Operation
detail: We explore on-disk hashing and related strategies for partitioning data into manageable chunks
- topic: Bloom Filters
detail: Using compact summary structures to avoid expensive on-disk operations
- topic: Dataframe Storage
detail: We design, from first principles, a storage format for persistent, mutable dataframes (aka relational tables)
- topic: TBD
detail: A fun topic for the day before spring break
- topic: Clustered and Unclustered Indexing
detail: We extend our dataframe storage model with support for indexing and explore techniques for supporting efficient access over multiple attributes.
- topic: Buffer Management
detail: We add support for caching to our dataframe storage model
- topic: Transactions Overview
detail: ADT support for combining multiple operations together into a single, atomic operation.
- topic: Locking
detail: Efficient strategies for enforcing transaction isolation on dataframes through locks
- topic: Logging
detail: How to enforce transaction durability, how to efficiently support atomic durability, and an overview of the ARIES recovery protocol
- topic: Versioned/Immutable Data
detail: What are immutable data types, and how they can be used to support efficient concurrent access to data
- topic: Sketches (time-permitting)
detail: The statistical tricks that allow expensive data statistics to be computed using Count-Min and Hyperloglog
deliverables:
- item: "Project 0: Setup"
due: Jan 28
links:
accept: https://classroom.github.com/a/NwaGafIS
submit: https://autolab.cse.buffalo.edu/courses/cse410-s24/assessments/P0-Setup
- item: AI Quiz
due: Jan 31
links:
quiz: https://autolab.cse.buffalo.edu/courses/cse410-s24/assessments/AI
- item: "Project 1: Binary Search On Disk"
due: Feb 11
links:
accept: https://classroom.github.com/a/hsxNiYoj
submit: https://autolab.cse.buffalo.edu/courses/cse410-s24/assessments/P1-Binary
- item: "Written 1: EM Analysis"
due: Feb 18
- item: "Project 2: B+ Tree"
due: Mar 10
- item: "Written 2: B+ Tree Analysis"
due: Mar 10
- item: "Project 3: LSM Tree"
due: Apr 9
- item: "Written 3: LSM Tree Analysis"
due: Apr 9
- item: "Project 4: B+ Tree with Buffer Manager"
due: Apr 21
- item: "Project 5: Concurrent B+ Tree with Buffer Manager"
due: May 12
dates:
- event: Midterm
dates: March 4, In Class
- event: Oliver Traveling, No Class
dates: March 8
- event: Spring Break, No Class
dates: March 18-22
- event: Resign Deadline
dates: April 16
- event: Final Exam
dates: May 10, 3:30-6:30 (tentative)
---
<style>
p {
margin-top: 10px;
max-width: 800px;
}
table.schedule tr + tr td {
padding-top: 5px;
}
table.schedule td {
padding-left: 8px;
padding-right: 8px;
text-align: center;
}
table.schedule th {
text-align: center;
padding-left: 8px;
padding-right: 8px;
border-bottom: 1px solid black;
}
table.schedule td + td {
border-left: 1px solid black;
}
table.schedule th + th {
border-left: 1px solid black;
}
table.schedule td.special {
background: #eee;
font-weight: bold;
border-left: none;
}
table.schedule td.weeksplit {
height: 0px;
padding: 0px;
margin: 0px;
border-top: 0.5px solid #ccc;
background: #fff;
}
ul.details {
padding-left: 15px;
margin-top: -5px;
}
ul.details li {
padding-left: 0px;
list-style-type: '↳';
font-size: 90%;
max-width: 750px;
}
dl.details {
padding-left: 5px;
}
dl.details dt::before {
content: '↳';
}
dl.details dd {
padding-left: 15px;
}
ol li {
max-width: 750px;
}
table {
max-width: 800px;
}
table.simple tr + tr td {
padding-top: 5px;
}
table.simple td {
padding-left: 8px;
padding-right: 8px;
text-align: center;
border-top: 1px solid black;
}
table.simple th {
text-align: center;
padding-left: 8px;
padding-right: 8px;
border-bottom: 1px solid black;
background: #eee;
}
table.simple td + td {
border-left: 1px solid black;
}
blockquote {
font-size: 90%;
max-width: 750px;
}
p.callout {
background: #433;
color: #fee;
padding: 10px;
border-radius: 10px;
}
.deliverable .name
{
display: inline-block;
min-width: 340px;
}
.deliverable .due_date
{
display: inline-block;
min-width: 75px;
}
.deliverable:nth-child(even)
{
background-color: #eee;
}
</style>
<h2><%= title %></h2>
<p>This course expands on CSE 250 by introducing techniques for data organization that account for the memory hierarchy and the need for concurrent access. Topics include IO Complexity, On-Disk Tree- and Hash- based structures, Write-optimized data structures (e.g., LSM Indexes and Beta-Epsilon Trees), Serialization/Data Layout, Caching, Secondary Indexes, Concurrent Data Structures, and Versioned Data Structures.</p>
<p>3 credit hours</p>
<hr>
<h3>Lectures</h3>
<b>When:</b> <%=times["date"] %> <%=times["time"] %><br>
<b>Where:</b> <%=times["location"] %>
<hr>
<h3>Course Staff</h3>
<b>Instructor:</b> <%=instructor["name"] %><br>
<b>Location:</b> <%=instructor["office"] %><br>
<b>Office Hours:</b> <%=instructor["hours"] %><br>
<b>Web:</b> <a href="https://odin.cse.buffalo.edu">https://odin.cse.buffalo.edu</a>
<p>You should never hesitate to come ask questions in office hours, whether it be a simple/fundamental
question, something more advanced that you are interested in, or simply to chat about the
material/department/life in general. Remember that you are always welcome with any level of
question and should not be shy to ask. Please report any issues/concerns with office hours ASAP so
we can address problems early in the semester.</p>
<p>If you need to email course staff, please include <b>[CSE 350]</b> at the beginning of the
subject line so your email is not missed. <b>Email omitting this tag from the subject or from non-UB
accounts will be ignored.</b></p>
<hr>
<h3>Important Dates</h3>
<dl class="details">
<% dates.each do |event| %>
<dt><%=event["event"]%></dt>
<dd><%=event["dates"]%></dd>
<% end %>
</dl>
<hr>
<h3>Deadlines (expected)</h3>
<ul class="details">
<% deliverables.each do |deliverable| %>
<li class="deliverable">
<span class="name"><b><%=deliverable["item"]%>: </b></span>
<span class="due_date"><%=deliverable["due"]%></span>
<% if deliverable.include? "links" %>
<span class="links"><b><% sep = "[" %>
<% deliverable["links"].each do |label, url| %>
<%= sep %> <a href="<%=url%>"><%=label%></a>
<% sep = "|" %>
<% end %>
]</b></span>
<% end %>
</li>
<% end %>
</ul>
<hr>
<h3>Course Resources</h3>
<h5>Online Resources</h5>
<ul class="details">
<% resources["online"].each do |resource| %>
<li><a href="<%=resource["url"]%>"><%=resource["title"]%></a></li>
<% end %>
</ul>
<h3>Topics Covered</h3>
<dl class="details">
<% schedule.each do |topic| %>
<dt><%=topic["topic"]%></dt>
<dd><%=topic["detail"]%></dd>
<% end %>
</dl>
<hr>
<h3>Prerequisites</h3>
<p>
Data Structures (CSE 250) and Systems Programming (CSE 220) should be completed prior to
enrolling in this course. There will be assignments with an implementation component that requires prior
knowledge/experience with programming.
We will also be making extensive use of asymptotic complexity (Big-O).
</p>
<h3>Course Requirements</h3>
<h4>Assignments</h4>
Homework assignments for this course will be composed of:
<ul class="details">
<li>Programming Assignments</li>
<li>Written Assignments</li>
</ul>
<p>
There are two categories of assignments which will be given alongside one another.
Programming assignments will generally take 3 weeks and be assigned an extra week prior to the previous assignment being due.
Several assignments build on one another, and so it may be difficult for you to complete a subsequent assignment if you have difficulty with the first. For example, a programming assignment may ask you to build on the efforts of a prior programming assignment, or a writing assignment may require a complexity analysis of your implementation.
Due to the nature of the content of the course, you may be required to analyze code that you have written, in addition to providing correct solutions to the problems.
At the instructor's discretion, the class may be provided with a working implementation of a programming assignment after its due date has passed.
<b>You must score a 100% on the Academic Integrity and Setup assignments or you will be given an F in the course.</b>
</p>
<p>
For homework assignments, we will only be accepting electronic submissions. These will be accepted via Autolab.
Assignments will be submitted as described in the write-up.
Written submissions are generally accepted in the form of a PDF.
There are two ways to complete your written homework:
</p>
<ul class="details">
<li>You may typeset your written submissions using any word processor you wish (Microsoft Word and LaTeX are good options). <a href="https://overleaf.com/">Overleaf</a> is a convenient web-based options for using LaTeX. If you use Word, make sure to export your submission as a PDF.</li>
<li>You may handwrite your written submission and then scan it. An easy way to scan is using your phone along with the Scan feature in Google Docs (for Android). If you prefer to scan your documents, you may do so with your own scanner or on campus, the libraries provide scanning services.</li>
</ul>
<p>Make sure to <b>double check your assignments before and after submission</b> to ensure that part of your writing wasn't chopped off or distorted, as the integrity of your submission is your responsibility. Also, if you handwrite an assignment, make sure that you write legibly. <b>You will not receive credit if your submission is invalid/corrupt/wrong file format or if your submission is illegible.</b> It is fully your responsibility to determine if your submission is valid.</p>
<h4>Late Policy</h4>
<p>Late written assignments will be accepted up to 1 day late for a penalty of 50% of the total points. For example,
if the homework is worth 100 points and you submit it one day late, you will receive the maximum of zero points, or your score
earned minus 50 points. </p>
<p>
Late programming assignments will be accepted up to 2 days late, for a penalty of 25% of the total points per day. For example, if the programming assignment is worth 100 points and you submit it one day late, you will receive the greater of zero points, or your score earned minus 50 points.
</p>
<p>
You have a total of five grace days to spend over the course of the semester. Each grace day can be used to negates one 'day' of late penalty for a homework or project. You may not use a grace day to submit a written assignment more than one day late or a programming assignment more than two days late. <b>Grace days are automatically applied</b> to the first instances of late submissions, and are non-refundable. Please plan accordingly. You will not be able to recover a grace day if you decide to work late and your score was not sufficiently higher.
</p>
<p>
<b>Keep track of the time if you are working up until the deadline</b>.
Submissions become late after the set deadline, even by 1 minute.
</p>
<h4>Exams</h4>
<p>
There will be one midterm exam during the semester and one 3-hour final exam during finals week.
The midterm exam is worth 20% of your grade.
The final exam is worth 20% of your grade.
We reserve the right to change the scaling of the exams.
</p>
<p>
No makeup exams will be given except in <i>provably extreme circumstances</i>.
Please note the following additional policies/suggestions with respect to makeup exams:
</p>
<ul class="details">
<li>Notify your instructor 24 hours prior to the exam via e-mail or telephone (voice mail) if you are going to
miss an exam. If it is medically impossible for you to give prior notice, please obtain a note from a
physician detailing the period (and the reason) you were medically incapable of communicating with the
instructor.</li>
<li>If you miss an examination because of sickness or similar reasons, visit a physician and obtain a note
detailing the period and the reason you were medically incapable of taking the exam.</li>
<li>The midterm and final exam dates are posted. Please plan your travel and other activities accordingly.</li>
<li>The final exam date is scheduled by the university and is posted under the HUB Final Exam Schedule.</li>
<li>Exam times are stressful and one could forget about the exam time. Please make sure you arrange for multiple reminders so that you do not forget about the exam(s). This is another reason to religiously follow the course webpage as there will be numerous reminders about the exam when it gets close to the actual exam date.</li>
</ul>
<h4>Attendance and Participation</h4>
<p>
Attendance in lecture is not mandatory, but highly encouraged. You are, after all, paying us to deliver an interactive experience. If you don't understand something, wouldn't it be nice to just raise your hand and get to the bottom of it then and there? Lectures will typically be recorded, but recordings have been known to get corrupted; do not count on lecture recordings.
</p>
<p>The instructor has also been known, in the past, to include questions on exams that can only be answered by students who regularly attend class.</p>
<h4>Recitations</h4>
<p>
There are no recitations.
</p>
<hr>
<h3>Grading Policy</h3>
<p>Here is the split of grades:</p>
<ul class="details">
<li>Programming Assignments (60%)</li>
<li>Written Reflections (10%)</li>
<li>Midterm (15%)</li>
<li>Final Exam (15%)</li>
</ul>
<p>You must complete the AI Quiz and Setup assignments, or you will receive an F in the class.</p>
<p>An additional 1 point (max of 5 pt per student) will be awarded for every legitimate report of a typo in this syllabus or any assignment handout materials. Typos should be reported by email to the instructor. The point for any given typo will only be awarded to the first person to report it.</p>
<p>Here is a breakdown of the course grades required for the different letter grades.</p>
<table class="simple">
<tr>
<th>Score (x)</th>
<th>Letter Grade</th>
<th>Quality Points</th>
</tr>
<tr>
<td>90% ≤ x ≤ 100%</td>
<td>A</td>
<td>4.0</td>
</tr>
<tr>
<td>85% ≤ x < 90%</td>
<td>A-</td>
<td>3.67</td>
</tr>
<tr>
<td>80% ≤ x < 85%</td>
<td>B+</td>
<td>3.33</td>
</tr>
<tr>
<td>75% ≤ x < 80%</td>
<td>B</td>
<td>3.00</td>
</tr>
<tr>
<td>70% ≤ x < 75%</td>
<td>B-</td>
<td>2.67</td>
</tr>
<tr>
<td>65% ≤ x < 70%</td>
<td>C+</td>
<td>2.33</td>
</tr>
<tr>
<td>60% ≤ x < 65%</td>
<td>C</td>
<td>2.00</td>
</tr>
<tr>
<td>55% ≤ x < 60%</td>
<td>C-</td>
<td>1.67</td>
</tr>
<tr>
<td>50% ≤ x < 55%</td>
<td>D</td>
<td>1.00</td>
</tr>
<tr>
<td>0% ≤ x < 50%</td>
<td>F</td>
<td>0</td>
</tr>
</table>
<p>
It is possible that these ranges and/or the grade weighting may be adjusted at the end of the semester to address inconsistencies or hardships that arise.
Grades will not be curved/adjusted during the semester.
</p>
<p>
Students will receive <b>a grade of F if they are found in violation of the <a href="#ai_policy">academic integrity policy</a></b>.
Please make sure to thoroughly read and understand the policy for this course.
</p>
<p>
Students that do not participate in the class at all will receive a grade of <b>F3, which denotes failure for non-attendance.</b>.
Students who do not complete a substantial portion of the course, or do not attend more than 60% of the course will receive a a grade of <b>F2, which denotes failure for partial non-attendance.</b>.
Please note that there may be financial aid repercussions so you should consider resigning courses you are not planning on completing.
</p>
<h4>Incompletes</h4>
<p>
<b>A grade of incomplete ("I")</b> indicates that additional course work is required to fulfill the requirements of a given course.
Students may only be given an "I" grade if they have a passing average in coursework that has been completed and have well-defined parameters to complete the course requirements that could result in a grade better than the default grade.
An "I" grade may not be assigned to a student who did not attend the course.
This is especially applicable in instances where a student misses work due to extenuating circumstances and are unable to makeup the work prior to the end of the semester.
For example, missing the final exam due to a car accident and/or being hospitalized for an extended period during the semester are two examples where completing all coursework may not be possible before grades are due.
See also: <a href="https://catalog.buffalo.edu/policies/explanation.html">Explanation of Grades</a> for more regarding the incomplete grade process.
Incompletes will not be given as a shelter for poor grades.
It is the student's responsibility to resign from the course in a timely manner if doing poorly.
<b>The last day to resign with a grade of R is <%=resign_date%> (before 11:59:59pm).</b>
</p>
<hr>
<h3>Accessibility Resources</h3>
<p>
If you have any disability which requires reasonable accommodations to enable you to participate in this course, please contact the Office of Accessibility Resources in 60 Capen Hall, <a href="tel:716-645-2608">716-645-2608</a> and also the instructor of this course during the first week of class.
The office will provide you with information and review appropriate arrangements for reasonable accommodations, which can be found on the web at: <a href="http://www.buffalo.edu/studentlife/who-we-are/departments/accessibility.html">http://www.buffalo.edu/studentlife/who-we-are/departments/accessibility.html</a>
</p>
<hr>
<h3>Critical Campus Resources</h3>
<h4>Sexual Violence</h4>
<p>
UB is committed to providing a safe learning environment free of all forms of discrimination and sexual harassment, including sexual assault, domestic and dating violence and stalking.
If you have experienced gender-based violence (intimate partner violence, attempted or completed sexual assault, harassment, coercion, stalking, etc.), UB has resources to help.
This includes academic accommodations, health and counseling services, housing accommodations, helping with legal protective orders, and assistance with reporting the incident to police or other UB officials if you so choose.
Please contact UBs Title IX Coordinator at <a href="tel:716-645-2266">716-645-2266</a> for more information.
For confidential assistance, you may also contact a Crisis Services Campus Advocate at <a href="tel:716-796-4399">716-796-4399</a>.
</p>
<h4>Mental Health Services</h4>
<p>
As a student you may experience a range of issues that can cause barriers to learning or reduce your ability to participate in daily activities.
These might include strained relationships, anxiety, high levels of stress, alcohol/drug problems, feeling down, health concerns, or unwanted sexual experiences.
Counseling, Health Services, and Health Promotion are here to help with these or other issues you may experience.
You can learn more about these programs and services by contacting:
</p>
<ul class="details">
<li><b>Counseling Services</b><br/>
<a href="https://www.buffalo.edu/studentlife/who-we-are/departments/counseling.html">https://www.buffalo.edu/studentlife/who-we-are/departments/counseling.html</a><br/>
120 Richmond Quad (North Campus), <a href="tel:716-645-2720">716-645-2720</a>
</li>
<li><b>Health Services</b><br/>
<a href="https://www.buffalo.edu/studentlife/who-we-are/departments/health.html">https://www.buffalo.edu/studentlife/who-we-are/departments/health.html</a><br/>
4350 Maple Road, <a href="tel:716-829-3316">716-829-3316</a>
</li>
<li>
<b>Health Promotion</b><br/>
<a href="https://www.buffalo.edu/studentlife/who-we-are/departments/health-promotion.html">https://www.buffalo.edu/studentlife/who-we-are/departments/health-promotion.html</a><BR/>
114 Student Union (North Campus), <a href="tel:716-645-2837">716-645-2837</a>
</li>
</ul>
<hr>
<h3>Study Time</h3>
<p>
In this course, you are expected to put in significant additional time beyond the scheduled class times.
It is expected that for each credit hour for a course, students should typically expect to put in 2 to 3 hours of work each week outside of class.
Since this course is 3 credit hours, expect roughly 6 to 9 hours of time outside of lecture and recitation each week.
You may want to consider practicing coding to stay up to date and polish your skills to perform better on coding assignments.
This is especially important if you don't feel confident about your programming after CSE-220, or complexity analysis after CSE-250.
Additionally, the concepts and ideas of the theory in this course are not something you can simply memorize and regurgitate.
You must understand the ideas and concepts in order to be able to apply them to different problems.
</p>
<hr>
<h3>Miscellaneous Notes</h3>
<p>Here are some other policies/suggestions to keep in mind:</p>
<ol>
<li>Your grade will solely depend on your performance in this semester: you will not get any opportunity to do extra work to improve your grade. It is your duty to make sure you understand what is expected of you. This course will require a fair bit of work so if you are busy this semester, please plan accordingly.</li>
<li>If there is a genuine reason for re-grading, please contact the instructor within a week of when the graded material is handed out in class/completed in the grader. In particular, if you do not pick up/view your graded material on time, you may lose the opportunity to get back to us within the stipulated time period.</li>
<li>Feel free to make up a group of students to work on homework and study the course. Piazza offers a mechanism to search for group-mates. In a course like this it is very important to discuss problems with one another to better study. Teaching is the best way to learn material!</li>
</ol>
<hr>
<h3 id="ai_policy">Academic Integrity</h3>
<p>As a gentle reminder, please re-read the academic integrity policy of the course. I will continue to remind you
throughout the semester and hope to avoid any incidents.</p>
<h4>What constitutes a violation of academic integrity?</h4>
<p>These bullets should be obvious things not to do (but commonly occur):</p>
<ul class="details">
<li>Turning in your friends code/write-up (obvious).</li>
<li>Turning in solutions you found on Google with all the variable names changed (should be obvious). This is a copyright violation, in addition to an AIviolation.</li>
<li>Turning in solutions you found on Google with all the variable names changed and 2 lines adde
(should be obvious). This is also a copyright violation.</li>
<li>Paying someone to do your work. You may as well not submit the work since you will fail the exams
and the course.</li>
<li>Posting to forums asking someone to solve the problem. Note: Aggregating every [stack overflow answer|result from google|other source] because you "understand it" will likely result in full credit on assignments (if you aren't caught) and then failure on every exam. Exams don't test if you know how to use Google, but rather test your understanding (i.e., can you understand the problems to arrive at a solution on your own). Also, other students are likely doing the same thing and then you will be wondering why 10 people that you dont know have your solution.</li>
</ul>
<p>You should know that seeking solutions to the assignment does not fall under solving the problem yourself.
Things that may not be as obvious:</p>
<ul class="details">
<li>Working with a tutor who solves the assignment with you. If you have a tutor, please contact me so that I may discuss with them what help is allowed.</li>
<li>Sending your code to a friend to help them. <b>If another student uses/submits your code, you are
also liable and will be punished.</b></li>
<li>Joining a chatroom for the course where someone posts their code once they finish, with the honor
code that everyone needs to change it in order to use it.</li>
<li>Reading your friends code the night before it is due because you just need one more line to get
everything working. It will most likely influence you directly or subconsciously to solve the problem
identically, and your friend will also end up in trouble.</li>
</ul>
<p>
<b>The assignments should be solved individually with only assistance from course staff and allowed
resources.</b>
You may discuss and help one another with technical issues, such as how to get your compiler running, etc.
It is not acceptable that you both worked together and have nearly identical code.
If that is going to be a problem for you, dont solve the problems in that close of proximity.
</p>
<h4>What Collaboration is Allowed?</h4>
<p>
There is a gray area when it comes to discussing the problems with your peers and I do encourage you to work with one another to solve problems.
That is the best way to learn and overcome obstacles.
At the same time you need to be sure you do not overstep and not plagiarize.
Talking out how you eventually reached the solution from a high level is okay:
</p>
<blockquote>
I used a stack to store the data and then looked for the value to return.
</blockquote>
<p>but explaining every step in detail/pseudocode is not okay:</p>
<blockquote>
I copied the file tutorial into my code at the start of the function, then created a stack and pushed all of the data onto the stack, and finished by popping the elements until the value is found and use a return statement.
</blockquote>
<p>
The first example is OK but the second is basically a summary of your code and is not acceptable, and remember that you shouldnt be showing any code at all for how to do any of it.
Regardless of where you are working, you must always follow this rule: <b>Never come away from discussions with your peers with any written work, either typed or photographed, and especially do not share or allow viewing of your written code.</b>
</p>
<p class="callout">
If you have concerns that you may have overstepped or worked closely with someone, please address this with me <b>prior to deadlines for the assignment</b>, for example by sending me an email as below:
</p>
<blockquote>
Dear Dr. Kennedy, <br/><br/>
I wish to inform you that I ... on my submission for Assignment N.
The functions foo() and bar() are not entirely of my own authorship.
I wish to withdraw my submission to preserve academic integrity.<br/><br/>
J.Q. Student<br/>
Person #12345678<br/>
UBIT: jqstuden<br/><br/>
Sincerely, J
</blockquote>
<p>
Upon receipt of this email, I would award J a zero for Assignment N, but disregard any AI issues with the problematic submission.
</p>
<h4>What Resources are Allowed?</h4>
<p>
With all of this said, please feel free to use any [files|examples|tutorials] that we provide directly in your code (with proper attribution).
Feel free to directly use anything from lecture or recitations.
You will never be penalized for doing so, but should always provide attribution/citation for where you retrieved code from.
Just remember, if you are citing an algorithm that is not provided by us, then you are probably overstepping.
</p>
<p>
More explicitly, you may use any of the following resources (with proper citation/attribution in your code):
</p>
<ul class="details">
<li>Any example files posted on the course webpage (from lecture or recitation).</li>
<li>Any code that the instructor provides.</li>
<li>Any code that the TAs provide.</li>
<li>Any code from the <a href="https://doc.rust-lang.org/book/">Rust Book</a>.
<li>Any code from the <a href="https://doc.rust-lang.org/std/">Rust Standard Library Documentation</a>.
<li>Additional references may be provided as the semester progresses, but only those provided publicly by course staff are allowed to be utilized. These will be listed on Piazza under Resources.</li>
</ul>
<p class="callout">
Omitting citation/attribution will result in an AI violation (and lawsuits later in life at your job). This is true
even if you are using resources provided.
</p>
<p>
Lastly, if you think you are going to violate/have violated this policy, please come talk to me ASAP so we can figure out how to get you on track to succeed in the course.
This policy on assignments is here so that you learn the material and how to think yourself.
There is no benefit to submitting solutions (which likely exist in some form).
</p>
<h4>Formal Departmental AI Info</h4>
<p>
Academic integrity is a fundamental university value.
Through the honest completion of academic work, students sustain the integrity of the university while facilitating the university's imperative for the transmission of knowledge and culture based upon the generation of new and innovative ideas.
</p>
<p class="blocklink">
<a href="https://www.buffalo.edu/academic-integrity.html">The University Office of Academic Integrity.</a>
</p>
<p>
The academic degrees and the research findings produced by our Department are worth no more than the integrity of the process by which they are gained.
If we do not maintain reliably high standards of ethics and integrity in our work and our relationships, we have nothing of value to offer one another or to offer the larger community outside this Department, whether potential employers or fellow scholars.
For this reason, the principles of Academic Integrity have priority over every other consideration in every aspect of our
departmental life, and we will defend these principles vigorously.
It is essential that every student be fully aware of these principles, what the procedures are by which possible violations are investigated and adjudicated, and what the punishments for these violations are.
Wherever they are suspected, potential violations will be investigated and determinations of fact sought.
In short, breaches of Academic Integrity will not be tolerated.
</p>
<h4>Departmental Statement on AI in Homework Assignments</h4>
<p>
The following statement further describes the specific application of these general principles to a common context in the CSE Department environment, the production of source code for project and homework assignments.
It should be thoroughly understood before undertaking any cooperative activities or using any other sources in such contexts.
</p>
<blockquote>
<b>All academic work must be your own.</b>
Plagiarism, defined as copying or receiving materials from a source or sources and submitting this material as one's own without acknowledging the particular debts to the source (quotations, paraphrases, basic ideas), or otherwise representing the work of another as one's own, is never allowed.
Collaboration, usually evidenced by unjustifiable similarity, is never permitted in individual assignments.
Any submitted academic work may be subject to screening by software programs designed to detect evidence of plagiarism or collaboration.<br/><br/>
It is your responsibility to maintain the security of your computer accounts and your written work.
Do not share passwords with anyone, nor write your password down where it may be seen by others.
Do not change permissions to allow others to read your course directories and files.
Do not walk away from a workstation without logging out.
These are your responsibilities.
<b>In groups that collaborate inappropriately</b>, it may be impossible to determine who has offered work to others in the group, who has received work, and who may have inadvertently made their work available to the others by failure to maintain adequate personal security.
In such cases, <b>all will be held equally liable</b>.
</blockquote>
<h4>Departmental Policy on Violations of Academic Integrity</h4>
<p class="blocklink">
<a href="https://engineering.buffalo.edu/computer-science-engineering/information-for-students/undergraduate-program/cse-undergraduate-academic-policies/cse-academic-integrity-policy.html">CSE Departmental AI Policy.</a>
</p>
<p>
The CSE Department has a zero-tolerance policy regarding academic integrity (AI) violations.
</p>
<p>
When there is a potential violation of academic integrity in a course, the course director shall first notify the concerned students.
This notification begins the UB Academic Integrity Policy review and appeals process (Consultative Resolution, Departmental Level Procedures, Decanal Level Procedures, Vice Provost Level Procedures).
</p>
<p>
Upon conclusion of the review and appeals process, if the department, school, and university have determined that the student has committed a violation, the following sanctions will be imposed upon the student:
</p>
<ol>
<li><b>Documentation</b>. The department, school, and university will record the student's name in departmental
decanal, and university-level academic integrity violations databases.</li>
<li><b>Penalty Assessment</b>. The standing policy of the department is that all students involved in an academic integrity violation will receive an F grade for the course and may lose financial aid and/or lose financial support from the department. The course director may recommend a lesser penalty for the first instance of academic integrity violation, and the adjudication committees that hear the appeal at the department, decanal and provost level may recommend a lesser or greater penalty.</li>
</ol>

View File

@ -0,0 +1,6 @@
---
redirect: 2024sp/index.html
title: CSE 350 - Advanced Data Structures
---
Redirecting you <a href="<%=redirect%>">here</a>...

View File

@ -13,12 +13,20 @@ title: Courses
</p>
<ul>
<li><a href="https://cse.buffalo.edu/courses/cse250/" style="font-size: 150%">Fall 2023</a></li>
<li><a href="https://cse.buffalo.edu/courses/cse250/2023-fa/index.html">Fall 2023</a></li>
<li><a href="cse-250/2022fa/index.html">Fall 2022</a></li>
<li><a href="cse-250/2021fa/index.html">Fall 2021</a></li>
</ul>
<h2>CSE 410 (soon to be CSE 350) - Advanced Data Structures</h2>
<p>This course expands on CSE 250 by introducing techniques for data organization that account for the memory hierarchy and the need for concurrent access. Topics include IO Complexity, On-Disk Tree- and Hash- based structures, Write-optimized data structures (e.g., LSM Indexes and Beta-Epsilon Trees), Serialization/Data Layout, Caching, Secondary Indexes, Concurrent Data Structures, and Versioned Data Structures.
</p>
<ul>
<li><a href="cse-350/2024sp/index.html" style="font-size: 150%">Spring 2024</a></li>
</ul>
<h2>CSE 4/562 - Database Systems</h2>
<p>
@ -39,7 +47,7 @@ title: Courses
<h2>CSE 501 - Introduction to Graduate Study in CSE</h2>
<ul>
<li><a href="cse-501/2022fa/index.html" style="font-size: 150%">Fall 2022</a></li>
<li><a href="cse-501/2022fa/index.html">Fall 2022</a></li>
</ul>