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;
1.6. list and describe the methods for manipulating data, basic principles of databases and fundamental algorithms in programming;
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. describe the basic concepts of digital technology;
2.6. apply fundamental algorithms in programming;
2.7. use computing technology to solve scientific and technological problems;
2.9. create a learning environment that encourages active engagement in learning and promotes continuing development of pupils' skills and knowledge;
3. MAKING JUDGMENTS
3.1. develop a critical scientific attitude towards research in general, and in particular by learning to critically evaluate arguments, assumptions, abstract concepts and data;
3.4. accept responsibilities in planning and managing teaching duties;
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)
