2.3.1a Analysis and design of algorithms for a given situation
2.3.1b The suitability or different algorithms for a given task and data set, in terms of execution time and space
2.3.1c Measures and methods to determine the efficiency of different algorithms, Big O notation. (Constant, linear, polynomial, exponential, and logarithmic complexity)
2.3.1d Comparison of the complexity of algorithms
2.3.1e Algorithms for the main data structures, (Stacks, queues, trees, linked lists, depth-first (post-order) and breadth-first traversal of trees)
2.3.1f Standard algorithms (Bubble sort, insertion sort, merge sort, quick sort, Dijkstra's shortest path algorithm, A* algorithms, binary search and linear search)