DAA Experiment - 3
DAA Experiment - 3
Experiment No. 3
AIM: Divide and Conquer: Maximum Sub-Array, Closest Pair and Strassen’s
Matrix Multiplication
Program 1
PROBLEM: To implement Maximum Sub Array and Closest Pair algorithms and pass
through batches of 1000, 2000, 3000, …, 10000 and analyse best case,
worst case and average case time complexities for two cases: Divide and
Conquer approach and Brute Force approach.
THEORY:
Kadane’s Algorithm (O(n))
maxEndingHere=max(current
element,maxEndingHere+current element)
return maxSoFar;
}
int mid = n / 2;
Point midPoint = P[mid];
Point strip[n];
int j = 0;
for (int i = 0; i < n; i++) {
if (abs(P[i].x - midPoint.x) < d)
strip[j++] = P[i];
}
float minDist = d;
for (int i = 0; i < size; i++) {
for (int j = i + 1; j < size && (strip[j].y -
strip[i].y) < minDist; j++) {
minDist = min(minDist, distance(strip[i],
strip[j]));
}
}
return minDist;
}
int main() {
srand(time(0)); // Seed for random numbers
fclose(file);
printf("\nExecution times saved to
brute_force_times.csv\n");
return 0;
}
BRUTE FORCE:
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>
int main() {
srand(time(0)); // Seed for random number generation
fclose(file);
printf("\nExecution times saved to
optimized_times.csv\n");
return 0;
}
BRUTE FORCE:
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
OBSERVATION
ANALYSIS:
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
CONCLUSION:
Maximum Subarray Problem
Final Verdict:
Final Verdict:
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
● Divide and Conquer O(n log n) is the best method for large
datasets.
● Brute force is only useful for very small inputs.
Program 1
THEORY:
Matrix Multiplication Analysis
applied).
● Worst Case: O(n^3).
● Average Case: O(n^3).
Performance Analysis
THEORY:
Strassen’s Matrix Multiplication is an algorithm that reduces the number of
multiplications required to multiply two square matrices. It was developed
by Volker Strassen in 1969 and improves the standard O(n^3) complexity of
matrix multiplication to approximately O(n^{2.81}).
Key Idea:
of matrix sub-blocks.
Steps:
1. Divide the n×n times n matrices into four n/2×n/2 submatrices.
2. Compute 7 special products (instead of 8) using these submatrices.
3. Use these products to construct the resulting matrix.
Strassen’s 7 Multiplications:
M1=(A11+A22)(B11+B22)
M2=(A21+A22)B11
M3=A11(B12−B22)
M4=A22(B21−B11)
M5=(A11+A12)B22
M6=(A21−A11)(B11+B12)
M7=(A12−A22)(B21+B22)
C11=M1+M4−M5+M7
C12=M3+M5
C22=M1−M2+M3+M6
Since Strassen’s method is recursive, it works best for large matrices. For
very large matrices, further optimizations can be applied to achieve near
O(n^2) performance.
ALGORITHM:
StrassenMultiply(A, B, N):
If N == 1:
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
C11 = M1 + M4 - M5 + M7
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
C12 = M3 + M5
C21 = M2 + M4
C22 = M1 - M2 + M3 + M6
Return C
PROGRAM:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
fprintf(file, "\n");
fclose(file);
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
C[i][j] = 0;
}
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
if (size == 1) {
return;
A11[i][j] = A[i][j];
B11[i][j] = B[i][j];
C[i][j] = C11[i][j];
}
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
free(A11[i]);
free(A12[i]);
free(A21[i]);
free(A22[i]);
free(B11[i]);
free(B12[i]);
free(B21[i]);
free(B22[i]);
free(C11[i]);
free(C12[i]);
free(C21[i]);
free(C22[i]);
free(P1[i]);
free(P2[i]);
free(P3[i]);
free(P4[i]);
free(P5[i]);
free(P6[i]);
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
free(P7[i]);
free(temp1[i]);
free(temp2[i]);
free(A11);
free(A12);
free(A21);
free(A22);
free(B11);
free(B12);
free(B21);
free(B22);
free(C11);
free(C12);
free(C21);
free(C22);
free(P1);
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
free(P2);
free(P3);
free(P4);
free(P5);
free(P6);
free(P7);
free(temp1);
free(temp2);
if (size == 1) {
return;
A11[i][j] = A[i][j];
B11[i][j] = B[i][j];
C[i][j] = C11[i][j];
free(A11[i]);
free(A12[i]);
free(A21[i]);
free(A22[i]);
free(B11[i]);
free(B12[i]);
free(B21[i]);
free(B22[i]);
free(C11[i]);
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
free(C12[i]);
free(C21[i]);
free(C22[i]);
free(temp1[i]);
free(temp2[i]);
free(A11);
free(A12);
free(A21);
free(A22);
free(B11);
free(B12);
free(B21);
free(B22);
free(C11);
free(C12);
free(C21);
free(C22);
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
free(temp1);
free(temp2);
fprintf(file, "\n");
fclose(file);
fclose(file);
int main() {
srand(time(NULL));
double brute_times[count];
double dnc_times[count];
double strassen_times[count];
generate_matrix(size, A, filename_a);
generate_matrix(size, B, filename_b);
brute_force_multiplication(size, A, B, C);
save_matrix(size, C, filename_res);
start = clock();
dnc_multiplication(size, A, B, C);
end = clock();
start = clock();
strassen_multiplication(size, A, B, C);
end = clock();
free(A[j]);
free(B[j]);
free(C[j]);
free(A);
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
free(B);
free(C);
write_execution_times("execution_times.csv", sizes,
strassen_times, dnc_times, brute_times, count);
return 0;
OUTPUT:
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
OBSERVATION
ANALYSIS:
CONCLUSION:
Strassen’s matrix multiplication algorithm improves the efficiency of
traditional matrix multiplication by reducing the number of recursive
multiplications from 8 to 7. This reduces the overall time complexity from
BHARATIYA VIDYA BHAVAN’S
SARDAR PATEL INSTITUTE OF TECHNOLOGY
Bhavan’s Campus, Munshi Nagar, Andheri (West), Mumbai – 400058-India
Department of Computer Engineering
Key Findings:
Final Verdict: