COT 5407: Algorithms Essentials

The aim of this course is to develop students’ abilities to analyze the correctness and complexity of algorithms, including graph algorithms, familiarize students with the fundamentals of developing efficient algorithms, including classical algorithm design strategies and data structures and introduce students to the theory of NP-Completeness.

By the end of this course, students will be able to:

  • Prove the correctness or incorrectness of iterative and recursive algorithms.
  • Apply the formal definition and properties of Big-Oh, Big-Omega, and Big-Theta notation to prove claims involving Big-Oh notation.
  • Analyze the worst-case time complexity of iterative algorithms using Big-Oh notation.
  • Analyze the worst-case time complexity of recursive algorithms using Big-Oh notation, recursion tree analysis, or the Master Theorem.
  • Apply several traditional search and graph algorithms to problems and describe the advantages and disadvantages of these search algorithms.
  • Develop efficient algorithms using appropriate data structures and algorithm design strategies, including divide-and-conquer, dynamic programming, greedy algorithms, graph traversals, and backtracking.
  • Prove that problems belong to classes P, NP, NP-Hard, and NP-Complete on the basis of a given problem reduction. 

List of topics covered: 

Big-Oh notation, algorithm analysis, Sorting Algorithms, Data Structure reviews, Dynamic Programming, Greedy Algorithms, Dynamic Programming, Graph algorithms, Backtracking, Complexity Theory, etc.

Faculty Profile:

Dr. Hendrix





Assistant Professor of Instruction
Computer Science and Engineering
ENB 301C |

Dr. William Hendrix is an Assistant Professor of Instruction and Undergraduate Coordinator for the Computer Science and Computer Engineering programs at USF. He received his PhD at North Carolina State University and taught at Northwestern University for two years before moving to USF in 2015. He is passionate about teaching and learning and is very excited to be a part of the Bridge to Computing program.