Presentation
Presentation
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "Minimum number of scalar multiplications: " << minMultiplications <<
endl;
return 0;
}
//6
#include <iostream>
#include <vector>
return result;
}
return result;
}
if (n <= 2) {
return result;
}
int mid = n / 2;
vector<vector<int>> A11(mid, vector<int>(mid));
vector<vector<int>> A12(mid, vector<int>(mid));
vector<vector<int>> A21(mid, vector<int>(mid));
vector<vector<int>> A22(mid, vector<int>(mid));
vector<vector<int>> B11(mid, vector<int>(mid));
vector<vector<int>> B12(mid, vector<int>(mid));
vector<vector<int>> B21(mid, vector<int>(mid));
vector<vector<int>> B22(mid, vector<int>(mid));
B11[i][j] = B[i][j];
B12[i][j] = B[i][j + mid];
B21[i][j] = B[i + mid][j];
B22[i][j] = B[i + mid][j + mid];
}
}
vector<vector<int>> P1 = strassenMatrixMultiplication(A11,
matrixSubtraction(B12, B22));
vector<vector<int>> P2 = strassenMatrixMultiplication(matrixAddition(A11, A12),
B22);
vector<vector<int>> P3 = strassenMatrixMultiplication(matrixAddition(A21, A22),
B11);
vector<vector<int>> P4 = strassenMatrixMultiplication(A22,
matrixSubtraction(B21, B11));
vector<vector<int>> P5 = strassenMatrixMultiplication(matrixAddition(A11, A22),
matrixAddition(B11, B22));
vector<vector<int>> P6 = strassenMatrixMultiplication(matrixSubtraction(A12,
A22), matrixAddition(B21, B22));
vector<vector<int>> P7 = strassenMatrixMultiplication(matrixSubtraction(A11,
A21), matrixAddition(B11, B12));
return result;
}
int main() {
return 0;
}
Resultant Matrix:
19 22
43 50
//7
#include <iostream>
#include <vector>
return dp[n][capacity];
}
int main() {
cout << "Maximum value that can be obtained: " << maxValue << endl;
return 0;
}
//8
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Activity {
int start;
int finish;
};
bool compareActivities(const Activity& a, const Activity& b) {
return a.finish < b.finish;
}
void activitySelection(const vector<Activity>& activities) {
int n = activities.size();
vector<Activity> sortedActivities = activities;
sort(sortedActivities.begin(), sortedActivities.end(), compareActivities);
cout << "Selected Activity: (" << sortedActivities[0].start << ", " <<
sortedActivities[0].finish << ")" << endl;
int prevFinishTime = sortedActivities[0].finish;
for (int i = 1; i < n; ++i) {
if (sortedActivities[i].start >= prevFinishTime) {
cout << "Selected Activity: (" << sortedActivities[i].start << ", "
<< sortedActivities[i].finish << ")" << endl;
prevFinishTime = sortedActivities[i].finish;
}
}
}
int main() {
vector<Activity> activities = {
{1, 2}, {3, 4}, {0, 6}, {5, 7}, {8, 9}, {5, 9}
};
cout << "Activities selected for maximum compatibility:" << endl;
activitySelection(activities);
return 0;
}
//9
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
//10
#include <iostream>
#include <vector>
using namespace std;
const int INF = 9999;
void floydWarshall(vector<vector<int>>& graph, int numVertices) {
for (int k = 0; k < numVertices; ++k) {
for (int i = 0; i < numVertices; ++i) {
for (int j = 0; j < numVertices; ++j) {
if (graph[i][k] + graph[k][j] < graph[i][j]) {
graph[i][j] = graph[i][k] + graph[k][j];
}
}
}
}
}
void printSolution(const vector<vector<int>>& dist, int numVertices) {
cout << "Shortest distances between vertices:\n";
for (int i = 0; i < numVertices; ++i) {
for (int j = 0; j < numVertices; ++j) {
if (dist[i][j] == INF) {
cout << "INF\t";
} else {
cout << dist[i][j] << "\t";
}
}
cout << endl;
}
}
int main() {
const int numVertices = 4;
vector<vector<int>> graph = {
{0, 3, INF, 5},
{2, 0, INF, 4},
{INF, 1, 0, INF},
{INF, INF, 2, 0}
};
return 0;
}
Shortest distances between vertices:
03 7 5
2 0 6 4
3 1 0 5
5 3 2 0
//11
#include <iostream>
#include <vector>
using namespace std;
const int INF = 9999;
struct Edge {
int source;
int destination;
int weight;
};
void bellmanFord(vector<Edge>& edges, int numVertices, int source) {
vector<int> distance(numVertices, INF);
distance[source] = 0;
for (int i = 1; i < numVertices; ++i) {
for (const Edge& edge : edges) {
int u = edge.source;
int v = edge.destination;
int w = edge.weight;
if (distance[u] != INF && distance[u] + w < distance[v]) {
distance[v] = distance[u] + w;
}
}
}
for (const Edge& edge : edges) {
int u = edge.source;
int v = edge.destination;
int w = edge.weight;
if (distance[u] != INF && distance[u] + w < distance[v]) {
cout << "Graph contains a negative weight cycle." << endl;
return;
}
}
cout << "Shortest distances from the source " << source << ":\n";
for (int i = 0; i < numVertices; ++i) {
cout << "Vertex " << i << ": ";
if (distance[i] == INF) {
cout << "INF";
} else {
cout << distance[i];
}
cout << endl;
}
}
int main() {
vector<Edge> edges = {
{0, 1, -1},
{0, 2, 4},
{1, 2, 3},
{1, 3, 2},
{1, 4, 2},
{3, 1, 1},
{3, 2, 5},
{4, 3, -3}
};
return 0;
}
//12
#include <iostream>
#include <string>
using namespace std;
void naiveStringMatching(const string& text, const string& pattern) {
int n = text.length();
int m = pattern.length();
for (int i = 0; i <= n - m; ++i) {
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;
}
}
int main() {
string text = "AABAACAADAABAAABAA";
string pattern = "AABA";
naiveStringMatching(text, pattern);
return 0;
}
#include <iostream>
#include <string>
#include <cmath>
int main() {
string text = "AABAACAADAABAAABAA";
string pattern = "AABA";
rabinKarpStringMatching(text, pattern);
return 0;
}
//14
#include <bits/stdc++.h>
using namespace std;
struct Edge {
int dest;
int weight;
};
class Graph {
public:
int V;
vector<vector<Edge>> adjList;
inMST[u] = true;
for (const Edge &edge : adjList[u]) {
int v = edge.dest;
int weight = edge.weight;
int main() {
Graph g(5);
g.addEdge(0, 1, 2);
g.addEdge(0, 3, 6);
g.addEdge(1, 2, 3);
g.addEdge(1, 3, 8);
g.addEdge(1, 4, 5);
g.addEdge(2, 4, 7);
g.addEdge(3, 4, 9);
g.primMST();
return 0;
}
//15
#include <bits/stdc++.h>
using namespace std;
struct Edge {
int src, dest, weight;
};
class DisjointSet {
public:
vector<int> parent, rank;
DisjointSet(int n) : parent(n), rank(n, 0) {
for (int i = 0; i < n; ++i)
parent[i] = i;
}
int find(int v) {
if (v != parent[v])
parent[v] = find(parent[v]);
return parent[v];
}
void unionSets(int root1, int root2) {
if (rank[root1] < rank[root2])
parent[root1] = root2;
else if (rank[root1] > rank[root2])
parent[root2] = root1;
else {
parent[root1] = root2;
rank[root2]++;
}
}
};
bool compareEdges(const Edge& e1, const Edge& e2) {
return e1.weight < e2.weight;
}
class Graph {
public:
int V;
vector<Edge> edges;
Graph(int vertices) : V(vertices) {}
void addEdge(int src, int dest, int weight) {
Edge edge = {src, dest, weight};
edges.push_back(edge);
}
void kruskalMST() {
sort(edges.begin(), edges.end(), compareEdges);
DisjointSet ds(V);
cout << "Edges in the Minimum Spanning Tree:\n";
for (const Edge& edge : edges) {
int root1 = ds.find(edge.src);
int root2 = ds.find(edge.dest);
if (root1 != root2) {
cout << "Edge: " << edge.src << " - " << edge.dest << " Weight: "
<< edge.weight << "\n";
ds.unionSets(root1, root2);
}
}
}
};
int main() {
Graph g(5);
g.addEdge(0, 1, 2);
g.addEdge(0, 3, 6);
g.addEdge(1, 2, 3);
g.addEdge(1, 3, 8);
g.addEdge(1, 4, 5);
g.addEdge(2, 4, 7);
g.addEdge(3, 4, 9);
g.kruskalMST();
return 0;
}