Professional Documents
Culture Documents
QUESTION 1:
1. Karatsuba’s multiplication Algorithm
a) Multiply two polynomials
PROBLEM ANALYSIS:
ALGORITHM AND TIME COMPLEXITY:
CODE:
#include <stdio.h>
#include <math.h>
void karatsubaPolynomials(int A[], int B[], int result[], int degree) {
if (degree <= 1) {
// Base case: Use regular multiplication
for (int i = 0; i <= degree; ++i) {
for (int j = 0; j <= degree; ++j) {
result[i + j] += A[i] * B[j];
}
}
} else {
int mid = degree / 2;
int a0[mid + 1], a1[mid + 1], b0[mid + 1], b1[mid + 1];
for (int i = 0; i <= mid; ++i) {
a0[i] = A[i];
a1[i] = A[mid + i + 1];
b0[i] = B[i];
b1[i] = B[mid + i + 1];
}
int z0[2 * MAX_DEGREE + 1] = {0}, z1[2 * MAX_DEGREE + 1] = {0}, z2[2 *
MAX_DEGREE + 1] = {0};
int main() {
int A[MAX_DEGREE + 1] = {4, 3, 2, 1};
int B[MAX_DEGREE + 1] = {1, 3, 2, 5};
int result[MAX_DEGREE * 2 + 1] = {0};
printPolynomial(A, MAX_DEGREE);
printPolynomial(B, MAX_DEGREE);
karatsubaPolynomials(A, B, result, MAX_DEGREE);
printf("Result: ");
printPolynomial(result, MAX_DEGREE * 2);
return 0;
}
OUTPUT:
PROBLEM ANALYSIS:
ALGORITHM AND TIME COMPLEXITY:
CODE:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main() {
long x = 0b10010101; // Binary representation of 10010101
long y = 0b1010101; // Binary representation of 1010101
long result = karatsuba(x, y);
return 0;
}
OUTPUT:
int i = low - 1;
i++;
s[i] = s[j];
s[j] = temp;
temp = f[i];
f[i] = f[j];
f[j] = temp;
s[i + 1] = s[high];
s[high] = temp;
f[i + 1] = f[high];
f[high] = temp;
return i + 1;
quickSort(s, f, pi + 1, high);
int i = 1;
i = j;
int main() {
printMaxActivities(s, f, n);
return 0;
OUTPUT: