This course covers mathematical fundamentals of algorithms and algorithmic techniques. Running time analysis of an algorithm, searching, sorting, and other techniques associated with retrieving information are covered. Advanced Data structures such as Binary Search Trees, Heaps, and graph algorithms are used. Dynamic programming (Knapsack, Floyd, DNA Algorithms), and greedy algorithms (Coins, Scheduling, Huffman encoding, etc.) are used. Course requires written programming assignments. Prerequisites: CS-130 and MA-124. Offered spring semester only. (3-0-3)