The best developers learn by experience.  We learn by seeing other solve problems and by imitating that to solve problems more efficiently ourselves.  Algorithms are like road maps for accomplishing a given, well-defined task.

In this course, we’ll help you demystify the motivation and intent of Algorithms in general.  You’ll gain hands on experience with several foundational algorithms and Big O notation.  Not only will you learn to code the algorithms covered from “scratch”, you’ll also walk away with an understanding of how data structures in the Java language implement and leverage these algorithms.

This course is available in other languages upon request.

Course Duration: 3 Days
Prerequisites:

Solid Java programming skills are required. At least 6 months of hands on experience with Java or graduating a Java boot camp are required.

Course Objectives:
  • Be able to explain the guiding principles behind analyzing an algorithm
  • Implement code and discuss the intent of the Merge Sort algorithm
  • Gain a deeper appreciation of the Java Collection Framework
  • Work hands on with less common collection classes
  • Understand and demonstrate Big O notation
  • See the benefits and speed of good hashing algorithms
  • Implement code and explain the motivation for using a Quicksort
  • Practice fundamental graph concepts
  • Learn to implement a Breath First Search
  • Implement code and analyze Dijkstra’s Algorithm
Course Outline:
  • Introduction
    • Algorithms – why bother?
    • The Power of Algorithms
  • Data Structures – Part One (The Java Collection Framework)
    • The Collections Framework and its API
    • Collections and Java Generics
    • Collection, Set, List, Map, Queue
    • Autoboxing
    • Collections of Object (non-generic)
    • Using ArrayList, HashSet, HashMap, NavigableMap, LinkedList
    • for-each Loop
    • Processing Items with an Iterator
    • Sorting- Collections.sort(), TreeMap and TreeSet, Comparable and Comparator
  • Data Structures – Part Two (Streams)
    • The Stream API
    • What are Streams?
    • Streams and Collections
    • Filtering Collections
    • Chaining and Pipelining
    • Processing Techniques
    • Extracting Data – searching, sorting, performing
  • Merge Sort
    • Motivation and Intent
    • Psuedocode
    • Analysis
    • Implementation
  • Asymptotic Analysis and Big O Notation
    • Why Asymptotic?
    • Big O Fundamentals
    • Big Omega and Theta
  • Hash Tables
    • Hashing Explained
    • Motivation
    • More Effective Java
    • Implementation
  • Quicksort
    • High Level Description
    • Performing Quicksort
    • Examining the Running Time
  • Breath-First Search (BFS)
    • Getting Started with Graphs
    • Motivation for BFS
    • Implementing BFS
  • Dijkstra’s Algorithm <optional – if time allows>
    • Terms to Know
    • Intent of Dijkstra
    • Implementation