A personal Jupyter Notebook collection focused on algorithmic thinking, complexity analysis, and classic computer science algorithms.
This repository contains my study notes, implementations, and experiments developed while taking the Computer Science course.
The main goal of this class is to strengthen:
- Algorithmic thinking
- Problem-solving skills
- Understanding of computational complexity
- Implementation of fundamental algorithms
All content is implemented and documented using Jupyter Notebooks to combine theory, code, and examples in a clear learning workflow.
- Breaking problems into smaller steps
- Designing logical procedures to solve tasks
- Writing clear and efficient pseudocode
- Time complexity (Big-O notation)
- Space complexity
- Comparing algorithm efficiency
- Optimizing naive solutions
Classic sorting techniques implemented and analyzed:
- Bubble Sort
- Selection Sort
- Insertion Sort
- Merge Sort
- Quick Sort
Each notebook includes:
- Step-by-step explanation
- Python implementation
- Complexity discussion
- Example test cases
- Fibonacci sequence generation
- Euclidean algorithm for GCD
- Recursive vs iterative solutions
- Performance comparisons
- Finding indexes efficiently
- Maximum pair product in arrays
- Basic searching strategies
- Optimization from O(n log n) to O(n) solutions
- Python for algorithm implementation
- Jupyter Notebook for interactive learning
- GitHub for version control and documentation
computer-science/
│
├── notebooks/
├── practice/
├── workshops/
└── README.md