Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

bursasha/cpp-advanced-projects

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. 😁

AltStyle によって変換されたページ (->オリジナル) /