ada3
ada3
Algorithm 1 :
Kadane’s Algorithm
#include <stdio.h>
#include <limits.h>
if (current_sum < 0) {
current_sum = 0;
temp_start = i + 1;
}
}
printf("Maximum subarray sum: %d\n", max_sum);
printf("Subarray: ");
for (int i = start; i <= end; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {-2, 11, -4, 13, -5, 2};
int n = sizeof(arr) / sizeof(arr[0]);
array_sum(arr, n);
return 0;
}
Code :
Output :
Algorithm 2 :
Dynamic Programming Approach
Algorithm 2:
Code :
#include <stdio.h>
#include <limits.h>
if (current_sum < 0) {
current_sum = 0;
temp_start = i + 1; }
}
// Print results
printf("Maximum subarray sum: %d\n", max_sum);
printf("Subarray: ");
for (int i = start; i <= end; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {-2, 11, -4, 13, -5, 2};
int n = sizeof(arr) / sizeof(arr[0]);
max_subarray_dp(arr, n);
return 0;
}
Output :
Output :
Algorithm 3 :
Prefix Sum Approach
Algorithm :
Code :
#include <stdio.h>
#include <limits.h> // For INT_MIN
// Print results
printf("Maximum subarray sum: %d\n", max_sum);
printf("Subarray with max sum: ");
for (int i = start; i <= end; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {-2, 11, -4, 13, -5, 2};
int n = sizeof(arr) / sizeof(arr[0]);
max_subarray_prefix(arr, n);
return 0;
}
Code
Output :
Time Complexity :
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
// Algorithm 1
void algo(int A[], int l, int r)
{
int n = r - l + 1;
if (n == 2 && A[l] > A[r])
{
int temp = A[l];
A[l] = A[r];
A[r] = temp;
}
else if (n > 2)
{
int m = ceil((2.0 * n) / 3.0);
algo(A, l, l + m - 1);
algo(A, r - m + 1, r);
algo(A, l, l + m - 1);
}
}
// Algorithm 2
void algo2(int A[], int l, int r)
{
int n = r - l + 1;
if (n == 2 && A[l] > A[r])
{
int temp = A[l];
A[l] = A[r];
A[r] = temp;
}
else if (n > 2)
{
int m = floor((2.0 * n) / 3.0);
algo2(A, l, l + m - 1);
algo2(A, r - m + 1, r);
algo2(A, l, l + m - 1);
}
}
int main()
{
int A[] = {5, 3, 8, 1, 4, 7, 2, 6};
int n = sizeof(A) / sizeof(A[0]);
printf("Original array:\n");
printarray(A, n);
start = clock();
algo2(B, 0, n - 1);
end = clock();
double time_taken_algo2 = ((double)(end - start)) / CLOCKS_PER_SEC;
return 0;
}
Output:
Time complexity :
O(n^log₃/₂(3)) = O(n^2.71)
Q 16 Implement MCM algorithm for the given n matrix <M1xM2… Mn>
where the size of the matrix is Mi=di-1 x di.
Algorithm :
Initialize DP Table:
● Create dp[n][n], where dp[i][j] stores the minimum multiplication cost for matrices
Ai to Aj.
● Set dp[i][i] = 0 (single matrices require no multiplication).
Final Result:
int main() {
srand(time(0));
int n = d;
printf("number of multiplications by dp : %d\n", matrixChainMult(dims, n));
printf("Naive multiplications: %d\n", matrixMult(dims, n));
return 0;
}
output:
Time Complexity: O(n³)
Space Complexity: O(n²)