This repository contains all lab codes for the Course: BCSE204P - Design and Analysis of Algorithms (DAA) at VIT Chennai. It provides solutions, analysis tools, and visualizations for each Lab Practice Set (LPS), with a focus on algorithm design principles and time complexity analysis.
VIT-DAA/
├── LPS-1
│ ├── q1
│ │ ├── Solution code # Code for solving the question
│ │ ├── Input generator # Generates random inputs of different sizes
│ │ ├── Results # Stores results of runtime measurements
│ │ └── Graph notebook # Plots runtime complexity using collected data
│ ├── q2
│ └── ...
│
├── LPS-2
│ ├── q1
│ ├── q2
│ └── ...
│
├── ...
│
├── LPS-N
│ ├── q1
│ └── ...
├── docs # HTML files with 3D plots (Github Pages)
└── README.md # Detailed information about the repository
Each LPS directory contains:
- Solution Code: Implements the algorithm for the specific question.
- Input Generator: Script (in C++ or Python) that generates random inputs of varying sizes to measure runtime.
- Data File: Logs runtime results for different input sizes in a CSV format.
- Graph Notebook: Jupyter Notebook to visualize time complexity using the recorded runtime data.
- Run Solution Code: Execute each question’s direct solution individually.
- Run Input Generator: Generate randomized inputs and log the runtime data (e.g., g++ -std=c++11 for C++ code).
- Plot Graphs: Open the graph notebook and run to visualize time complexity by plotting the recorded data.
Each LPS explores time complexity and performance analysis uniquely, providing insights into the efficiency of various algorithms.
Explore the interactive Time Complexity Visualization: aravindxd.github.io/VIT-DAA
- Standardize the format of all initial Lab Practice Sets (LPS) to ensure they consistently.
- Include Extended Documentation for Each LPS: Provide explanations of algorithms, time complexity analysis, and potential optimizations for each question.
- Add More Input Generators: Create specialized input generators for best-case, worst-case, and average-case scenarios.
- Modularize and Automate: Develop a package/header or function call to automate running tests, generating inputs, and visualizing results.
- Improve Website Accessibility and Styling: Enhance the user experience and design of the deployed site.
- Fine-tune a language model (LLM) specifically on the content of the Design and Analysis of Algorithms course hosted on GitHub Pages for better contextual understanding and assistance.
- Add Unit Tests: Ensure the correctness of each solution with unit tests.
- Integrate Profiling Tools: Use profiling tools to analyze and display memory usage alongside runtime for each algorithm.
Have feedback, questions, or ideas? We encourage you to use the Discussions tab in this repository! Connect with others, suggest features, or report any issues you encounter. Your contributions are invaluable to improving this project.
We welcome contributions to enhance and expand this repository! Here’s how you can contribute:
- Create a New Branch: Each academic year, create a branch to add new questions if the questions change.
- Enhance Automation: Add functionalities to automate processes such as data generation and analysis.
- Report Bugs: Found a mistake in the code? Open an issue to report bugs or errors.
- Website Enhancement: Improve the deployed website for time complexity visualization. Currently, it supports interactive 3D plots for cases with multiple dependent input factors.
We encourage everyone to participate in improving this repository for future students and enthusiasts!