Skip to content
Snippets Groups Projects
Commit e6e18305 authored by Kevin Lin's avatar Kevin Lin
Browse files

research-project: Revise design and analysis phase based on feedback

parent fa5f5346
No related branches found
No related tags found
No related merge requests found
Pipeline #399730 passed with stages
in 58 seconds
......@@ -20,15 +20,31 @@ description: Exploring possibilities and limits of data structures and algorithm
---
Throughout the course, we've learned how to design, analyze, and critique data structures and algorithms (and applications thereof). The research project is an opportunity to extend course concepts and examine the possibilities ([design and analysis](#design-and-analysis)) and limits ([critique](#critique)) of computing by synthesizing your learning in blog posts and video presentations.
Throughout the course, we've learned how to design, analyze, and critique data structures and algorithms (and applications thereof). The research project is an opportunity to extend course concepts and examine the possibilities ([design and analysis](#design-and-analysis)) and limits ([critique](#critique)) of computing by synthesizing your learning in blog posts and video presentations. An outcome of the research project is to create learning materials for data structures and algorithms not typically taught at the undergraduate level.
Unlike the standardized projects, the research project involves a large amount of independent research and self-study beyond the course's core learning objectives. Since the research project represents an opportunity to extend knowledge beyond the expectations of the course, assistance from course staff will be more guidance rather than direct support. Focus on satisfactory completion of everything else before beginning the research project---the research project is only required for students aiming for the highest final grades. We expect it will be at least double the work of the standardized projects. Most of the remaining class meetings are cancelled so that students can focus on the research project or resubmitting earlier work.
## Design and analysis
In this phase, your project team will research one of the following computational problems and produce a **blog post** and **video presentation** (up to 10 minutes; featuring all team members) explaining various algorithms applying the concept, comparing and contrasting each new idea against the lessons introduce in the course. Describe the design of each data structure and algorithm in enough detail to teach it to another student. Then, give an asymptotic analysis and experimental analysis for each implementation. Your design implementation can be in any programming language: we recommend choosing the language that provides as close to a functioning implementation for the data structures as possible in order to streamline the design phase.
In this phase, your project team will research one of the following computational problems and produce a **blog post** and **video presentation** (up to 10 minutes; featuring all team members).
Choose one of the following project themes for the **design and analysis phase**.
First, **motivate** the problem that you're solving. Why are you passionate about this problem? How does the problem and its solutions expand on concepts introduced in this course? Consider how our study of data structures and algorithms has been motivated by different kinds of analysis. Balanced search trees helped us improve asymptotic runtime bounds over (unbalanced) binary search trees. Binary heaps can share the same asymptotic runtime bounds as balanced search trees, but are often faster in experimental runtime. And we introduced affordance analysis as a tool for solving problems beyond sets, maps, and priority queues. How does your problem fit into the rest of the course?
Then, describe the **design** of each data structure and algorithm in enough detail to teach it to another student.
Interface
: Design an interface for solving the problem.
: Design an experimental analysis benchmark that uses the interface.
Implementation
: Implement a simple baseline approach for solving the problem inefficiently.
: Implement at least 3 other approaches for solving the problem. This should not require implementing anything from scratch but instead involve understanding and adapting existing implementations to the interface you've designed.
Your implementation must be in Java. If you need other programming languages, submit an Ed Discussion board question detailing your request.
Finally, give an **asymptotic analysis** and **experimental analysis** for each implementation. If your interface cannot be described as a type of set, map, or priority queue, give an **affordance analysis** for the interface towards solving the problem.
Select one of the following design and analysis themes.
### Space partitioning algorithms
......@@ -58,13 +74,21 @@ Some probability theory may help with understanding. For a formal introduction t
Efficient use of contiguous memory structures such as arrays are critical to high-performance applications. Across Google datacenters, [more than 4% of fleetwide memory is owned by a hash table](https://youtu.be/ncHmEUmJZf4?t=228)---and this is only counting code written in C++. As demand for computation continues to grow, it will be increasingly important to design efficient algorithms that reduce system memory usage and improve running time efficiency. What kinds of techniques can we employ to design more memory-friendly and cache-efficient data structures?
1. [Swiss tables](https://www.youtube.com/watch?v=ncHmEUmJZf4) ([documentation](https://abseil.io/about/design/swisstables))
1. [Swiss tables](https://youtu.be/ncHmEUmJZf4) ([documentation](https://abseil.io/about/design/swisstables))
1. [Bloom filters](https://www.jasondavies.com/bloomfilter/) ([Stanford lecture notes](https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1206/lectures/esoteric-data-structures/#bloom-filters))
1. [Suffix arrays](https://www.algorist.com/problems/Suffix_Trees_and_Arrays.html) ([UCSD lecture video](https://youtu.be/IzMxbboPcqQ))
### Something else
Some familiarity with the concept of bits and bytes may help with understanding.
### Algorithms for your existing research
For students already engaged in a computational research project outside of the course, the research project can be related to your existing research if it relates to the themes of the course. Your research project proposal must be part of a real problem that you're already working on that cannot be solved using standard approaches in the undergraduate computer science curricula such as [CSE 417: Algorithms and Complexity](https://courses.cs.washington.edu/courses/cse417/). For example, a bioinformatician may be interested in learning more about efficient data structures and algorithms for building genome databases.
Submit a proposal as an Ed Discussion board question addressing the following questions including relevant references.
Propose your own computational problem. [The Stony Brook Algorithm Repository](https://www.algorist.com/algorist.html) is an excellent starting point that catalogs computational problems, algorithms for solving them, and program implementations of each algorithm.
- What is your research context? Describe the abstract data type or computational problem.
- Describe a simple baseline algorithm for solving the problem. Outline 3 other approaches that you suspect would be more efficient.
- Do the 3 approaches lend themselves more towards asymptotic analysis, experimental analysis, or affordance analysis? For example, asymptotic analysis may not be helpful if we expect that the order of growth will be about the same, and affordance analysis may be more important if the 3 approaches do not all implement the same interface.
## Critique
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment