# Degree Plans - General Computer Science

**Coordinating Department:**Computer Science Institute and Department of Applied Mathematics

**Specialization Coordinator:**doc. Mgr. Robert Šámal, Ph.D.

The specialization General Computer Science is suitable mainly for students interested in obtaining a solid foundation in computer science and mathematics, and who aim to follow their bachelor studies with a master's programme of study. Students are also well prepared for the job market, too. Taking General Computer Science allows the student to pursue algorithms, optimization, and their guiding principles, and also discrete mathematics.

#### Common obligatory courses in Computer Science

Common obligatory courses for all specializations are listed above in the section giving general information.

#### 2.1 Obligatory Courses

Code | Subject | Credits | Winter | Summer | |

NPRX005 | Non-procedural Programming | 5 | — | 2/2 C+Ex | |

NOPX048 | Linear programming and combinatorial optimization | 5 | — | 2/2 C+Ex | |

NMAX055 | Mathematical Analysis 2 | ^{1} | 5 | 2/2 C+Ex | — |

^{1} In 2019/20 the course Mathematical Analysis 2 is taught in the
summer semester for students who started their studies in previous years.
Students studying according to the current degree plan will take this course in the winter semester of 2020/21.

#### 2.2 Elective Courses

#### Elective courses – group 1

A prerequisite for taking either part of the State Final Exam is to have obtained at least 30 credits from courses in this group.

Code | Subject | Credits | Winter | Summer | |

NDMI084 | Introduction to approximation and randomized algorithms | 5 | 2/1 C+Ex | — | |

NDMI098 | Algorithmic Game Theory | 5 | 2/2 C+Ex | — | |

NDMI010 | Graph Algorithms | 3 | 2/0 Ex | — | |

NDMX012 | Combinatorics and Graph Theory 2 | 5 | — | 2/2 C+Ex | |

NDMX009 | Introduction to Combinatorial and Computational Geometry | 6 | 2/2 C+Ex | — | |

NOPX046 | Discrete and Continuous Optimization | 5 | — | 2/2 C+Ex | |

NMAX062 | Algebra 1 | 5 | 2/2 C+Ex | — | |

NMAI063 | Algebra II | 3 | — | 2/0 Ex | |

NMAX056 | Mathematical Analysis 3 | 5 | — | 2/2 C+Ex | |

NMAX042 | Numerical Mathematics | 5 | — | 2/2 C+Ex | |

NMAI059 | Probability and Statistics | 6 | 2/2 C+Ex | — | |

NAIL063 | Set Theory | 3 | — | 2/0 Ex |

#### Elective courses – group 2

A prerequisite for taking either part of the State Final Exam is to have obtained at least 5 credits from courses in this group.

Code | Subject | Credits | Winter | Summer | |

NPRX041 | Programming in C++ | 5 | 2/2 C+Ex | — | |

NPRX013 | Java | 5 | 2/2 C+Ex | — | |

NPRX035 | C# Language and .NET Framework | 5 | 2/2 C+Ex | — |

#### Elective courses – group 3

A prerequisite for taking either part of the State Final Exam is to have obtained at least 45 credits from elective courses overall. There is no specific limit for this third group.

Code | Subject | Credits | Winter | Summer | |

NPFL054 | Introduction to Machine Learning | 5 | 2/2 C+Ex | — | |

NPGR035 | Machine learning in computer vision | 5 | 2/2 C+Ex | — | |

NAIL120 | Introduction to Artificial Intelligence | 5 | — | 2/2 C+Ex | |

NPGR003 | Introduction to Computer Graphics | 5 | 2/2 C+Ex | — | |

NPGR002 | Digital Image Processing | 4 | 3/0 Ex | — | |

NPGR038 | Introduction to computer game development | 5 | — | 2/2 C+Ex | |

NPFL124 | Natural Language Processing | 4 | — | 2/1 C+Ex | |

NPFL012 | Introduction to Computer Linguistics | 3 | 2/0 Ex | — | |

NSWX004 | Operating Systems | 4 | 2/1 MC | — | |

NPRX036 | Data Formats | 5 | — | 2/2 C+Ex | |

NSWI090 | Computer Networks | 3 | — | 2/0 Ex | |

NSWI143 | Computer Architecture | 3 | — | 2/0 Ex | |

NDBI007 | Data Organisation and Processing I | 4 | 2/1 C+Ex | — | |

NDBI040 | Modern Database Concepts | 5 | 2/2 C+Ex | — | |

NSWI098 | Compiler Principles | 6 | 2/2 C+Ex | — | |

NPRG042 | Programming in Parallel Environment | 6 | — | 2/2 C+Ex | |

NSWX142 | Web Applications Programming | 5 | 2/2 C+Ex | — | |

NPRG054 | High Performance Software Development | 6 | — | 2/2 C+Ex | |

NPRX051 | Advanced C++ Programming | 5 | — | 2/2 C+Ex | |

NPRX021 | Advanced Programming in Java | 5 | — | 2/2 C+Ex | |

NPRX038 | Advanced C# Programming | 5 | — | 2/2 C+Ex |

#### 2.3 Recommended Course of Study

The recommended course of study gives all the obligatory courses, while only some elective courses and optional courses are listed. Students need to choose other such courses themselves. Obligatory courses are printed in boldface, elective courses in roman, and optional courses in italics.

#### First year

Common to all specializations – see under general information above.#### Second year

Code | Subject | Credits | Winter | Summer | |

NTIX061 | Algorithms and Data Structures 2 | 5 | 2/2 C+Ex | — | |

NAIX062 | Propositional and Predicate Logic | 5 | 2/2 C+Ex | — | |

NMAX055 | Mathematical Analysis 2 | ^{1} | 5 | 2/2 C+Ex | — |

NDMX011 | Combinatorics and Graph Theory 1 | ^{1} | 5 | 2/2 C+Ex | — |

NPRX... | Programming in Java/C#/C++ | 5 | 2/2 C+Ex | — | |

NTIX071 | Automata and Grammars | 5 | — | 2/2 C+Ex | |

NPRX005 | Non-procedural Programming | 5 | — | 2/2 C+Ex | |

NOPX048 | Linear programming and combinatorial optimization | 5 | — | 2/2 C+Ex | |

NMAX059 | Probability and Statistics | 5 | 2/2 C+Ex | — | |

NPRG045 | Individual Software Project | 4 | — | 0/1 C | |

Elective course – group 1 | 5 | 2/2 C+Ex | |||

Elective courses | |||||

Optional courses |

^{1} In 2019/20 the courses Mathematical Analysis 2 and Combinatorics and Graph Theory 1 are taught in the
summer semester for students who started their studies in previous years.
Students studying according to the current degree plan will take these courses in the winter semester of 2020/21.

#### Third year

Code | Subject | Credits | Winter | Summer | |

NDBX025 | Database Systems | 5 | — | 2/2 C+Ex | |

NSZZ031 | Bachelor Thesis | 6 | — | 0/4 C | |

Elective courses | 30 | ||||

Optional courses | 15 |

#### Recommended elective courses

To prepare for the State Final Exam, as well as for the further study of computer science, we suggest the following courses in particular.Code | Subject | Credits | Winter | Summer | |

NOPX046 | Discrete and Continuous Optimization | 5 | — | 2/2 C+Ex | |

NDMI084 | Introduction to approximation and randomized algorithms | 5 | 2/1 C+Ex | — | |

NDMI010 | Graph Algorithms | 3 | 2/0 Ex | — | |

NDMX009 | Introduction to Combinatorial and Computational Geometry | 6 | 2/2 C+Ex | — | |

NDMX012 | Combinatorics and Graph Theory 2 | 5 | — | 2/2 C+Ex | |

NAIL063 | Set Theory | 3 | — | 2/0 Ex | |

NMAX062 | Algebra 1 | 5 | 2/2 C+Ex | — |

#### 2.4 State Final Exam

The State Final Exam knowledge requirements common to all specializations are described in the first section of this chapter (General Information on Computer Science bachelor's degree plans). Students of the General Computer Science specialization will be further tested according to the list below from topics 1.-3. and from two selected topics among 4.-7. The choice of these two topics is to be declared by the student when signing up for the State Final Exam.

**1. Networking Fundamentals**

Taxonomy of computer networks. ISO/OSI reference architecture.
Overview of the TCP/IP protocol model. Routing.
Addresses, ports, sockets.
Client-server architectures.
Fundamentals of HTTP, FTP and SMTP protocols.

**2. Multivariable Differential and Integral Calculus**

Riemann integral. Extreme values of multivariable functions.
Metric spaces, open and closed sets. Compactness.

**3. Combinatorics**

Generating functions.
Estimates of factorials and binomial coefficients.
Ramsey theorems.
Error-correcting codes.

**4. Optimization Methods**

Polyhedra, Minkowski–Weyl theorem.
Basics of linear programming, duality theorems, algorithms for LP.
Edmonds' algorithm. Integer programming.
Approximation algorithms for combinatorial problems (satisfiability, independent set, set cover, scheduling).
Applications of linear programming to approximation algorithms.
The use of probability in the design of algorithms.

**5. Advanced Algorithms and Data Structures**

Random-access machine (RAM).
Dynamic programming.
Strongly connected components of directed graphs.
Maximal flows: Dinic and Goldberg algorithms.
Application of flows: disjoint paths, matching in bipartite graphs.
Flows and paths in graphs with integer weights.
Text search algorithms: Knuth–Morris–Pratt, Aho–Corasick, and Rabin–Karp algorithms.
DFT and its applications.
Approximation algorithms and schemes.
Parallel algorithms in Boolean circuits and comparator networks.

**6. Geometry**

Basic theorems about convex sets (Helly, Rado, separation).
Minkowski's lattice theorem.
Convex polytopes (basic properties, V-polytopes, H-polytopes, combinatorial complexity).
Geometric duality.
Voronoi diagrams, hyperplane arrangements, point-line incidences.
Elementary computational geometry algorithms (construction of a line arrangement in the plane,
construction of a convex hull in the plane).

**7. Advanced Discrete Mathematics**

Graph colouring (Brooks' and Vizing's theorem). Tutte's theorem. Extremal combinatorics (Turán's theorem, Erdös–Ko–Rado theorem). Drawing graphs on surfaces.
Sets and mappings. Subvalence and equivalence of sets. Well-ordered sets. Axiom of choice (Zermelo's theorem, Zorn's lemma).