### Algorithms and data structures 1

Well designed data structures and the efficient algorithms
for their processing are the very basis of computer science.

The goal of the course is to acquire the basic
principles of design and analysis of algorithms and basic and dynamic data
structures for problem solving. We will present the basic principles for
problem solving, the relation between iteration and recursion, the analysis of
time-complexity of algorithms, the concept of abstract data type and the
definition and implementation of basic abstract data types:  list, set,
queue, stack, mapping, tree, dictionary, priority queue, disjunctive sets,
graph and directed graph, as well as basic algorithms for graph analysis:
searching for longest paths and searching for shortest paths in directed
graphs, and building the minimum spanning tree in undirected graphs. At the end we will present also the basic principles for proving the correctness of programs.
At the end we will present also the basic
principles for proving the correctness of programs.

Student's obligations:  on time finished and
positively graded homeworks (web quizes and other reports),  on time finished and positively graded two
seminar works, written exam. The exercises grade is
a joint grade for two seminar works. Each seminar work has to be finished on
also that you achieve at least half of the points from homeworks (web quizes and
other reports). Exam is written (and optionally the oral part). The
precondition for the written exam is the positive grade from exercises. At the
written part of the exam, from the literature it is allowed to use an A4 sheet
of paper, hand written with an ordinary pencil (that can be rub out) and signed
with a ball-point pen (name, surname and the inscription student number)
(photocopies and prints are not allowed). At the end of the exam, this sheet of
paper has to be given to assistant together with the written exam. The
precondition for the (optional) oral exam is positive grade from written exam. Final