Abstract | Introduction to basic problem solving methods, algorithms, and data structures. Topics: divide and conquer, recursion, sorting algorithms, backtracking, game tree search, data structures (lists, stacks, binary trees, etc.), discrete simulation, concurrency, complexity, verification. In the assignments and exercises, the programming language Java is used. |

Objective | Introduction to the general methods of computer science for electrical engineers. Also provides basic skills for advanced exercises and projects later in the electrical engineering program. |

Content | Part II of the lecture concentrates on the most common problem solving skills, algorithms, and data structures. It also teaches fundamental concepts and mechanisms of structured programming. Furthermore, working with formal systems, the necessity of abstraction, and the importance of modeling in computer science will be motivated. The emphasis of the lecture is on practical concepts of computer science. Specific topics are: complexity and correctness of algorithms, divide and conquer, recursion, algorithms for sorting, backtracking, game tree search, data structures (lists, stacks, inary trees, etc.), discrete simulation, concurrency, and verification. For the assignments and exercises, the programming language Java is used. Here, also modularization, abstraction, encapsulation, and object orientation will be considered. Occasionally, short remarks on the historical context of relevant concepts are given. In the practice groups, students program an automatic player for the game "Reversi"; at the end of the semester a tournament will take place. |

Lecture notes | Copies of slides, extended with bonus slides that give hints to advanced concepts and present the historical context of selected concepts. |

Literature | Textbook: Mark Allan Weiss: Data Structures and Problem Solving Using Java, Addison Wesley. |

Prerequisites / Notice | Prerequisite: Part 1 of the course. |