COURSE GOALS: Acquire knowledge in data structures and algorithms in generic programming languages, with applications to C; acquire operational knowledge related to solving problems in informatics.
LEARNING OUTCOMES AT THE LEVEL OF THE PROGRAMME:
1. KNOWLEDGE AND UNDERSTANDING
1.3. demonstrate knowledge and understanding of basic experimental methods, instruments and methods of experimental data processing in physics;
2. APPLYING KNOWLEDGE AND UNDERSTANDING
2.2. recognize and follow the logic of arguments, evaluate the adequacy of arguments and construct well supported arguments;
2.5. use information and communication technology efficiently (to foster active enquiry, collaboration and interaction in the classroom);
2.6. create motivating environment for active learning, which encourages the development of skills and knowledge of all students;
3. MAKING JUDGMENTS
3.3. reflect on and evaluate their own practice of teaching;
3.4. take responsibility for the successful implementation and execution of teaching tasks;
4. COMMUNICATION SKILLS
4.1. communicate effectively with pupils and colleagues;
4.2. present complex ideas clearly and concisely;
LEARNING OUTCOMES SPECIFIC FOR THE COURSE:
* write recursive algorithms and understand how they work
* demonstrate knowledge of various data structures and implement them
* determine the complexity of an algorithm and compare efficiencies of alternative algorithmic solutions
* apply various approaches to programming in practice
* determine what type of algorithm fits best to a particular problem and implement that algorithm
COURSE DESCRIPTION:
Lectures per week (15 weeks in total):
1.) Introduction and basics of data structures
2.) C syntax
3.) Abstract data types, fields, pointers
4.) Structures and procedures
5.) Recursions
6.) Analysis of algorithm complexity
7.) Lists and stacks
8.) Stacks and rows
9.) Trees and walkarounds
10.11.) Binary trees
12.) Sets and dictionaries
13.) Tables and relations
14.15.) Algorithm shaping
The exercises follow lectures by content.
REQUIREMENTS FOR STUDENTS:
The students need to take 2 midterm exams, each of which needs to be solved at least 50% with one complete assignment and attend at least 70% of classes.
GRADING AND ASSESSING THE WORK OF STUDENTS:
During the semester, the grade is continuously composed of:
* Two midterms, each of which can be taken twice, which carry 50% of the grade
* Oral exam, which carries 50% of the grade

 Introduction to Algorithms, The MIT Press, Cambridge, Massachusetts, (Thomas H. Cormen, Charles E.Leiserson, Ronald L. Rivest, Clifford Stein)
