STP Report 2025 Uday
STP Report 2025 Uday
INTRODUCTION
1. Overview of the course training program
10
● Doubt-Solving Sessions: Interactive mentor-led discussions to resolve conceptual or
coding-related challenges.
● Assignments and Projects: Structured problems designed to strengthen analytical and
logical reasoning.
The systematic progression from simple to complex topics ensured a strong learning
curve and built confidence in tackling diverse algorithmic problems.
The summer training was conducted with a set of well-defined objectives aimed at
strengthening both technical and professional skills. The core objectives included:
11
compilers, operating systems, databases, and applications like search engines or file
systems.
1.2.6 Preparation for Career Opportunities:
To prepare for technical interviews, competitive programming contests, and software
engineering challenges that require a deep understanding of DSA.
1.2.7 Encouraging Independent Learning:
To foster a habit of self-study, debugging, and exploring multiple approaches to
problem-solving beyond classroom instructions.
By the end of the training, the program aimed to ensure that each participant could
confidently approach real-world computational challenges and devise solutions with
optimized algorithms and appropriate data structures.
3. Trainer/Institute Profile
Coding Blocks is a premier training institute that has established itself as a leader in
imparting coding and software development skills to students and professionals.
Founded with the vision of bridging the gap between academic knowledge and industry
requirements, the institute offers a wide range of courses in areas such as:
● Data Structures and Algorithms (DSA)
● Web Development (Frontend and Backend)
● Android and iOS App Development
● Machine Learning and Artificial Intelligence
● Competitive Programming
Coding Blocks is known for its structured curriculum, experienced faculty, and
interactive teaching methodology. The institute employs a project-based learning
approach, where students are encouraged to work on coding assignments and real-world
problems, thereby ensuring skill development through practice and application.
The training infrastructure provided by the institution includes:
● Access to coding platforms like HackerBlocks, an in-house practice environment.
12
● Doubt-solving sessions with mentors and teaching assistants.
● Online lectures and recorded sessions for flexible learning.
● Industry-relevant curriculum aligned with placement preparation.
The training was conducted under the mentorship of Mr. Karthik Mathur, a highly
experienced faculty member at Coding Blocks. Mr. Mathur is renowned for his expertise
in Data Structures, Algorithms, and Competitive Programming, and has mentored
thousands of students in building a strong foundation in computer science. His teaching
methodology blends conceptual clarity with practical problem-solving skills, ensuring
that students not only learn how to implement algorithms but also understand the
underlying logic and efficiency of each approach.
Key aspects of his mentorship included:
● Breaking down complex concepts into simplified explanations, often using real-world
analogies.
● Providing in-depth analysis of algorithms while comparing multiple approaches to
problem-solving.
● Encouraging critical and independent thinking during assignments and coding
challenges.
● Offering constructive feedback on coding practices, efficiency, and optimization
techniques.
The balance of theory, practice, and competitive insights created an engaging
environment that helped students enhance their algorithmic thinking and gain confidence
in tackling real-world coding challenges.
COURSE OVERVIEW
The Summer Training Program (STP) in Data Structures and Algorithms (DSA) was
conducted at BPIT in collaboration with Coding Blocks. The course was designed to
provide students with a comprehensive understanding of fundamental and advanced
concepts in data structures, algorithms, and their practical applications. The training
aimed to strengthen problem-solving skills, improve algorithmic thinking, and prepare
students for coding interviews, competitive programming, and real-world software
development.
The curriculum was carefully structured to cover a wide range of topics as outlined
below:
2.1.2 Strings
2.1.3 Bitmasking
● Working with bitwise operators (AND, OR, XOR, NOT) at machine level.
15
● Applications of bitmasking in faster algorithms.
● Use cases in recursion and dynamic programming.
16
2.1.4 Standard Template Library (STL)
● Binary Trees and Binary Search Trees (BSTs): Traversals, insertions, and deletions.
17
● Heap: Applications in priority queues and finding top-k elements.
● Hashmaps: Constant time insertion/deletion and their role in optimization.
18
● Tries: Efficient searching and auto-suggestion features.
2. Modules Covered
20
Module 3: Linked Lists
21
2.4 Training Methodology
22
The pedagogy followed during the training included:
23
CHAPTER – 3
WORK UNDERTAKEN
1. Title and aim of the project or tasks given during the course
The core component of the Summer Training Program was not only learning theoretical
concepts but also applying them in the form of assignments and coding challenges. The
training emphasized practical implementation of Data Structures and Algorithms (DSA) to
develop strong problem-solving skills. Every concept introduced during lectures was
followed by structured tasks that required its application in real coding environments.
The tasks and projects undertaken during the course were aimed at exposing students to a
wide spectrum of problems, ranging from beginner-level exercises such as implementing
arrays and strings, to advanced challenges like solving backtracking problems and performing
operations on trees. By doing so, the training encouraged the development of logical
reasoning, algorithmic thinking, and efficiency-oriented programming practices.
The primary aim of the practical work was to ensure that students could:
25
were assigned to help students understand how recursion and backtracking can
simplify otherwise complex challenges.
● Prepare for competitive programming and technical interviews. The training
integrated a competitive coding environment by conducting regular coding contests.
Problems were designed in the style of company interview questions (Amazon,
Google, Microsoft, Flipkart, etc.), helping students gain familiarity with the type of
challenges faced during placements. The continuous practice of analyzing problem
statements, applying the right data structure, and writing efficient solutions improved
both speed and accuracy, essential traits for technical assessments.
● Develop independent problem-solving and debugging skills. One of the most
important aims of the project tasks was to encourage students to debug their own code,
identify logical flaws, and optimize their approaches without over- reliance on
solutions. This independence fostered confidence in approaching unfamiliar problems
and finding innovative solutions.
In summary, the assignments and mini-projects undertaken during the training were not mere
academic exercises but carefully designed skill-building tasks. They reinforced theoretical
knowledge, strengthened analytical thinking, encouraged creativity in problem-solving, and
laid a strong foundation for future exploration of advanced computer science concepts.
The following sequence was followed throughout the training to solve problems and
undertake tasks:
27
3. Comprehensive Study of Data Structures and Algorithms
In this section, I will provide a detailed explanation of all the major topics covered during the
training program. Each topic includes:
C++ was chosen as the language of instruction due to its efficiency, flexibility, and powerful
Standard Template Library (STL). Unlike higher-level languages, C++ provides both low-
level memory management capabilities and high-level abstractions, making it ideal for
mastering DSA.
● Data Types and Variables – handling integers, floating-point numbers, characters, and
strings.
● Control Structures – decision-making with if-else, iteration with for, while, and do-
while loops.
● Arrays and Pointers – understanding memory storage, indexing, and dynamic
allocation.
● Object-Oriented Concepts – a brief introduction as a precursor to advanced modules.
28
Fig. 3.1 Simple CPP code
29
3.2. Basics of Input/Output, Operators, and Conditional Statements
● Operators: Arithmetic (+,-,*,/,%), Relational (==, !=, >, <), Logical (&&, ||, !), and
Bitwise operators.
● Conditional Statements:
o if-else for decision making.
o switch-case for multi-branch conditions.
Functions help break down large programs into smaller, manageable modules.
Analyzing an algorithm’s efficiency was one of the most crucial parts of this module.
Participants learned:
● Time Complexity:
o Big-O (O): Upper bound (worst-case).
o Big-Theta (Θ): Average-case.
o Big-Omega (Ω): Lower bound (best-case).
31
● Worst Case: Input that requires the maximum number of operations.
32
● Average Case: Expected performance over a set of inputs.
3.5. Arrays
1. Linear Search – Sequentially checks each element until the target is found.
o Time Complexity: O(n).
o Space Complexity: O(1)
33
if(arr[i] == key) return i;
}
return -1;
}
return -1;
34
Fig. 3.4 Kadane’s algorithm
Character arrays are a variation of arrays specifically used to store text and strings.
3.7. Strings
C++ provides the string class which is more powerful and easier to use than character arrays.
Key Features:
35
● Immutability: Unlike Java, C++ strings are mutable but handle memory efficiently.
36
1. Palindrome Check
bool isPalindrome(string s) {
int l = 0, r = s.length() - 1;
while(l < r) {
l++; r--;
}
return true;
int j;
for(j = 0; j < m; j++) { if(text[i+j]
!= pattern[j]) break;
}
If (j == m) cout << "Pattern found at index " << i << endl;
}
}
37
3.8. Linked Lists
Linked lists are one of the most fundamental linear data structures studied in Data Structures
and Algorithms. Unlike arrays, which store elements in contiguous memory locations, a
linked list is composed of nodes connected using pointers. Each node consists of two parts:
This property makes linked lists dynamic in nature and highly flexible in terms of memory
usage.
1. Singly Linked List – Each node points to the next node; traversal is only possible in
one direction.
2. Doubly Linked List – Each node has two pointers: one pointing to the next node and
one to the previous node; allows bidirectional traversal.
3. Circular Linked List – The last node points back to the first node, forming a circular
chain.
Disadvantages:
38
Common Operations on Linked Lists
1. Insertion
o At the beginning.
o At the end.
o At a specific position.
2. Deletion
o From the beginning.
o From the end.
o From a specific position.
3. Traversal – Iterating through all nodes to process data.
4. Reversal – Changing the links so the list points in the opposite direction
{ slow = slow->next;
fast = fast->next->next;
return false;
39
Node* reverseList(Node* head)
40
Node* curr = head;
while(curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
return prev;
Stacks and Queues are abstract data types (ADTs) built upon arrays or linked lists. They
form the basis of many algorithms and are widely applied in solving real-world problems,
compiler design, operating systems, and interview questions.
Both are linear data structures but differ in their order of element access:
41
Stacks
A stack is a linear data structure that follows the LIFO principle, meaning the last element
inserted is the first one to be removed.
● Basic Operations:
o push(x) → insert an element at the top.
o pop() → remove the top element.
o peek() / top() → view the top element.
o isEmpty() → check if the stack is empty.
Implementation Methods
stack<char>st;
for(char ch : s) {
{ st.push(ch);
} else {
if(st.empty()) return false;
return false
42
return st.empty();
Queues
A queue is a linear data structure that follows the FIFO principle: elements are inserted
from the rear (enqueue) and removed from the front (dequeue).
● Basic Operations:
o enqueue(x) → insert element at rear.
o dequeue() → remove element from front.
o peek() / front() → get the rst element.
o isEmpty() → check if the queue is empty.
int* arr;
public:
Queue(int c)
{ capacity = c;
front = size = 0;
rear = capacity - 1;
43
fi
bool isFull() { return size == capacity; }
void enqueue(int x) {
if(isFull()) return;
arr[rear] = x;
size++;
void dequeue()
{ if(isEmpty())
return;
size--;
};
Recursion and backtracking are fundamental concepts in algorithm design that help solve
complex problems by breaking them down into simpler subproblems. This module played a
44
crucial role in enhancing problem-solving and logical thinking skills during the training
program.
45
Recursion
Examples of Recursion
Advantages of Recursion
Disadvantages of Recursion
Backtracking
46
making choices step by step, and when a choice leads to an invalid state, we backtrack and
try a different path.
47
It is often described as a trial-and-error approach with pruning.
Steps in Backtracking
48
Fig. 3.8 Rat in a maze code
● Recursion:
o Traversing trees and graphs.
o Divide-and-conquer algorithms (Merge Sort, Quick Sort).
o Mathematical problems (factorial, Fibonacci, GCD).
● Backtracking:
o Puzzle solving (Sudoku, N-Queens).
o Pathfinding (Maze problems).
o Word search and string permutations.
● Repeatedly compares adjacent elements and swaps them if they are in the wrong
order.
● Time Complexity: O(n²).
● Space Complexity: O(1).
50
(ii) Insertion Sort
● Builds a sorted array one element at a time by inserting each element into its correct
position.
● Time Complexity: O(n²) (worst), O(n) (best, already sorted).
● Space Complexity: O(1).
● Recursively divides the array into halves and merges them in sorted order.
● Time Complexity: O(n log n).
● Space Complexity: O(n).
51
Table no. 3.1 Time Complexities
52
4. Tools and Techniques Applied
The completion of assignments, coding challenges, and practice problems during the Summer
Training Program provided measurable improvements in both conceptual understanding and
coding proficiency. The outcomes of the work undertaken can be summarized as follows:
53
2. Improved Problem-Solving and Algorithmic Thinking
54
● Solved a wide range of problems on recursion, backtracking, searching, and sorting,
which enhanced logical reasoning and algorithm design skills.
● Learned to optimize brute-force approaches into efficient solutions by applying time
and space complexity analysis.
● Significant improvement in coding speed and accuracy was observed while solving
assignments and participating in contests.
● Regular coding practice on platforms such as HackerBlocks enabled familiarity with
industry-level problem-solving standards.
● Developed the ability to identify logical errors and optimize code for better
performance.
● Learned practical techniques like using STL (Standard Template Library) for faster
implementation.
Comparative analysis of different algorithms (e.g., Merge Sort vs Quick Sort, Linear vs
Binary Search) reinforced the importance of algorithm selection in achieving efficiency.
Understood the trade-offs between time complexity, space complexity, and ease of
implementation.
55
Overall, the training provided a structured pathway from basic programming fundamentals to
advanced algorithmic problem-solving. The combination of theory, assignments, coding
contests, and projects resulted in:
56
CHAPTER -4
SKILLS ACQUIRED
One of the most significant outcomes of this training program was the enhancement of my
technical expertise in the domain of programming and data structures.
● C++ was the primary language of instruction and implementation throughout the
training.
● I developed expertise in writing modular, efficient, and well-structured code.
● Learned advanced C++ concepts including:
o Dynamic memory allocation using new and delete.
o Object-oriented programming basics (classes, objects, constructors).
o Use of templates for generic programming.
● Gained fluency in applying the Standard Template Library (STL) to solve complex
problems efficiently:
o vector for dynamic arrays.
o map and unordered_map for frequency counting and lookups.
o set for maintaining unique elements.
o stack and queue for implementing standard problems like balanced parentheses
or sliding window maximum.
Example:
Instead of manually implementing a frequency counter using arrays, I used
unordered_map<int,int> to solve frequency-related problems in O(n) time. This not only
improved efficiency but also exposed me to industry-standard coding practices.
● Implemented fundamental data structures like arrays, strings, linked lists, stacks, and
queues.
57
● Explored non-linear data structures such as trees and heaps, which are essential in
real-world applications.
58
● Learned how different data structures are suited for different problem domains:
o Arrays for constant-time indexing.
o Linked lists for dynamic memory and efficient insertion/deletion.
o Stacks for parsing and backtracking problems.
o Queues for scheduling and simulations.
o Trees for hierarchical data and searching.
o Hashing for fast retrieval in O(1) average time.
Real-world insight: Databases and compilers make extensive use of these structures, so
learning them practically gave me a sense of how software systems are built at scale.
The training emphasized logic, critical thinking, and optimization, making me a more
59
confident problem solver.
60
1. Algorithmic Thinking
● Developed the ability to break down large problems into smaller sub-problems.
● Learned systematic approaches: recursion for repetitive patterns, greedy when choices
matter, and dynamic programming for overlapping subproblems.
Example: In solving the Longest Increasing Subsequence (LIS), I first tried a brute-force
recursion (O(2^n)), then learned to optimize it with dynamic programming (O(n²)) and later
binary search (O(n log n)).
● Learned not to stop after finding a working solution, but to continuously refine it.
● Compared different sorting algorithms (Bubble Sort, Merge Sort, Quick Sort) to
understand their efficiency.
● Understood that choosing the right algorithm and data structure makes the difference
between passing and failing time limits.
61
o Databases → Indexing with trees and hash maps.
o Navigation Apps → Graph algorithms for shortest path.
62
CHAPTER -5
The Training Program on Data Structures and Algorithms (DSA) proved to be a highly
enriching and transformative experience. Throughout the duration of the training, I made
several observations regarding the structure of the program, the teaching methodology, the
practical problem-solving environment, and the peer learning culture. These observations
helped me identify areas of strength in the training as well as areas for self-improvement.
The program also resulted in multiple learning outcomes, both academic and professional,
that will benefit me in my future studies, competitive programming journey, and career in
software engineering.
1. Observations
● Observed that the training did not just emphasize theoretical lectures but placed equal
importance on coding exercises, assignments, and contests.
● This blend of conceptual teaching and practical application helped reinforce learning
effectively.
● The role of the trainer, Mr. Karthik Mathur, was pivotal in simplifying complex
concepts through real-world analogies.
63
● His guidance during doubt-solving sessions and coding discussions helped me
understand alternate problem-solving approaches.
● Initially, solving problems required more time and multiple attempts. However, with
regular practice and feedback, I observed significant improvement in speed, accuracy,
and confidence.
2. Learning Outcomes
The following learning outcomes were achieved as a result of the training program:
64
5.2.1 Conceptual Mastery of DSA
65
● Gained a strong understanding of fundamental and intermediate concepts in arrays,
strings, recursion, backtracking, linked lists, stacks, queues, and trees.
● Learned to analyze and compare algorithms in terms of time and space complexity.
67
CHAPTER -6
The Training Program on Data Structures and Algorithms (DSA) proved to be an invaluable
experience that combined classroom learning with hands-on practice. It provided an
opportunity to bridge the gap between theoretical knowledge gained during coursework and
its practical applications in real-world problem-solving.
This chapter presents a comprehensive summary of the training, the key conclusions drawn,
and suggestions for further improvement of such programs.
● The curriculum covered fundamental to advanced DSA topics, starting with C++
basics and moving into arrays, strings, recursion, backtracking, linked lists, stacks,
queues, and trees.
● This structured progression ensured a smooth learning curve, where each new concept
was built on the previous one, reinforcing long-term understanding.
● Theoretical discussions were always tied to real-world applications, which made the
concepts easier to grasp and more meaningful.
● The training emphasized “learning by doing.” Almost every theoretical session was
followed by coding tasks.
68
● Assignments required direct implementation of data structures like linked lists,
queues, and stacks, ensuring that I did not just memorize the concepts but truly
understood them.
● For instance:
o Arrays were reinforced through problems on prefix sums, sliding windows,
and searching algorithms.
o Recursion was practiced using puzzles like the Tower of Hanoi, N-Queens, and
Maze Solver.
o Stacks and queues were applied in expression parsing, backtracking, and
scheduling tasks.
● Under the mentorship of Mr. Karthik Mathur, I experienced teaching that was clear,
insightful, and application-oriented.
● His explanations often connected abstract concepts with real-world use cases (e.g.,
queues in OS scheduling, trees in databases).
● His feedback during doubt-solving sessions encouraged independent thinking and
critical analysis.
69
and time complexity analysis.
70
● By the end, I could confidently solve intermediate-level problems and attempt
advanced ones with structured approaches.
● Before Training: My knowledge of DSA was limited to basic loops, arrays, and
simple algorithms. Coding speed was low, and optimization was minimal.
● After Training: I can now confidently implement multiple data structures, analyze
algorithm efficiency, and design solutions for real-world inspired problems.
While the training was impactful and effective, a few improvements could make future
programs even more beneficial:
1. Extension of Duration
Certain topics like Graphs, Advanced Trees, and Dynamic Programming
require more time for in-depth coverage.
Extending the training duration or introducing a Part II advanced module
could strengthen learning further.
2. More Real-World Projects
While assignments were excellent for reinforcing concepts, larger mini-
projects (e.g., scheduling systems, file management simulators, or search
applications) would make the program more application-driven.
3. Periodic Assessments with Feedback
Weekly or bi-weekly assessments with detailed performance feedback
would help students track their improvement more systematically.
4. Team-Based Assignments
Group-based projects or contests could help students develop team
collaboration skills, mirroring real software development environments.
5. Industry Guest Lectures
Including sessions from industry experts who apply DSA in domains like
machine learning, big data, or software engineering would expose students
71
to career applications.
6. Advanced Competitive Practice
72
Introducing contests aligned with Codeforces or LeetCode difficulty levels
would prepare students for global-level competitive programming.
The program provided a strong foundation, but learning DSA is a continuous process. Areas
for further development include:
6.4 Conclusion
The Summer Training Program on Data Structures and Algorithms was not just a course, but
a holistic learning experience that strengthened my technical foundation, improved my
analytical skills, and enhanced my professional competencies.
● It provided me with the confidence to solve real-world problems using DSA concepts.
● It nurtured a problem-solving mindset that goes beyond academics into practical
applications.
● It prepared me for the next stages of my career, including competitive programming,
technical interviews, and professional development in software engineering.
73
In conclusion, the training successfully met its objectives by bridging the gap between theory
and practice. The skills and knowledge gained will remain an integral part of my academic
journey and professional growth.
74
BIBLIOGRAPHY
[1] Robert Lafore. (2002). Data Structures and Algorithms in C++. Sams Publishing.
[2] Coding Blocks. (2023). Official Training Programs & Course Material. Retrieved
from: https://codingblocks.com [visited on : 20/08/25]
[3] HackerBlocks (2023). Coding Practice Platform. Retrieved from:
https://hack.codingblocks.com [visited on : 20/08/25]
[4] GeeksforGeeks. (2023). Data Structures and Algorithms Tutorials. Retrieved from:
https://www.geeksforgeeks.org [visited on: 19/08/25]
[5] LeetCode. (2023). Programming Problems and Solutions. Retrieved from:
https://leetcode.com [visited on: 20/08/25]
[6] Codeforces. (2023). Competitive Programming Contests. Retrieved from:
https://codeforces.com [visited on: 19/08/25]
[7] C++ STL Documentation. (2023). C++ Standard Template Library Reference.
Retrieved from: https://en.cppreference.com [visited on : 2-/08/25]
75