Subject · Information security
Algorithms and Data Structures
About this subject
Credits
6
Workload
135hours
Semester
Autumn
Academic year
2
Description
The course is designed to develop students' theoretical knowledge and practical skills in algorithmic thinking, systematic problem-solving, and the development of efficient software solutions. The course covers the fundamental principles, characteristics, and classification of algorithms, as well as the analysis of time and space complexity. Major data structures, including arrays, lists, stacks, queues, linked lists, trees, and graphs, and their interaction with algorithms are examined. Students are introduced to sorting, searching, graph, and shortest-path algorithms, as well as fundamental algorithmic strategies such as divide and conquer, greedy algorithms, dynamic programming, and backtracking. The course aims to develop students' ability to analyze the characteristics of a given problem, select an appropriate data structure and algorithmic approach, evaluate algorithm efficiency, and develop optimized solutions.
Course learning outcomes
CLO 1: Gain fundamental knowledge of the basic concepts and characteristics of algorithms, methods of algorithm representation, the concept of complexity, and types of data structures.
CLO 2: Understand linear and non-linear data structures (arrays, linked lists, stacks, queues, trees, graphs, hash tables, etc.), distinguish their application areas, and develop the ability to select an appropriate data structure for a given problem.
CLO 3: Understand the operating principles of fundamental algorithms, including searching, sorting, recursion, graph, and tree algorithms; analyze and compare their time and space complexities.
CLO 4: Develop the ability to design, implement, test, and optimize algorithms and data structures using different programming languages.
CLO 5: Select appropriate algorithms and data structures for solving computational problems, evaluate algorithm efficiency, and apply them to practical problems.
CLO 6: Apply modern algorithmic approaches in algorithmic thinking, problem-solving, and software development processes; compare different solution methods and justify an optimal solution.