- algorithm, time and space complexity

- divisibility of numbers, Euclid algorithm

- prime number test, Eratosthenes sieve

- decomposition of numbers into digits

- higher precision arithmetic ("long numbers")

- Horner's scheme, positional number systems

- searching algorithms (sequential, binary, breakpoint)

- sorting - direct methods, heapsort, mergesort, quicksort

- complexity of the sorting problem

- bucket sorting

- external sorting

- data representation in memory - memory allocation, garbage collector

- stack, queue, dictionary, heap

- linked list

- recursion - principle, examples, complexity

- binary and general tree

- arithmetic notation - evaluation, conversions

- binary search tree, balancing principle

- hash table

- data representation of graphs

- graph searching, basic graph algorithms

- DFS and BFS in state space

- backtracking acceleration methods - cutting, heuristics

- game programming, minimax algorithm

- Divide and Conquer method

- dynamic programming

Knowledge in the scope of the lecture NMIN111 Programming 1 is expected.

The second part of basic course of programming for first-year students of mathematics. The course covers programming in Python, basic algorithms and data structures and practical program design and debugging.

The knowledge of the course NMIN111 Programming 1 is expected.