ADA IT Lab Manual Student
ADA IT Lab Manual Student
UNIVERSITY
COLLEGE OF
TECHNOLOGY
BACHELOR OF ENGINEERING
INFORMATION TECHNOLOGY
DEPARTMENT OF INFORMATION TECHNOLOGY
VISION
To be recognized for the quality education and research in the field of Information Technology
known for its accomplished graduates.
MISSION
1. Continually improve the standard of our graduates by engaging in innovative teaching learning
methods with high caliber motivated faculty members keeping in-line with the rapid
technological advancements.
2. Promote and support research activities over a wide range of academic interests among students
and staff for growth of individual knowledge and continuous learning.
3. Provide an education system that promotes innovation, creativity, entrepreneurial spirit,
leadership as well as freedom of thought with emphasis on professionalism and ethical behavior.
Program Educational Objectives (PEO):
PEO1: To provide fundamental knowledge of science and engineering for an IT professional and to
equip them with proficiency of mathematical foundations and algorithmic principles and inculcate
competent problem-solving ability.
PEO2: To implant ability in creativity & design of IT systems and transmit knowledge and skills to
analyze, design, test and implement various software applications.
PEO3: To exhibit leadership capability, triggering social and economical commitment and
inculcate community services.
PEO4: To inculcate professional-social ethics, teamwork in students and acquaint them with
requisite technical and managerial skills to attain a successful career.
PROGRAM OUTCOMES (POs)
1. Engineering knowledge: Apply the knowledge of mathematics, science, engineering fundamentals, and an
engineering specialization to the solution of complex engineering problems.
2. Problem analysis: Identify, formulate, review research literature, and analyze complex engineering
problems reaching substantiated conclusions using first principles of mathematics, natural sciences, and
engineering sciences.
3. Design/development of solutions: Design solutions for complex engineering problems and design system
components or processes that meet the specified needs with appropriate consideration for the public health
and safety, and the cultural, societal, and environmental considerations.
4. Conduct investigations of complex problems: Use research-based knowledge and research methods
including design of experiments, analysis and interpretation of data, and synthesis of the information to
provide valid conclusions.
5. Modern tool usage: Create, select, and apply appropriate techniques, resources, and modern engineering
and IT tools including prediction and modeling to complex engineering activities with an understanding of
the limitations.
6. The engineer and society: Apply reasoning informed by the contextual knowledge to assess societal,
health, safety, legal and cultural issues and the consequent responsibilities relevant to the professional
engineering practice.
7. Environment and sustainability: Understand the impact of the professional engineering solutions in
societal and environmental contexts, and demonstrate the knowledge of, and need for sustainable
development.
8. Ethics: Apply ethical principles and commit to professional ethics and responsibilities and norms of the
engineering practice.
9. Individual and team work: Function effectively as an individual, and as a member or leader in diverse
teams, and in multidisciplinary settings.
10. Communication: Communicate effectively on complex engineering activities with the engineering
community and with society at large, such as, being able to comprehend and write effective reports and
design documentation, make effective presentations, and give and receive clear instructions.
11. Project management and finance: Demonstrate knowledge and understanding of the engineering and
management principles and apply these to one’s own work, as a member and leader in a team, to manage
projects and in multidisciplinary environments.
12. Life-long learning: Recognize the need for, and have the preparation and ability to engage in independent
and life-long learning in the broadest context of technological change.
ANALYSIS AND DESIGN OF ALGORITHM PRACTICAL BOOK
PREFACE
It gives us immense pleasure to present the first edition of the Analysis and Design of Algorithm
Practical Book for the B.E. 3rd year students of Silver Oak Group of Institutes.
The Analysis and Design of Algorithm theory and laboratory course at Silver Oak Group of
Institutes, Ahmedabad is designed in such a way that students develop the basic understanding of
the subject in the theory classes and gain hands-on practical experience during their laboratory
sessions. The Lab Manual has been designed in such a way that students will get exposure to
different kinds of programs. Difficulty level of programs is increased with each subsequent
practical. Students will get an opportunity to use various sets of instructions.
We acknowledge the authors and publishers of all the books which we have consulted while
developing this Practical book. Hopefully this Analysis and Design of Algorithm Practical Book
will serve the purpose for which it has been developed.
Mr./Ms........................................................................................................
with enrolment no. ........................................................... from Semester
……… Div…….. has successfully completed his/her laboratory
experiments in Analysis and Design of Algorithm (1010043316) from
the department of...................................................................during the
academic year ............... -............
Page No Mark
Sr. Date of Date of
Experiment Title Sign s (out
No Start Completion
of 10)
To From
1 a) Bubble sort,
b) Selection sort,
c) Insertion sort.
d) Merge sort
e) Quick sort
Implementation and Time
2 analysis of linear and binary
search algorithms.
Implementation of max-heap
3 sort algorithm.
Implementation and Time
4 analysis of factorial program
using iterative and
recursive method
Implementation of a knapsack
5 problem using dynamic
programming.
Implementation of making a
change problem using dynamic
7
programming.
Page No
Mark
Sr. Date of Date of
Experiment Title Sign s (out
No Start Completion
of 10)
To From
Implementation of a knapsack
8 problem using greedy
algorithms.
Description:
Bubble Sort:
Bubble Sort is a simple algorithm which is used to sort a given set of n elements provided in the
form of an array with n number of elements. Bubble Sort compares all the elements one by one
and sorts them based on their values.
If the given array has to be sorted in ascending order, then bubble sort will start by comparing the
first element of the array with the second element, if the first element is greater than the second
element, it will swap both the elements, and then move on to compare the second and the third
element, and so on. If we have total n elements, then we need to repeat this process for n-1 times.
It is known as bubble sort, because with every complete iteration the largest element in the given
array, bubbles up towards the last place or the highest index, just like a water bubble rises up to
the water surface.
Sorting takes place by stepping through all the elements one-by-one and comparing it with the
adjacent element and swapping them if required.
Following are the steps involved in bubble sort (for sorting a given array in ascending order):
1. Starting with the first element (index = 0), compare the current element with the next
element of the array.
2. If the current element is greater than the next element of the array, swap them.
3. If the current element is less than the next element, move to the next element. Repeat Step 1.
Following are the Time and Space complexity for the Bubble Sort algorithm.
● Worst Case Time Complexity [ Big-O ]: O(n2)
● Best Case Time Complexity [Big-omega]: O(n)
● Average Time Complexity [Big-theta]: O(n2)
● Space Complexity: O(1)
AIM 1.1: Write a program to implement Bubble sort.
Code:
Output:
Selection Sort:
Selection sort is conceptually the simplest sorting algorithm. This algorithm will first find
the smallest element in the array and swap it with the element in the first position, then it will
find the second smallest element and swap it with the element in the second position, and it will
keep on doing this until the entire array issorted.
It is called selection sort because it repeatedly selects the next-smallest element and swaps it into
the right place.
Implementing Selection Sort Algorithm
Following are the steps involved in selection sort (for sorting a given array in ascending order):
1. Starting from the first element, we search the smallest element in the array, and replace itwith
the element in the first position.
2. We then move on to the second position, and look for the smallest element present in
the subarray, starting from index 1, till the last index.
3. We replace the element at the second position in the original array, or we can say at thefirst
position in the subarray, with the second smallest element.
4. This is repeated, until the array is completely sorted.
The following will be the time and space complexity for selection sort algorithm:
● Worst Case Time Complexity [ Big-O ]: O(n2)
● Best Case Time Complexity [Big-omega]: O(n2)
● Average Time Complexity [Big-theta]: O(n2)
● Space Complexity: O(1)
AIM 1.2: Write a program to implement Selection sort.
Code:
Output:
Insertion Sort:
The insertion sort works in a slightly different way. It always maintains a sorted sublist in the
lower positions of the list. Each new item is then “inserted” back into the previous sublist such
that the sorted sublist is one item larger. The shaded items represent the ordered sublists as the
algorithm makes each pass.
While comparing two sublists for merging, the first element of both lists is taken into
consideration. While sorting in ascending order, the element that is of a lesser value becomes a
new element of the sorted list. This procedure is repeated until both the smaller sublists are empty
and the new combined sublist comprises all the elements of both the sublists.
Algorithm:
MergeSort(arr[], l, r)
If r > l
1. Find the middle point to divide the array into two
halves: middle m = (l+r)/2
2. Call mergeSort for first
half: Call mergeSort(arr,
l, m)
3. Call mergeSort for second
half: Call mergeSort(arr,
m+1, r)
4. Merge the two halves sorted in step 2 and
3: Call merge(arr, l, m, r)
The following will be the time and space complexity for merge sort algorithm:
Quick sort is based on the divide-and-conquer approach based on the idea of choosing one
element as a pivot element and partitioning the array around it such that: Left side of pivot
contains all the elements that are less than the pivot element Right side contains all elements
greater than the pivot.
It reduces the space complexity and removes the use of the auxiliary array that is used in merge
sort. Selecting a random pivot in an array results in an improved time complexity in most of the
cases.
Algorithm:
quickSort(left, right)
if right-left <= 0
return
else
pivot = A[right]
partition = partitionFunc(left, right, pivot)
quickSort(left,partition-1)
quickSort(partition+1,right)
end if
end procedure
The following will be the time and space complexity for merge sort algorithm:
Worst Case Time Complexity [ Big-O ]: O(n^2)
2) The correct order of the efficiency of the following sorting algorithms according to their
overall running time comparison is
a) Insertion>selection>bubble b) Insertion>bubble>selection
c) Selection>bubble>insertion. d) bubble>selection>insertion
Algorithm:
procedure linear_search (list, value)
for each item in the list
if match item == value
return the item's location
end if
end for
end procedure
Complexity Analysis of Linear Search:
Output:
Binary Search Algorithm:
The binary search algorithm can be used with only a sorted list of elements. That means, binary
search can be used only with a list of elements which are already arranged in an order. The binary
search cannot be used for list of elements which are in random order. This search process starts
comparing the search element with the middle element in the list. If both are matched, then the
result is "element found". Otherwise, we check whether the search element is smaller or larger
than the middle element in the list. If the search element is smaller, then we repeat the same
process for the left sublist of the middle element. If the search element is larger, then we repeat the
same process for the right sublist of the middle element. We repeat this process until we find the
search element in the list or until we are left with a sublist of only one element. And if that
element also doesn't match with the search element, then the result is "Element not found in the
list".
Algorithm:
Procedurebinary_searc
h A ← sorted array
n ← size of array
x ← value to be searched
Set lowerBound = 1
Set upperBound = n
while x not found
if upperBound < lowerBound
EXIT: x does not exist.
set midPoint = (lowerBound + upperBound ) / 2
if A[midPoint] < x
set lowerBound = midPoint + 1
if A[midPoint] > x
set upperBound = midPoint - 1
if A[midPoint] == x
EXIT: x found at location midPoint
end while
end procedure
Output:
Solve the below mention questionnaires:
Conclusion / Outcome:
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
PRACTICAL – 3
AIM: Implementation of max-heap sort algorithm.
Explanation: Heaps can be used in sorting an array. In max-heaps, maximum element will
always be at the root. Heap Sort uses this property of heap to sort the array. It is similar to
selection sort where we first find the maximum element and place the maximum element at the
end. We repeat the same process for remaining elements.
4. The max heap constructed from the list of numbers 30, 10, 80, 60, 15, 55 is
a) 80, 55, 60, 15, 10, 30 c) 80, 60, 55, 30, 10, 15
b) 60, 80, 55, 30, 10, 15 d) None
5. Always heap is a
a) Binary search tree c) None
b) Full binary tree d) Complete binary tree
Conclusion / Outcome:
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
PRACTICAL – 4
AIM: Implementation and Time analysis of factorial program using iterative and
recursive method
Explanation: Factorial of a non-negative integer, is multiplication of all positive integers smaller than
or equal to n. For example factorial of 6 is 6*5*4*3*2*1 which is 720. A factorial is represented by a
number and a ” ! ” mark at the end. It is widely used in permutations and combination to calculate the
total possible outcomes. A French mathematician Christian Kramp firstly used the the exclamation.
Iterative Solution
Factorial can also be calculated iteratively as recursion can be costly for large numbers. Here we have
shown the iterative approach using both for and while loop.
Recursive Solution
Factorial can be calculated using following recursive formula.
n! = n * (n-1)!
n! = 1 if n = 0 or n = 1
Code:
Output
DYNAMIC PROGRAMMING
Dynamic programming is a method for solving a complex problem by breaking it down into
simpler sub-problems, solving each of those sub-problems just once, and storing their solutions –
in an array usually.
Now, every time the same sub-problem occurs, instead of recomputing its solution, the previously
calculated solutions are used, thereby saving computation time at the expense of storage space.
Memoization – Memoization uses the top-down technique to solve the problem i.e. it begin with
original problem then breaks it into sub-problems and solve these sub-problems in the same way.
In this approach, you assume that you have already computed all sub-problems. You typically
perform a recursive call (or some iterative equivalent) from the main problem. You ensure that the
recursive call never recomputes a sub-problem because you cache the results, and thus duplicate
sub-problems are not recomputed.
Tabulation – Tabulation is the typical Dynamic Programming approach. Tabulation uses the
bottom up approach to solve the problem, i.e., by solving all related sub-problems first, typically
by storing the results in an array. Based on the results stored in the array, the solution to the “top”
/ original problem is then computed.
Memoization and tabulation are both storage techniques applied to avoid recomputation of a sub-
problem
The idea behind dynamic programming, In general, is to solve a given problem, by solving
different parts of the problem (sub-problems), then using the cached solutions of the sub-problems
to reach an overall solution.
PRACTICAL – 5
● In this problem we have a Knapsack that has a weight limit W, which representsknapsack
capacity.
● Given two integer arrays val[0..n-1] and wt[0..n-1] which represent values andweights
associated with n items respectively.
● Find out the maximum value subset of val[] such that sum of the weights of this subset
is smaller than or equal to W.
Code:
Output:
Solve the below mention questionnaires:
1. You are given a knapsack that can carry a maximum weight of 60. There are 4 items with
weights {20, 30, 40, 70} and values {70, 80, 90, 200}. What is the maximum value of the
items you can carry using the knapsack?
a) 160 c) 170
b) 200 d) 90
2. What is the time complexity of the above dynamic programming implementation of the
Knapsack problem with n items and a maximum weight of W?
a) O(n) c) O(nW)
b) O(n + w) d) O(n2)
3. The 0-1 Knapsack problem can be solved using the Greedy algorithm.
a) True
b) False
Conclusion / Outcome:
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
PRACTICAL – 6
AIM : Implementation of chain matrix multiplication using dynamic
programming.
Explanation: Given a sequence of matrices, find the most efficient way to multiply these
matrices together. The problem is not actually to perform the multiplications, but merely to decide
in which order to perform the multiplications.
However, the order in which we parenthesize the product affects the number of simple arithmetic
operations needed to compute the product, or the efficiency. For example, suppose A is a 10 × 30
matrix, B is a 30 × 5 matrix, and C is a 5 × 60 matrix. Then,
Given an array p[] which represents the chain of matrices such that the ith matrix Ai is of
dimension p[i-1] x p[i]. We need to write a function MatrixChainOrder() that should return the
minimum number of multiplications needed to multiply the chain.
This problem can be solved using Dynamic Programming. First we will compute results for sub-
chains of the original chain and store these results in a 2-D array. Then we will use these results to
compute results for larger chains.
Code:
Output:
Solve the below mention questionnaires :
2. What is the time complexity of the above dynamic programming implementation of the
matrix chain problem?
a) O(1) c) O(n2)
b) O(n) d) O(n3)
3. Which of the following methods can be used to solve the matrix chain multiplication
problem?
a) Dynamic programming c) Recursion
b) Brute force d) All of the mentioned
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
Practical -7
For example, for N = 4 and S = {1,2,3}, there are four solutions: {1,1,1,1},{1,1,2},{2,2},{1,3}. So
output should be 4. For N = 10 and S = {2, 5, 3, 6}, there are five solutions: {2,2,2,2,2}, {2,2,3,3},
{2,2,6}, {2,3,5} and {5,5}. So the output should be 5
Code:
Output:
Give the Answer to the below Short Questions:
1. What is the time complexity of making change using dynamic programming?
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
2. If S = 5 and N = {1,2,3}, means we have a sum of 5 and want to make change for
this sum using coins of denomination 1,2 and 3. There is an infinite supply of these coins.
We have to find out how many ways we can make this change.
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
Conclusion / Outcome:
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
Practical Set- 8
Problem Scenario
A thief is robbing a store and can carry a maximal weight of W into his knapsack. There are n
items available in the store and the weight of ith item is wi and its profit is pi. What items should
the thief take?
In this context, the items should be selected in such a way that the thief will carry those items for
which he will gain maximum profit. Hence, the objective of the thief is to maximize the profit.
● Fractional Knapsack
● Knapsack
Fractional Knapsack
In this case, items can be broken into smaller pieces, hence the thief can select fractions of items.
The ith item contributes the weight xi.wixi.wi to the total weight in the knapsack and
profit xi.pixi.pi to the total profit.
Hence, the objective of this algorithm is to
maximize∑n=1n(xi.pi) maximize∑n=1n(xi.pi)
subject to constraint,
∑n=1n(xi.wi)⩽W∑n=1n(xi.wi)⩽W
It is clear that an optimal solution must fill the knapsack exactly, otherwise we could add a
fraction of one of the remaining items and increase the overall profit.
In this context, first we need to sort those items according to the value of pi/wi, so
that pi+1wi+1pi+1wi+1≤ pi/wi . Here, x is an array to store the fraction of items.
Analysis
If the provided items are already sorted into a decreasing order of pi/wi, then the whileloop takes
a time in O(n); Therefore, the total time including the sort is in O(n logn).
Example
Let us consider that the capacity of the knapsack W = 60 and the list of provided items are shown
in the following table −
Item A B C D
Weight 40 10 20 24
Ratio (pi)/(wi) 7 10 6 5
Item B A C D
Ratio (pi/wi) 10 7 6 5
As the provided items are not sorted based on pi/wi. After sorting, the items are as shown in the
following table.
Solution
After sorting all the items according to pi/wi. First all of B is chosen as weight of B is less than
the capacity of the knapsack. Next, item A is chosen, as the available capacity of the knapsack is
greater than the weight of A. Now, C is chosen as the next item. However, the whole item cannot
be chosen as the remaining capacity of the knapsack is less than the weight of C.
Hence, fraction of C (i.e. (60 − 50)/20) is chosen.Now, the capacity of the Knapsack is equal to
the selected items. Hence, no more item can be selected.
And the total profit is 100 + 280 + 120 * (10/20) = 380 + 60 = 440
This is the optimal solution. We cannot gain more profit selecting any different combination of
items.
Code:
Output:
Give the Answer to the below Short Questions:
1. The Knapsack problem is an example of
a) Greedy algorithm b) 2D dynamic programming
c) 1D dynamic programming d) Divide and conquer
Practical Set-9
1. Visited
2. Not Visited
The purpose of the algorithm is to mark each vertex as visited while avoiding cycles.
DFS Example
Let's see how the Depth First Search algorithm works with an example. We use an undirected
graph with 5 vertices.
We start from vertex 0, the DFS algorithm starts by putting it in the Visited list and putting all its
adjacent vertices in the stack.
Next, we visit the element at the top of stack i.e. 1 and go to its adjacent nodes. Since 0 has
already been visited, we visit 2 instead.
Vertex 2 has an unvisited adjacent vertex in 4, so we add that to the top of the stack and visit it.
After we visit the last element 3, it doesn't have any unvisited adjacent nodes, so we have
completed the Depth First Traversal of the graph.
Aim 9.1: : Write a program to implement DFS
Code:
Output:
Traversal means visiting all the nodes of a graph. Breadth first traversal or Breadth first Search is
a recursive algorithm for searching all the vertices of a graph or tree data structure. In this article,
you will learn with the help of examples the BFS algorithm, BFS pseudocode and the code of the
breadth first search algorithm with implementation in C++, C, Java and Python programs.
BFS algorithm
A standard DFS implementation puts each vertex of the graph into one of two categories:
1. Visited
2. Not Visited
The purpose of the algorithm is to mark each vertex as visited while avoiding cycles.
The algorithm works as follows:
1. Start by putting any one of the graph's vertices at the back of aqueue.
2. Take the front item of the queue and add it to the visited list.
3. Create a list of that vertex's adjacent nodes. Add the ones which aren't in the visited list
to the back of the queue.
4. Keep repeating steps 2 and 3 until the queue is empty.
The graph might have two different disconnected parts so to make sure that we cover every
vertex, we can also run the BFS algorithm on every node
BFS example
Let's see how the Breadth First Search algorithm works with an example. We use an undirected
graph with 5 vertices.
We start from vertex 0, the BFS algorithm starts by putting it in the Visited list and putting all its
adjacent vertices in the stack.
Next, we visit the element at the front of queue i.e. 1 and go to its adjacent nodes. Since 0 has
already been visited, we visit 2 instead.
Vertex 2 has an unvisited adjacent vertex in 4, so we add that to the back of the queue and visit 3,
which is at the front of the queue.
Only 4 remains in the queue since the only adjacent node of 3 i.e. 0 is already visited. We visit it.
Since the queue is empty, we have completed the Depth First Traversal of the graph.
Aim 9.2: Write a program to implement BFS
Code:
Output:
Give the Answer to Questions:
1. Depth First Search is equivalent to which of the traversal in the BinaryTrees?
a) Pre-order Traversal b) Post-order Traversal
c) Level-order Traversal d) In-order Traversal
5. Breadth First Search is equivalent to which of the traversals in the Binary Trees?
7. The Data structure used in standard implementation of Breadth First Search is?
a) Stack b) Queue
c) Linked List d) None
Explanation:
The idea behind Prim’s algorithm is simple: a spanning tree means all vertices must be connected.
So the two disjoint subsets (discussed above) of vertices must be connected to make
a Spanning Tree. And they must be connected with the minimum weight edge to make it
a Minimum Spanning Tree.
Algorithm
1) Create a set mstSet that keeps track of vertices already included in MST.
2) Assign a key value to all vertices in the input graph. Initialize all key values as
INFINITE. Assign the key value as 0 for the first vertex so that it is picked first.
3) While mstSet doesn’t include all vertices
a) Pick a vertex u which is not there in mstSet and has minimum key value.
b) Include u to mstSet.
c) Update key value of all adjacent vertices of u. To update the key values, iterate
through all adjacent vertices. For every adjacent vertex v, if weight of edge u-v is less
than the previous key value of v, update the key value as weight of u-v
The idea of using key values is to pick the minimum weight edge from the cut. The key values are
used only for vertices which are not yet included in MST, the key value for these vertices indicate
the minimum weight edges connecting them to the set of vertices included in MST.
Example:
The set mstSet is initially empty and keys assigned to vertices are {0, INF, INF, INF, INF, INF,
INF, INF} where INF indicates infinite. Now pick the vertex with the minimum key value. The
vertex 0 is picked, including it in mstSet. So mstSet becomes {0}. After including mstSet, update
key values of adjacent vertices. Adjacent vertices of 0 are 1 and 7. The key values of 1 and 7 are
updated as 4 and 8. Following subgraph shows vertices and their key values, only the vertices
with finite key values are shown. The vertices included in MST are shown in green color.
Pick the vertex with minimum key value and not already included in MST (not in mstSET). The
vertex 1 is picked and added to mstSet. So mstSet now becomes {0, 1}. Update the key values of
adjacent vertices of 1. The key value of vertex 2 becomes 8.
Pick the vertex with minimum key value and not already included in MST (not in mstSET).
We can either pick vertex 7 or vertex 2, let vertex 7 is picked. So mstSet now becomes {0, 1, 7}.
Update the key values of adjacent vertices of 7. The key value of vertex 6 and 8 becomes finite
(7 and 1 respectively).
Pick the vertex with minimum key value and not already included in MST (not in mstSET).
Vertex 6 is picked. So mstSet now becomes {0, 1, 7, 6}. Update the key values of adjacent
vertices of 6. The key value of vertex 5 and 8 are updated.
We repeat the above steps until mstSet includes all vertices of given graph. Finally, we get the
following graph.
Code:
Output:
Give the Answer to the below Questions:
1. What is the time complexity to extract a vertex from the priority queue in
Prim’s algorithm?
a) log (V) c) V.V
b) E.E d) log (E)
2. What algorithm technique is used in the implementation of Prim’s solution for the MST?
a) Greedy Technique
b) Divide-and-Conquer Technique
c) Dynamic Programming Technique
d) The algorithm combines more than one of the above techniques
3. The output of Prims algorithm is .
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
Conclusion/ Outcome:
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
Practical Set-11
Explanation:
Below are the steps for finding MST using Kruskal’s algorithm
1. Sort all the edges in non-decreasing order of their weight.
2. Pick the smallest edge. Check if it forms a cycle with the spanning tree formed so far. If
cycleis not formed, include this edge. Else, discard it.
3. Repeat step#2 until there are (V-1) edges in the spanning tree.
The algorithm is a Greedy Algorithm. The Greedy Choice is to pick the smallest weight edge that
does not cause a cycle in the MST constructed so far. Let us understand it with an example:
Consider the below input graph.
The graph contains 9 vertices and 14 edges. So, the minimum spanning tree formed will be having
(9 – 1) = 8 edges.
After sorting:
Weight Src Dest
1 7 6
2 8 2
2 6 5
4 0 1
4 2 5
6 8 6
7 2 3
7 7 8
8 0 7
8 1 2
9 3 4
10 5 4
11 1 7
14 3 5
Now pick all edges one by one from sorted list of edges
6. Pick edge 8-6: Since including this edge results in cycle, discard it.
8. Pick edge 7-8: Since including this edge results in cycle, discard it.
Since the number of edges included equals (V – 1), the algorithm stops here.
Code
Output:
Give the Answer to the below Questions:
1. What is the time complexity to extract a vertex from the priority queue
in Krushkal’s algorithm?
4. Assume a graph has 10 vertices and 20 edges. In Krushkal’s minimum spanning tree
method, 5 edges are rejected. How many edges are not considered during execution of the
algorithm on the given graph?
a) 6 c) 5
b) 4 d) 10
Conclusion/ Outcome:
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
Practical Set-12
Explanation: Given two sequences, find the length of the longest subsequence present in both of them.
A subsequence is a sequence that appears in the same relative order, but not necessarily contiguous. For
example, “abc”, “abg”, “bdf”, “aeg”, ‘”acefg”, .. etc are subsequences of “abcdefg”.
Code:
Output:
References
1. http://www.personal.kent.edu/~rmuhamma/Algorithms/algorithm.html
2. http://www.princeton.edu/~achaney/tmve/wiki100k/docs/Merge_sort.html
3. http://cs.uef.fi/pages/franti/asa/notes.html
4. https://www8.cs.umu.se/kurser/TDBA77/VT06/algorithms/INDEX.HTM
5. IETE e Material
6. https://www.geeksforgeeks.org
7. https://www.programiz.com/
8. https://www.thecrazyprogrammer.com
9. http://c-program-example.com/2011/10
10.https://www.tutorialspoint.com/data_structures_algorith
ms 11.http://www.c4learn.com/c-programs
12.http://c-program-example.com/