STEM Program
Algorithms, Data Structures and Python
Faculty Advisor: Professor and Director of Undergraduate Studies, Mathematics, Georgia Institute of Technology
Research Practicum Introduction
Algorithms are the heart of computer science. The subject has countless practical applications as well as intellectual depth. In this program, you will learn Algorithms, Data Structures and the programming language Python. Students that enjoy mathematics and/or computer science will enjoy this program. After completing this program, students will understand how many real-world programs work, and will also be able to write their own programs in Python.
Algorithms require data. When we think of data, we think of tables with information, like excel spreadsheets. But data is stored in different forms. These different forms are called data structures. Examples of data structures that you will learn about in this program include queues, trees, stacks. The selection of the right data structure is fundamental to the development of efficient algorithms. Python is one of the most modern and used programming languages.
In this program, you will learn the most powerful and commonly used classes of algorithms, how data is arranged in different data structures to support the algorithms, and the programming language Python to implement the different algorithms. You will be provided with videos and other material to supplement your learning (including programming exercises to practice). Your assignment will be to select a project from the list. This project will lead to your programming an algorithm in Python and writing a paper explaining your work and findings. You will be asked to select your project within two weeks of the first meeting. You will be asked to do a small informal presentation (5 to 10 minutes) during the last meeting and complete your paper.
Possible Topics Covered in Meetings:
Why study algorithms?
Introduction to Python: data types, variables, and basic operations
Basic algorithms and their implementation in Python
Fibonacci numbers: Naïve vs Efficient algorithms
Greatest common divisor and Euclidean algorithm
Big-O notation and computing run times
Greedy algorithms: Main ideas and examples
Dynamic programming: revisiting the money change problem
Python implementations of greedy and dynamic programming algorithms
Divide and conquer algorithms: Naïve sort vs Merge sort
Probability: outcomes, events, and random variables
Simulations in Python
Trees, binary trees, and object-oriented programming in Python
Graphs and graph algorithms
Introduction to video game creation using Pygame
Possible Topics For Final Project:
Design Your Own Video Game with Pygame
Crack the Code: Build a Sudoku Solver Using Backtracking
Map It Out: Find the Fastest Path with Graph Algorithms
Optimize Your Travel: Create an Algorithm for the Best Flight Itineraries
Decode the DNA: Implement Genome Reconstruction Algorithms
Discover DNA Secrets: Build an Algorithm to Find Functional DNA Segments
Encrypt and Secure: Develop a Cryptographic Algorithm
Shape the World: Apply Computational Geometry to Build Maps
Shrink It Down: Master File Compression Algorithms
Balance the Books: Create a Cash Flow Minimizer Algorithm
Conquer Mazes: Design and Code a Maze-Solving Algorithm
Or other topics in this subject area that you are interested in, and that your professor approves after discussing it with you!
Program Detail
Cohort Size: 3-5 students
Duration: 12 weeks
Workload: Around 4 hours per week (including class and homework time)
Target Students: 9-12th grade students interested in Mathematics, Computer Science, Machine Learning, and/or Interdisciplinary STEM studies.
Prerequisites: None. Students are not expected to know Python, to have any programming experience or know anything about Algorithms or Data Structures. The faculty advisor will provide all the necessary materials to learn.
Schedule: TBD (meetings will take place for around one hour per week, with a weekly meeting day and time to be determined a few weeks prior to the class start date)