Ada Lab Manual - bcl404
Ada Lab Manual - bcl404
Ada Lab Manual - bcl404
Course Material
2022 SCHEME
ANALYSIS & DESIGN OF ALGORITHMS LAB
(BCSL404)
4th SEMESTER
by
Mr. Anand M
Assistant Professor, ISE, GSSSIETW, Mysuru
anandm@gsss.edu.in
DEPARTMENT OF INFORMATION SCIENCE & ENGINEERING
Vision:
To be recognized nationally as an accomplished department producing global leaders and
researchers as committed, enthusiastic and excellent ethical women technical graduate for the
better tomorrow.
Mission:
M1: To provide Students with Innovative and research skills, which is need of the hour for
technical students.
M2: To impart knowledge to the students of Information Science and Engineering with
relevant core and practical knowledge inculcating real time experience in the promising field
of computing.
M3: To prepare the graduates to meet information technology challenges with a blend of
social, human, ethical and value-based education.
@# 16032024
Template for Practical Course and if AEC is a practical Course Annexure-V
@# 16032024
Template for Practical Course and if AEC is a practical Course Annexure-V
● SEE shall be conducted jointly by the two examiners of the same institute, examiners are
appointed by the Head of the Institute.
● The examination schedule and names of examiners are informed to the university before the
conduction of the examination. These practical examinations are to be conducted between the
schedule mentioned in the academic calendar of the University.
● All laboratory experiments are to be included for practical examination.
● (Rubrics) Breakup of marks and the instructions printed on the cover page of the answer script
to be strictly adhered to by the examiners. OR based on the course requirement evaluation
rubrics shall be decided jointly by examiners.
● Students can pick one question (experiment) from the questions lot prepared by the examiners
jointly.
● Evaluation of test write-up/ conduction procedure and result/viva will be conducted jointly by
examiners.
● General rubrics suggested for SEE are mentioned here, writeup-20%, Conduction procedure and
result in -60%, Viva-voce 20% of maximum marks. SEE for practical shall be evaluated for 100 marks
and scored marks shall be scaled down to 50 marks (however, based on course type, rubrics shall be
decided by the examiners)
● Change of experiment is allowed only once and 15% of Marks allotted to the procedure part are to be
made zero.
The minimum duration of SEE is 02 hours
@# 16032024
DEPARTMENT OF INFORMATION SCIENCE & ENGINEERING
Semester & Year: 4th Semester, 2023-24 Faculty Name: Mr. Anand M
Subject with Code: Analysis & Design of Algorithms Lab (BCSL404)
CO1: Develop programs to solve computational problems using suitable algorithm design strategy.
CO2: Compare algorithm design strategies by developing equivalent programs and observing running times for
analysis
CO3: Make use of suitable integrated development tools to develop programs
CO4: Choose appropriate algorithm design techniques to develop solution to the computational and complex
problems.
CO5: Demonstrate and present the development of program, its execution and running time(s) and record the
results/inferences.
Sl Program COs
Experiments
No. No.
Practice INTRODUCTION: CO1
1
programs Sample Exercise programs
Design and implement C/C++ Program to find Minimum Cost Spanning Tree of a CO1,CO2
2 1
given connected undirected graph using Kruskal's algorithm.
Design and implement C/C++ Program to find Minimum Cost Spanning Tree of a CO1,CO2
3 2
given connected undirected graph using Prim's algorithm
a. Design and implement C/C++ Program to solve All-Pairs Shortest Paths problem
using Floyd's algorithm. CO1, CO2
4 3
b. Design and implement C/C++ Program to find the transitive closure using Warshal's
algorithm.
Design and implement C/C++ Program to find shortest paths from a given vertex in a CO3
5 4
weighted connected graph to other vertices using Dijkstra's algorithm.
Design and implement C/C++ Program to obtain the Topological ordering of vertices in CO3
6 5
a given digraph
Design and implement C/C++ Program to solve 0/1 Knapsack problem using Dynamic CO4
7 6 Programming method.
Design and implement C/C++ Program to solve discrete Knapsack and continuous CO4
8 7
Knapsack problems using greedy approximation method.
Design and implement C/C++ Program to find a subset of a given set S = {sl , CO4
9 8
DEPARTMENT OF INFORMATION SCIENCE & ENGINEERING
s2,.....,sn} of n positive integers whose sum is equal to a given positive integer d.
Design and implement C/C++ Program to sort a given set of n integer elements using
Selection Sort method and compute its time complexity. Run the program for varied
CO5
10 9 values of n> 5000 and record the time taken to sort. Plot a graph of the time taken
versus n. The elements can be read from a file or can be generated using the random
number generator.
Design and implement C/C++ Program to sort a given set of n integer elements using
Quick Sort method and compute its time complexity. Run the program for varied
11 10 values of n> 5000 and record the time taken to sort. Plot a graph of the time taken CO5
versus n. The elements can be read from a file or can be generated using the random
number generator.
Design and implement C/C++ Program to sort a given set of n integer elements using
Merge Sort method and compute its time complexity. Run the program for varied
12 11 values of n> 5000, and record the time taken to sort. Plot a graph of the time taken CO5
versus n. The elements can be read from a file or can be generated using the random
number generator.
Design and implement C/C++ Program for N Queen's problem using Backtracking. CO5
13 12
The weightage of Continuous Internal Evaluation (CIE) is 50% and for Semester End Exam (SEE) is
50%. The minimum passing mark for the CIE is 40% of the maximum marks (20 marks out of 50) and for
the SEE minimum passing mark is 35% of the maximum marks (18 out of 50 marks). A student shall be
deemed to have satisfied the academic requirements and earned the credits allotted to each subject/ course
if the student secures a minimum of 40% (40 marks out of 100) in the sum total of the CIE (Continuous
Internal Evaluation) and SEE (Semester End Examination) taken together.
CIE: 50 Marks
Out of the 50 marks allotted for the lab assessment-Lab internals for 20 marks will be conducted at the end of the
lab cycle. Continuous evaluation will considered for 30 marks.
The Lab internals will be evaluated for 20 marks.
Procedure Writing 4M
Execution 8M
Viva 6M
The marks split up continuous evaluation
Procedure Writing 10M
Execution 10M
Record 5M
Viva 5M
Course Outcomes
Develop programs to solve computational problems using suitable algorithm
C204.1
design strategy.
Compare algorithm design strategies by developing equivalent programs and
C204.2
observing running times for analysis
C204.3 Make use of suitable integrated development tools to develop programs
Choose appropriate algorithm design techniques to develop solution to the
C204.4
computational and complex problems.
Demonstrate and present the development of program, its execution and running
C204.5
time(s) and record the results/inferences.
CO/PO PO1 PO2 PO3 PO4 PO5 PO6 PO7 PO8 PO9 P010 PO11 PO12 PSO1 PSO2
C204.1 2 2 2 2 - - - - - - - - 1 -
C204.2 2 2 2 2 - - - - - - - - 1 -
C204.3 2 2 2 2 - - - - - - - - 1 -
C204.4 2 2 2 2 - - - - - - - - 1 -
C204.5 2 2 2 2 - - - - - - - - 1 -
C204 2 2 2 2 - - - - - - - - 1 -
1: Slight 2: Moderate 3: Substantial - : No Correlation
1. Design and implement C/C++ Program to find Minimum Cost Spanning Tree of a
given connected undirected graph using Kruskal's algorithm.
#include<stdio.h>
int ne=1,min_cost=0;
void main()
{
int n,i,j,min,a,u,b,v,cost[20][20],parent[20];
printf("Enter the no. of vertices:");
scanf("%d",&n);
printf("\nEnter the cost matrix:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&cost[i][j]);
for(i=1;i<=n;i++)
parent[i]=0;
printf("\nThe edges of spanning tree are\n");
while(ne<n)
{
min=999;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(cost[i][j]<min)
{
min=cost[i][j];
a=u=i;
b=v=j;
}
}
}
while(parent[u])
u=parent[u];
while(parent[v])
v=parent[v];
if(u!=v)
{
printf("Edge %d\t(%d->%d)=%d\n",ne++,a,b,min);
min_cost=min_cost+min;
parent[v]=u;
}
cost[a][b]=cost[a][b]=999;
}
printf("\nMinimum cost=%d\n",min_cost);
}
Output:
2. Design and implement C/C++ Program to find Minimum Cost Spanning Tree of a
given connected undirected graph using Prim's algorithm.
#include<stdio.h>
int a,b,u,v,n,i,j,ne=1;
int visited[10]={0},min,mincost=0,cost[10][10];
void main()
{
Output:
3.a Design and implement C/C++ Program to solve All-Pairs Shortest Paths problem using
Floyd's algorithm.
#include <stdio.h>
#include <limits.h>
#define V 4
int main() {
int graph[V][V] = {{0, INT_MAX, 3, INT_MAX},
{2, 0, INT_MAX, INT_MAX},
{INT_MAX, 7, 0, 1},
{6, INT_MAX, INT_MAX, 0}};
floydWarshall(graph);
return 0;
}
Output:
3.b Design and implement C/C++ Program to find the transitive closure using Warshal's
algorithm.
# include <stdio.h>
int n,a[10][10],p[10][10];
void path()
{
int i,j,k;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
p[i][j]=a[i][j];
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(p[i][k]==1&&p[k][j]==1) p[i][j]=1;
}
void main()
{
int i,j;
printf("Enter the number of nodes:");
scanf("%d",&n);
printf("\nEnter the adjacency matrix:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
path();
printf("\nThe path matrix is showm below\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",p[i][j]);
printf("\n");
}
}
Output:
4. Design and implement C/C++ Program to find shortest paths from a given vertex in a
weighted connected graph to other vertices using Dijkstra's algorithm.
#include<stdio.h>
void dij(int, int [20][20], int [20], int [20], int);
void main() {
int i, j, n, visited[20], source, cost[20][20], d[20];
printf("Enter no. of vertices: ");
scanf("%d", &n);
printf("Enter the cost adjacency matrix\n");
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++) {
scanf("%d", &cost[i][j]);
}
}
printf("\nEnter the source node: ");
scanf("%d", &source);
dij(source, cost, visited, d, n);
for (i = 1; i <= n; i++) {
if (i != source)
printf("\nShortest path from %d to %d is %d", source, i, d[i]);
}
}
void dij(int source, int cost[20][20], int visited[20], int d[20], int n) {
int i, j, min, u, w;
for (i = 1; i <= n; i++) {
visited[i] = 0;
d[i] = cost[source][i];
}
visited[source] = 1;
d[source] = 0;
for (j = 2; j <= n; j++) {
min = 999;
for (i = 1; i <= n; i++) {
if (!visited[i]) {
if (d[i] < min) {
min = d[i];
u = i;
}
}
}
visited[u] = 1;
for (w = 1; w <= n; w++) {
if (cost[u][w] != 999 && visited[w] == 0) {
if (d[w] > cost[u][w] + d[u])
d[w] = cost[u][w] + d[u];
}
}
}
}
Output:
5. Design and implement C/C++ Program to obtain the Topological ordering of vertices in
a given digraph.
#include<stdio.h>
void findindegree(int [10][10],int[10],int);
void topological(int,int [10][10]);
void main()
{
int a[10][10],i,j,n;
printf("Enter the number of nodes:");
scanf("%d",&n);
printf("\nEnter the adjacency matrix\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
printf("\nThe adjacency matirx is:\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
topological(n,a);
}
void findindegree(int a[10][10],int indegree[10],int n)
{
int i,j,sum;
for(j=1;j<=n;j++)
{
sum=0;
for(i=1;i<=n;i++)
{
sum=sum+a[i][j];
}
indegree[j]=sum;
}
}
void topological(int n,int a[10][10])
{
int k,top,t[100],i,stack[20],u,v,indegree[20];
k=1;
top=-1;
findindegree(a,indegree,n);
for(i=1;i<=n;i++)
{
if(indegree[i]==0)
{
stack[++top]=i;
}
}
while(top!=-1)
{
u=stack[top--];
t[k++]=u;
for(v=1;v<=n;v++)
{
if(a[u][v]==1)
{
indegree[v]--;
if(indegree[v]==0)
{
stack[++top]=v;
}}
}}
printf("\nTopological sequence is\n");
for(i=1;i<=n;i++)
printf("%d\t",t[i]);
}
Output:
6. Design and implement C/C++ Program to solve 0/1 Knapsack problem using Dynamic
Programming method.
#include<stdio.h>
#define MAX 50
int p[MAX],w[MAX],n;
int knapsack(int,int);
int max(int,int);
void main()
{
int m,i,optsoln;
Output:
7. Design and implement C/C++ Program to solve discrete Knapsack and continuous
Knapsack problems using greedy approximation method.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Structure to represent an item
struct Item {
int weight;
int value;
};
// Function to solve discrete knapsack using greedy approach
int discreteKnapsack(vector<Item>& items, int capacity) {
// Sort items based on their value per unit weight
sort(items.begin(), items.end(), [](const Item& a, const Item& b) {
return (double)a.value / a.weight > (double)b.value / b.weight;
});
int totalValue = 0;
int currentWeight = 0;
// Fill the knapsack with items
for (const Item& item : items) {
if (currentWeight + item.weight <= capacity) {
currentWeight += item.weight;
totalValue += item.value;
}
}
return totalValue;
}
// Function to solve continuous knapsack using greedy approach
double continuousKnapsack(vector<Item>& items, int capacity) {
// Sort items based on their value per unit weight
sort(items.begin(), items.end(), [](const Item& a, const Item& b) {
return (double)a.value / a.weight > (double)b.value / b.weight;
});
double totalValue = 0.0;
int currentWeight = 0;
// Fill the knapsack with items fractionally
for (const Item& item : items) {
if (currentWeight + item.weight <= capacity) {
currentWeight += item.weight;
totalValue += item.value;
} else {
int remainingCapacity = capacity - currentWeight;
totalValue += (double)item.value / item.weight * remainingCapacity;
break;
} }
return totalValue;
}
int main() {
vector<Item> items;
int n, capacity;
// Input number of items and capacity of knapsack
cout << "Enter the number of items: ";
cin >> n;
cout << "Enter the capacity of knapsack: ";
cin >> capacity;
// Input the weight and value of each item
cout << "Enter the weight and value of each item:" << endl;
for (int i = 0; i < n; i++) {
Item item;
cout << "Item " << i + 1 << ": ";
cin >> item.weight >> item.value;
items.push_back(item);
}
// Solve discrete knapsack problem
int discreteResult = discreteKnapsack(items, capacity);
cout << "Maximum value for discrete knapsack: " << discreteResult << endl;
// Solve continuous knapsack problem
double continuousResult = continuousKnapsack(items, capacity);
cout << "Maximum value for continuous knapsack: " << continuousResult << endl;
return 0;
}
Output:
8. Design and implement C/C++ Program to find a subset of a given set S = {sl , s2,.....,sn} of
n positive integers whose sum is equal to a given positive integer d.
#include<stdio.h>
void subset(int,int,int);
int x[10],w[10],d,count=0;
void main()
{
int i,n,sum=0;
return;
}
subset(0,0,sum);
if(count==0)
{
printf("No solution\n");
return;
}
}
void subset(int cs,int k,int r)
{
int i;
x[k]=1;
if(cs+w[k]==d)
{
printf("\n\nSubset %d\n",++count);
for(i=0;i<=k;i++)
if(x[i]==1)
printf("%d\t",w[i]);
}
else
if(cs+w[k]+w[k+1]<=d)
subset(cs+w[k],k+1,r-w[k]);
if(cs+r-w[k]>=d && cs+w[k]<=d)
{
x[k]=0;
subset(cs,k+1,r-w[k]);
}
}
Output:
9. Design and implement C/C++ Program to sort a given set of n integer elements using
Selection Sort method and compute its time complexity. Run the program for varied values
of n> 5000 and record the time taken to sort. Plot a graph of the time taken versus n. The
elements can be read from a file or can be generated using the random number generator.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// Function to perform selection sort
void selectionSort(int arr[], int n) {
int i, j, minIndex, temp;
for (i = 0; i < n - 1; i++) {
minIndex = i;
for (j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// Swap the found minimum element with the first element
temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
// Function to generate random numbers between 0 and 999
int generateRandomNumber() {
return rand() % 1000;
}
int main() {
// Set n value
int n = 6000;
Output:
10. Design and implement C/C++ Program to sort a given set of n integer elements using
Quick Sort method and compute its time complexity. Run the program for varied values of
n> 5000 and record the time taken to sort. Plot a graph of the time taken versus n. The
elements can be read from a file or can be generated using the random number generator.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// Set n value
int n = 6000;
return 0;
}
Output:
11. Design and implement C/C++ Program to sort a given set of n integer elements using
Merge Sort method and compute its time complexity. Run the program for varied values of
n> 5000, and record the time taken to sort. Plot a graph of the time taken versus n. The
elements can be read from a file or can be generated using the random number generator.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// Merge two subarrays of arr[]
// First subarray is arr[l..m]
// Second subarray is arr[m+1..r]
void merge(int arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int main() {
// Set n value
int n = 6000;
Output:
12. Design and implement C/C++ Program for N Queen's problem using Backtracking.
#include <iostream>
#include <vector>
using namespace std;
// Function to print the solution
void printSolution(const vector<vector<char>>& board) {
for (const auto& row : board) {
for (char cell : row)
cout << " " << cell << " ";
cout << endl;
}
}
// Function to check if a queen can be placed on board[row][col]
bool isSafe(const vector<vector<char>>& board, int row, int col) {
int i, j;
int n = board.size();
return true;
// If placing queen in board[i][col] doesn't lead to a solution, then remove queen from
board[i][col]
board[i][col] = '-';
}
}
// If the queen cannot be placed in any row in this column, then return false
return false;
}
// Function to solve N Queens problem for 4 queens
void solve4Queens() {
int n = 4;
vector<vector<char>> board(n, vector<char>(n, '-'));
if (solveNQUtil(board, 0) == false) {
cout << "Solution does not exist" << endl;
return;
}
printSolution(board);
}
// Driver function
int main() {
cout << "Solution for 4 Queens problem:" << endl;
solve4Queens();
return 0;
}
Output:
VIVA QUESTIONS
1. What is an Algorithm?
Algorithm is a Step by step procedure to Solve a given problem for a finite number of input
producing finitenumber of output with desired output.
2. What is a Flow Chart?
Flow chart is a Graphical Representation of a solution to the Problem.
3. What is the difference between Algorithm, Flow Chart, Program?
Algorithm specifies the different things to be followed for solving a Problem.
Flow Chart is a Graphical Representation of a Solution to the Problem. Both
Algorithm and Flow Chartare Machine Independent.
Program is a Set of Instructions which is used as a tool to communicate to the
machine to get our workdone,Program is Machine Dependent for particular Machine.
4. What is the Aim of DAA lab or why we need to study DAA Lab
DAA is a discipline, where we are dealing with designing or writing the algorithm
keeping in Consideration of Space and Time Complexity, Such that Our Algorithm
should execute in a very minimum amount of time by Minimum Space or RAM.
5. Define Space and Time Complexity? Among this which one is more prioritized?
Space Complexeity is a measure of Amount of Space taken by a Program to finish its
Execution.
Time Complexeity is a measure of amount of time taken by a program to complte its
Execution.Depending Upon Application it is considered,EX:For Mobile or Handheld
Devices,We give Prefernce for both Spaceand time.
For a Huge and Inter active Systems like Web Applications we give more Preferences to
time Complexeity.
6. What is Design and what is Analysis of a Program?
Design is a Process of Writing an algorithm to a given Problem so that it should accept
finite number of input and finite number of output with a definite output and Should Exit
appropriately.
Analysis:Analysis is a next Phase of Writing an Algorithm ,in this phase we calculate
the Efficiency of anAlgorithm i.e time and space needed by an algorithm.
10. What is the Time Complexeity of Bubble Sort,Selection Sort ,Merge Sort,Quick
Sort?(L3)
Bubble Sort-n2, Selection Sort- n2 Merge Sort-nlog.n
Quick Sort -nLogn, Worst case for Quick Sort- n2
11. Which sorting agorithm is more Efficient and why?
Quick Sorting is More Efficient ,because this algorithm is
instable algorithm andinplace.
12. What do you mean by the term Instable Algorithms?
The Instable Algorithms are one, which divides the array as certainly depending upon
pivot or key elementand hence i index precedes index j
13. Which algorithms are faster?
Instable Algorithms are much Faster compared to Stable Algorithms.
14. For what type of instance Merge sort do better than Quick Sort?
For a Larger input and a sorted input values.
15. For what type of instance Quick sort do better than Merge Sort?
For Smaller Set of input numbers.
16. What are Inplace Algorithms?
Inplace Algorithms are the one which doesn't occupies Extra Space.
17. Write the order of growth terms as per the time Execution in Ascending Order.
logn,n,nlogn,n2,n3,. .... nn,2n,n!
27. Differentiate between Prims and Kruskals Algorithm for finding MST.
In Prims We consider any one vertex in the graph as Source and We compute the
distance from that source to other vertices ,after computing the vertices which has
minimum value among (n-1) vertices is added to tree vertices and that respective edges
added to tree Edges Set.The above mentioned Process continues till we reach (n-1)
vertices.
In Kruskals we first arrange the edges in Ascending Order and then we start to form the
tree which wont form cycles,if adding that edges forms cycles then that edges is dropped
from adding to tree edges.The above saidprocess is continues till we reach the count of
(n-1) Vertices.
In Merge Sort will divide the entire input set by 2 until we reach low<high and later
will find a solution to each item by comparing half of the array data set to the other
half array data set and finally we mergeit to form a sinle array(conquer)
34. What is the Basic Operations in Merge sort and Quick sort?
In Merge Sort the Basic Operations is Comparisions and in Quick sort basic Operations
is Partitioning andhence also known as partitioning sort.
35. Why the Insertion Sort?
We are Inserting an element to its suitable place by comparing n elements for each pass.
36. What is the Use of DFS and BFS?
DFS and BFS both used to check the Connectivity of a graph,Cyclicity in a
graph,Spanning tree of agraph.
37. Differentiate between DFS and BFS.
DFS and BFS are both the Graph Traversing Technique,in which DFS Traverse the
Graph in a depthwise(Vertical) and BFS Traverse the Graph from left to
right(Horizontal)
38. Which Data structures used in BFS and DFS.
BFS USes Queue as its data structure and DFS uses as stack its Data structure.
39. What are back edges in DFS and Cross Edges in BFS.
Back Edges and Cross edges are the Edges which already visited by a ancestor node.
40. What is Topological Sorting?
Topological Sorting is a Sorting Technique used for sorting Vertices in the Graph.
41. What is the Conditions necessary for a Topological Sorting?
For a Topological Sorting the Graph Should be DAG(Directed Acyclic Graph)
42. What are the Different methods used to solve a topological Sorting ?
1. Source Removal Method
2. Using DFS based Scheme.
43. What is the Use of Topological Sorting?
Use of Topological Ordering is in the field of Operating System for Scheduling and in
Networks,Automation and Robotics.
problem.
61. What is the goal of Warshalls Algorithm?(L3)
Warshall’s algorithm is to find the shortest distance between a node to all the other
nodes in the graph. It Uses the Property of Transitive Closure i.e if there exist a path
between (i,k) and (k,j) then there surely exist a path between (i,j)
(i,k) & (k,j)---(I,J)
62. What is the use of Floyds algorithm?(L3)
It is use to find the All pairs shortest Path of an Graph.
Institute Mission
To support value-based education with state of art infrastructure.
To empower women with the additional skill for professional future career
To enrich students with research blends in order to fulfil the international challenges