This section is geared at providing coding challenges that stretch your skills in a programming language you are already familiar with.
Coursera - Princeton University - Algorithms Part 1Â
Language: Java - concepts transferable to other languages as well
Topics:
Analysis of Algorithms (BigO and Memory)
Union, Search, Sorting
Stacks, Queues, Priority Queues
Balanced Search Trees
Hash Tables
Symbol Tables
Coursera - Princeton University - Algorithms Part 2
Language: Java - concepts transferable to other languages as well
Topics:
Graphs
Minimum Spanning Trees
Shortest Paths
Maximum Flow and Minimum Cut
Radix Sorts
Tries (vs Trees)
Substring Search
RegEx (Regular Expressions)
Data Compression
Reduction
Linear Programming
Intractability (P, NP, NP-Complete)
The Odin Project - Web Development Training
Ruby on Rails
React
HTML/CSS/JS
Databases
NodeJS
Youtube - Procedural Animation (Make a snake, fish, or lizard using linked circles) - This is not a tutorial, but a conceptual overview of the process.
No info here... Google it.
Get Data Files
Using Python, Java, or some other resources, parse through the data to find relevant information.
Display results in a meaningful way.
Different Data Structures have different purposes. Each one stores large amounts of data, but the speed with which you can access, add, remove, search, sort, etc. is different for each. It's important to use the "correct" data structure for the "correct" purpose for efficiency (important when dealing with large quantities of data.
Add/Insert/Push/Enqueue (to the beginning, end, and in the middle)
Override an existing value
Remove/Pop/Dequeue (from the beginning, end, and middle)
Search (Binary, Linear)
Sort (explore the different sorting algorithms... I'm not listing them all here)
Some data structures are pre-sorted (trees)
How these work (algorithm) and their efficiency (Big-O) varies depending on the data structure.
A "quick" (17 min) video outlining Data Structures was created by ForrestKnight - 8 Data Structures Every Programmer Should Know.
Arrays - Fixed size, Random Access.
ArrayLists - An array turned into an Object that has can "Dynamically" resize, making adding more or removing really quick and efficient.
Linked Lists - nodes connected by pointing at the next node.
Doubly-Linked Lists - nodes point forwards & backwards
Circularly-Linked Lists - last node points back to the first node.Â
Specialized Linked Lists meant add, peek, and remove from the front or back of the list.
Queues (FIFO - First In, First Out - Think check-out Lines) - enqueue, dequeue
Stacks (LIFO - Last in, First Out - Think Pez/Quarter Dispenser, or a stack of plates) - Push, Pop
Trees
Binary Tree
M-Trees
Heaps
HashTables & Hashmaps (Key-Value)
Graphs - an array of objects, each object providing a linked-list of objects they're connected to.
Check out the brief summary on search algorithms from MazeStar Curriculum: An Introduction to Computing, Self, and Society
Breadth-First Search (BFS)
Depth-First Search (DFS)
Dijkstra's Algorithm
A*
Maximum Flow Algorithm
Minimum Spanning Tree Algorithm
Write algorithms for various aspects of a Game
Chess
Board Initialization
Display Board
Determine if a move is legal (for a piece at a given location)
Move a Piece
Get list of legal moves (for a piece at a given location)
remove legal moves that would checkmate your own king
King in Check detection
King in Checkmate detection
Draw and Stalemate detection
Player turn switch
Board evaluation(score potential moves)
AI Movement (based on Board Evaluation)
Record Move (into a stack of moves)
UndoMove (from the stack of moves)
Optional Additions
Optimal chess piece move (based on a score)
Castling
En Passant
Pawn Promotion
Battleship
isHit function to determine if a location on a BattleShip board was hit
Connect 4
isValidMove
PlacePiece
CheckWin