Instructor Information

Benjamin Rodriguez

Benjamin M. Rodriguez has a background in statistical signal processing with a focus on data science, intelligent systems and machine learning. His current work duties include research and development in algorithms development, data processing, information retrieval, intelligent system design, recognition techniques, and fusion of multiple data sources, including sensor data for pattern association, decision making and tracking. He has worked on projects related to target identification using SAR, Hyperspectral and Panchromatic imagery along with facial recognition, fingerprint matching, voice recognition, web crawling, and breaking encoded messages within transmitted signals. He also has conducted research in radar, lidar, and optical sensors for target recognition/tracking using generated features, feature preprocessing techniques, classification models and fusion methods. Other areas of his research include pattern recognition using image, signal, and video processing techniques for face recognition, finger print matching, anomaly detection and voice recognition. His software engineering experience includes Unix, Linux, and Window operating systems and programming using assembly, C/C#/C++, ENVI IDL, Java, Matlab, Python and R. Dr. Rodriguez is also a full time Johns Hopkins University - Applied Physics Laboratory (JHU-APL) Principal Professional Staff since 2008 and a Group Supervisor.

Course Information

Course Description

This course provides a survey of computer algorithms, examines fundamental techniques in algorithm design and analysis, and develops problem-solving skills required in all programs of study involving data science. Topics include advanced data structures for data science (tree structures, disjoint set data structures), algorithm analysis and computational complexity (recurrence relations, big-O notation, introduction to complexity classes (P, NP and NP-completeness)), data transformations (FFTs, principal component analysis), design paradigms (divide and conquer, greedy heuristic, dynamic programming), and graph algorithms (depth-first and breadth-first search, ordered and unordered trees). Advanced topics are selected from among the following: approximation algorithms, computational geometry, data preprocessing methods, data analysis, linear programming, multi-threaded algorithms, matrix operations, and statistical learning methods. The course will draw on applications from Data Science. Course Prerequisite(s): EN.605.201 Introduction to Programming Using Java or equivalent. EN.605.203 Discrete Mathematics or equivalent is recommended. Course Note(s): This required foundation course must be taken before other courses in the degree. This course does not satisfy the foundation course requirement for Bioinformatics, Computer Science, or Cybersecurity. Students can only earn credit for one of EN.605.620, EN.605.621, or EN.685.621.

Course Goal

To develop a broad understanding of the issues associated with designing and analyzing the expected performance of computer algorithms, and to develop greater competence and confidence in applying formal mathematical methods when determining the best approach to solving a computational problem.

Course Objectives

  • Analyze algorithms to determine worst-case complexity in terms of time and space requirements.
  • Design algorithms to meet functional requirements as well as  target complexity bounds in terms of time and space complexity.
  • Develop data structure techniques for various aspects of programming.
  • Implement algorithms to assess their actual performance compared to expectations from analysis.

When This Course is Typically Offered

This course is usually offered every semester Online by Dr. Rodriguez.


  • Data Structures
  • Basic Algorithm Analysis
  • Probabilities and Distributions
  • Data Processing
  • Data Transforms
  • Computational Statistics
  • Artificial Intelligence
  • Machine Learning
  • Neural Networks
  • Game Theory
  • Graph Algorithms
  • Deep Learning
  • Optimization
  • NP-Completeness

Student Assessment Criteria

Homework/Programming 80%
Class Discussion/Collaboration 20%

Grading will be based on homework assignments, programming assignments, and class participation/collaboration. Late homework and programming assignments will have a point deduction penalty, please ensure to inform the instructor if the assignment will be late.

Computer and Technical Requirements

Proficiency in C/C++, Java, Matlab, Python, or R is required to complete the programming assignments. Students may use their own compiler, however, the instructor must be able to compile programs on Windows or Mac OS. A headset or speakers are required for this course.

Participation Expectations

Homework has both individual and collaborative problems. Programming assignments are an individual effort.


Textbook information for this course is available online through the MBS Direct Virtual Bookstore.

Course Notes

There are no notes for this course.

Final Words from the Instructor

Algorithms for Optimization, M. J. Kochenderfer and T. A. Wheeler, MIT Press 2019

Artificial Intelligence a Modern Approach, S. Russell and P. Norvig, Fourth Edition, Pearson, 2020

Artificial Intelligence Foundations of Computational Agents, D. L. Poole and A. K. Mackworth, Cambridge, 2017,

Deep Learning, MIT Press, 2016,
Introduction to Algorithms, 3rd Ed., T. H. Cormen, C. E. Leiserson, R. L. Rivest and C. Stein, McGraw Hill ISBN 978-0-262-03384-8

Pattern Recognition and Machine Learning, Springer, 2006,

(Last Modified: 12/28/2021 12:12:13 PM)