The course will teach the algorithms, heuristics, and code development skills in solving numerous sorting, graph theory, string processing, and job scheduling problems. It provides both a broad coverage of basic algorithms and data structures and in-depth coverage on selected topics. Moderate to heavy programming in C or Python is expected. Through this study the students will improve their problem-solving skills via various algorithm development examples and exercises.