In this course, the students will develop their knowledge of algorithms, data structures and programming. The programming language used in the course is Python.
Algorithms and data structures: A systematic overview of the concepts abstract data types, stacks, queues, lists, trees, searching, sorting and recursion based on the knowledge the students acquired in the course Programming Techniques. Hashing. Priority queues. Search trees. Problem trees. Text searching. Simple syntactical analysis. Algorithm analysis. Cryptography.
Programming: Program quality. Abstraction. Modularisation. Testing. System calls. Standard modules.
Basic ethics: Fundamental ethical concepts, computer ethics.
After passing the course, the student shall be able to
- systematically test programs to discover errors
- use abstraction as a tool to simplify the programming
- select an appropriate algorithm to a given problem
- compare algorithms with regard to time and memory usage
- describe algorithms for searching and sorting and their properties
- formulate and implement recursive algorithms
- write a small BNF syntax (less than 10 rules) for a formal language and write a program that examines whether an expression follows a BNF syntax
- model problems as search problems and implement algorithms for breadth-first search, depth-first search and best-first search
- describe basic compression algorithms and for which types of compression they are used
- design an automaton for text search and describe how it is working
- implement stacks and queues and use these
- implement insertion, traversal, and search operations for binary search trees and general trees and use these
- implement hash tables and hash functions and use these
- use priority queues
- use simple encryption methods and explain the principles of asymmetric encryption
- identify problems where the data structures above are useful and design simple algorithms with these
- analyse and evaluate ethical consequences of computer science applications
in order to
- become a good problem solver using programming
- be able to use computational methods in application projects
- acquire sufficient prior knowledge to be able to take advanced courses in computer science.