Algorithms are fundamental to computer engineering. The real-world performance of any software or hardware system depends on two things: (1) the algorithms chosen, and (2) the suitability and efficiency of the implementation. Good algorithm design is, therefore, crucial for the performance of all systems. Moreover, the study of algorithms provides insight into the intrinsic nature of the problem as well as possible solution techniques independent of programming language, computer hardware, or any other implementation aspect.
Design algorithms using the brute-force, greedy, and divide-and-conquer strategies.· Design an algorithm using at least one other algorithmic strategy from the list of topics for this unit.· Use and implement the fundamental abstract data types—specifically including hash tables, binary search trees, and graphs—necessary to solve algorithmic problems efficiently.· Solve problems using efficient sorting algorithms, and fundamental graph algorithms, including depth-first and breadth-first search, single-source and all- pairs shortest paths, transitive closure, topological sort, and at least one minimum spanning tree algorithm.· Demonstrate the following abilities: to evaluate algorithms, to select from a range of possible options, to provide justification for that selection, and to implement the algorithm in simple programming contexts.