Skip to content

Advanced programming and algorithmization in C++ ⚔️

Notifications You must be signed in to change notification settings

bursasha/cpp-advanced-projects

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

My Advanced C++ University Projects: Algorithms, Data Structures, and More! 📚

Greetings! 🙌🏽

This repository showcases my university projects where I applied knowledge of algorithms, data structures, dynamic programming, the theory of automata and grammars, multithreading, and concurrent programming in C++.

Repository Structure 📁

Each folder corresponds to a separate project. In each folder, you will find:

  • ... .cpp: File with the program code.
  • README.md: Auxiliary file with a detailed description of the task.

Technology Stack 🔍

Language:

  • C++

Tools and Techniques:

  • GCC/G++: GNU Compiler Collection for compiling C++ programs.
  • GDB: GNU Debugger for debugging C++ programs.
  • Make: Utility for managing project builds.
  • Valgrind: Tool for memory debugging, memory leak detection, and profiling.
  • CMake: Tool for managing the build process in a compiler-independent manner.
  • Data Structures: Trees (including balanced trees), graphs, hash maps, and various types of heaps.
  • Algorithms: Depth-first search (DFS), breadth-first search (BFS), Dijkstra's algorithm, greedy algorithms, QuickSort, MergeSort, HeapSort, and more.
  • Dynamic Programming: Techniques for solving complex problems by breaking them down into simpler subproblems.
  • Automata and Grammar Theory: Finite automata, regular expressions, grammars, and their applications in text processing, data compression, and parsing.
  • Multithreading: Creating and managing multiple threads to perform concurrent tasks.
  • Concurrent Programming: Techniques to ensure correct program execution when multiple threads are accessing shared resources.
  • Synchronization Mechanisms: Mutexes, condition variables, and other tools to manage access to shared resources.
  • Concurrency Control: Preventing data races and ensuring thread-safe operations.

Course Goals 📍

  • Algorithm Development: Learn how to develop algorithms to solve complex problems.
  • C++ Programming: Convert algorithms into efficient and optimized C++ programs.
  • Data Structures: Gain expertise in implementing and using various data structures for performance gains.
  • Dynamic Programming: Master dynamic programming techniques and problem-solving approaches.
  • Automata Theory: Understand and apply automata and grammar theory in real-world applications.
  • Testing and Debugging: Gain practical skills in program testing, debugging, and memory management.
  • Multithreading and Concurrency: Develop skills in creating and managing concurrent processes in C++.

Obtained Skills 🤔

  • In-depth Algorithm Analysis: Mastery of algorithm complexity analysis and selection of optimal algorithms.
  • Data Structure Expertise: Proficiency in a wide range of data structures and their efficient implementation.
  • Dynamic Programming Mastery: Strong understanding of dynamic programming principles and techniques.
  • Automata and Grammar Theory: Knowledge of finite automata, regular expressions, and grammars.
  • Complex Data Structure Handling: Expertise in handling complex data structures like trees, graphs, and hash maps.
  • Search and Sorting Algorithms: Implementation and understanding of various search and sorting algorithms.
  • Code Optimization: Skills in enhancing code efficiency and minimizing time complexity.
  • Multithreading: Ability to design and implement multithreaded applications.
  • Concurrent Programming: Proficiency in managing concurrent processes and ensuring thread-safe operations.
  • Synchronization and Concurrency Control: Expertise in using synchronization mechanisms to prevent data races and ensure correct program execution.

Key Learnings 🗝️

  • Problem Decomposition: Breaking down problems into smaller, solvable subproblems.
  • Code Optimization: Enhancing code efficiency and minimizing time complexity.
  • Ideal Data Structure Selection: Evaluating and choosing the most suitable structures based on the task.
  • Dynamic Programming Approach: Solving problems with overlapping subproblems for optimal outcomes.
  • Automata and Grammar Applications: Utilizing theory for text processing, data compression, and compilation.
  • Multithreading Techniques: Efficiently managing multiple threads to perform concurrent tasks.
  • Concurrency Control: Implementing synchronization mechanisms to ensure thread-safe operations.

Explore my work! I welcome feedback. 😁