Data Structures and Algorithms Encyclopedia Project

You may recall that one of the stated goals of this course is that you become aware of a wide variety of data structures and algorithms.  It was not our goal that you memorize every common data structure or "classic" algorithm.  But, we do think it is important that you have an idea that they exist and have experience with many of them.  We also think it is important that you are able to research a new topic and digest the materials you find into something meaningful for you, your students, and, in this situation, your peers.

In order to give you something that you can take away from this course and actually use in the future, we are going to spend parts of the last few weeks crowd-sourcing the development of a reference guide/encyclopedia for the following common data structures and algorithms.

Common Data Structures

  1. Arrays - Previously Covered
  2. Stacks - Previously Covered
  3. Queues - Previously Covered
  4. Deques - Previously Covered
  5. Priority Queues - Previously Covered
  6. Trees
    • Binary Search Trees
    • AVL Trees
    • B Trees
    • Red Black Trees
  7. Heaps
  8. Hash Tables (aka Hash Maps, Dictionaries)
  9. Linked Lists
  10. Graphs
    • Adjacency Matrix
    • Adjacency List
  11. Tries (a variation of trees worth calling out separately)

 

Common Algorithms

  1. Searching and Sorting
    • Linear Search - Previously Covered
    • Binary Search - Previously Covered
    • Insertion Sort - Previously Covered
    • Selection Sort - Previously Covered
    • Bubble Sort - Previously Covered
    • Quick Sort - Previously Covered
    • Merge Sort - Previously Covered
  2. Graph Search Algorithms
    • Breadth First Search - Previously Covered
    • Depth First Search - Previously Covered
    • A* Search (Informed Search) - Previously Covered
    • Dijkstra's Algorithm (Shortest Path from source to all vertices)
    • Floyd Warshall (Shortest Path from every vertex to every other vertex)
    • Prim's Algorithm (Minimum Spanning Tree)
    • Kruskal's Algorithm (Minimum Spanning Tree)
  3. Dynamic Programming
    • MiniMax Algorithm
    • Longest Common Subsequence
    • Longest Increasing Subsequence
    • Set Partition
    • 0-1 Knapsack Problem

 

Since we have such a large group this semester, we are going to divide into four different reference guides. Right now you will only have access to your guide. But when the project is over you will get access to all four guides. You were previously given access to this this document using your UNI credentials (which are linked to Google).

 

You have all been assigned a group which is, in most cases, two people and each group has a team code.

 

Using this information, you will complete the project by performing the following steps on the following schedule.

Step Due Date (all dates by end of day) How to Submit
First Draft of Article #1 November 24th Share your document with Dr. Schafer and the people assigned to peer review your draft.
Peer Review of Article #1 December 1st Either email the original authors or use the comment feature in Google Docs.
Publish Final Draft of Article #1 December 8th Add your article to appropriate Guide (links above and shared with your teams at the start)
     
First Draft of Article #2 December 1st Share your document with Dr. Schafer and the people assigned to peer review your draft.
Peer Review of Article #2 December 8th Either email the original authors or use the comment feature in Google Docs.
Publish Final Draft of Article #2 December 15th Add your article to appropriate Guide (links above and shared with your teams at the start)

 

 

 

Project #1 - Documenting what we  have studied so far

Each team will be assigned one (or more) of the data structures/algorithms that we have already studied this semester.  Those assignments are as follows:

Topic Guide A Guide B Guide C Guide D
  Authors Peer Review Authors Peer Review Authors Peer Review Authors Peer Review
Arrays A-4 A-2 B-14 B-15 C-8 C-10 D-15 D-12
Stacks A-10 A-11 B-10 B-1 C-3 C-4 D-4 D-9
Queues A-14 A-9 B-8 B-10 C-7 C-14 D-11 D-13
Deques A-8 A-10 B-13 B-7 C-15 C-12 D-14 D-8
Priority Queues A-6 A-15 B-15 B-4 C-4 C-9 D-10 D-2
Linear Search A-7 A-3 B-6 B-12 C-11 C-13 D-1 D-5
Binary Search A-9 A-13 B-11 B-13 C-14 C-8 D-13 D-15
Insertion Sort A-12 A-7 B-9 B-6 C-10 C-2 D-6 D-1
Selection Sort A-13 A-12 B-5 B-9 C-1 C-5 D-2 D-6
Bubble Sort A-15 A-1 B-4 B-3 C-13 C-15 D-12 D-7
Quick Sort A-5 A-6 B-2 B-14 C-6 C-1 D-9 D-11
Merge Sort A-1 A-14 B-3 B-8 C-2 C-6 D-5 D-3
Breadth First Search A-2 A-5 B-7 B-2 C-12 C-7 D-8 D-10
Depth First Search A-3 A-4 B-12 B-5 C-9 C-11 D-3 D-4
A* Search A-11 A-8 B-1 B-11 C-5 C-3 D-7 D-14

 

 

First Draft (Due by Monday, November 24th, 11:59 PM)

You should research your assigned topic. This includes:

 

Once you have completed some thorough research you should produce a document that you feel summarizes the things you have learned/found.  This document likely includes, but is not limited to, the following topics:

  1. A written description/summary of the topic. 
    • How and why it "works"
    • Where it often used in computer science
    • Comparisons to other topics that might be in this document
  2. At least one code representation of the topic (it may be helpful to have BOTH):
    • Pseudocode of the topic
    • Standalone python implementation
  3. At least two classroom appropriate examples/applications with the underlying code and data
    • The idea here is that someone can use your code and immediately start fiddling with examples
  4. A bibliography of helpful references/links

You want to think about this assignment less like a "classroom essay" and more like a "book chapter" or "study document"  The actual format and content will likely swing fairly widely for this first part of the document depending on what your topic really is.  But the goal is that you take the time to produce something HELPFUL for your peers and, collectively, your students.

NOTE: You MAY use ChatGPT and other AI tools to help you learn this material. However, it is your responsibility to verify the validity of what the AI is trying to tell you and you should make every effort to understand what it is saying and not just parrot back the AI response word for word.

 

For this deliverable I would like you to email a PDF, Word doc, or share a Google Doc link of your deliverable by NO LATER THAN the end of the day on Monday, November 24th with:

 

 

 

Peer Review (Due by Monday, December 1st, 11:59 PM)

By Monday, November 24th you should receive a copy of a draft article from another group (see above).

Go through their writeup carefully. Make detailed notes that you can share with the author to help them improve their document. Some of these notes could include:

In other words, as a fellow teacher, how can you help them improve this write up.

For this deliverable I would like you to email the original authors your feedback (or leave using the commenting tool in Google Docs) NO LATER THAN the end of the day on Monday, December 1st.

 

 

Final Version(Due by Monday, December 8th, 11:59 PM)

You will receive feedback from your peers, and possibly from me as well. You should consider that feedback carefully. If we have something to say that you agree improves your deliverable, you should revise your write-up. It is NOT necessary that you make every change/improvement that they suggest. But you should make such decisions very carefully and deliberately.

When you feel your work is completed you should add your final version to the appropriate document and under the appropriate heading.  This should be done as a copy/paste from your original source document. NOTE: Do NOT use the large group's document as a place to edit/build/write your deliverable. Please be careful not to delete anyone else's work.  [One of the reasons I am having you only cut and paste at the end is that I want to be able to easily "retrieve" work that gets accidentally destroyed by others.]

 

 

Project #2 - Topics we haven't studied yet

Once that you have gotten the hang of this process with a data structure or algorithm that was somewhat familiar to you, we will be working on a second topic which is new to you. Repeat the process above for this new topic. This has identical deliverables and expectations as the previous part of the project. You will actually be doing them in parallel. However, this one is likely going to be a bit more difficult because neither you, nor your partner, will know much about this other than what you research/write.

 

Topic Guide A Guide B Guide C Guide D
  Authors Peer Review Authors Peer Review Authors Peer Review Authors Peer Review
Binary Search Trees A-1 G1-10 B-6 B-12 C-8 C-13 D-12 D-15
AVL Trees A-3 A-5 B-1 B-10 C-5 C-2 D-14 D-12
B Trees A-14 A-4 B-3 B-13 C-7 C-14 D-11 D-8
Binary Heaps A-2 A-9 B-8 B-5 C-4 C-6 D-6 D-10
Hash Tables A-11 A-15 B-7 B-2 C-3 C-4 D-13 D-7
Linked Lists A-15 A-7 B-11 B-1 C-15 C-11 D-8 D-13
Graphs - Adjacency Matrix A-12 A-2 B-15 B-8 C-9 C-3 D-5 D-2
Graphs - Adjacency List A-9 A-11 B-14 B-7 C-10 C-1 D-7 D-14
Tries A-10 A-8 B-12 B-15 C-2 C-9 D-4 D-6
Dijkstra's Algorithm A-6 A-12 B-4 B-9 C-1 C-5 D-3 D-4
Floyd Warshall Algorithm A-13 A-6 B-9 B-14 C-12 C-15 D-15 D-11
Prim's Algorithm A-4 A-1 B-13 B-4 C-14 C-12 D-9 D-3
Kruskal's Algorithm A-7 A-13 B-10 B-6 C-11 C-8 D-10 D-1
MiniMax Algorithm A-8 A-14 B-5 B-3 C-6 C-10 D-2 D-9
Set Partition A-5 A-10 B-2 B-11 C-13 C-7 D-1 D-5