Important Methods in Data Structure Algorithm
Samarpan Chakraborty
Student at NSEC | Python Developer | Software Engineering 2nd Year Pursuing BCA| Want to Learn MCA & Mtech |Cricketer | Footballer | Pianist
1. Main Function:
The main() function serves as the entry point for the program.
Key Features:
2. Brute Force Implementation:
int maxSubArrayBruteForce(int arr[], int n)
Logic:
Complexity:
3. Divide and Conquer Implementation:
int maxSubArrayDivideAndConquer(int arr[], int left, int right)
Logic:
Helper Function:
int maxCrossingSum(int arr[], int left, int mid, int right)
Calculates the maximum subarray sum that crosses the midpoint by expanding leftward and rightward from mid.
Complexity:
4. Kadane's Algorithm Implementation:
int maxSubArrayKadane(int arr[], int n)
Logic:
Complexity:
5. Dynamic Programming Implementation:
int maxSubArrayDP(int arr[], int n)
Logic:
Complexity:
Key Notes:
#include <stdio.h>
#include <limits.h>
int maxSubArrayBruteForce(int arr[], int n);
int maxSubArrayDivideAndConquer(int arr[], int left, int right);
int maxCrossingSum(int arr[], int left, int mid, int right);
int maxSubArrayKadane(int arr[], int n);
int maxSubArrayDP(int arr[], int n);
int main() {
? ? int choice, n;
? ? printf("Choose the algorithm:\n");
? ? printf("1: Brute Force\n");
? ? printf("2: Divide and Conquer\n");
? ? printf("3: Kadane's Algorithm\n");
? ? printf("4: Dynamic Programming\n");
? ? scanf("%d", &choice);
? ? printf("Enter the array size: ");
? ? scanf("%d", &n);
? ? int arr[n];
? ? printf("Enter the array elements:\n");
? ? for (int i = 0; i < n; i++) {
? ? ? ? scanf("%d", &arr[i]);
? ? }
? ? int result = 0;
? ? switch (choice) {
? ? ? ? case 1:
? ? ? ? ? ? result = maxSubArrayBruteForce(arr, n);
? ? ? ? ? ? break;
? ? ? ? case 2:
? ? ? ? ? ? result = maxSubArrayDivideAndConquer(arr, 0, n - 1);
? ? ? ? ? ? break;
领英推荐
? ? ? ? case 3:
? ? ? ? ? ? result = maxSubArrayKadane(arr, n);
? ? ? ? ? ? break;
? ? ? ? case 4:
? ? ? ? ? ? result = maxSubArrayDP(arr, n);
? ? ? ? ? ? break;
? ? ? ? default:
? ? ? ? ? ? printf("Invalid choice!\n");
? ? ? ? ? ? return 1;
? ? }
? ? printf("Maximum Subarray Sum: %d\n", result);
? ? return 0;
}
// Brute Force Implementation
int maxSubArrayBruteForce(int arr[], int n) {
? ? int maxSum = INT_MIN;
? ? for (int i = 0; i < n; i++) {
? ? ? ? int currentSum = 0;
? ? ? ? for (int j = i; j < n; j++) {
? ? ? ? ? ? currentSum += arr[j];
? ? ? ? ? ? if (currentSum > maxSum) {
? ? ? ? ? ? ? ? maxSum = currentSum;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? return maxSum;
}
// Divide and Conquer Implementation
int maxSubArrayDivideAndConquer(int arr[], int left, int right) {
? ? if (left == right) {
? ? ? ? return arr[left];
? ? }
? ? int mid = (left + right) / 2;
? ? int leftSum = maxSubArrayDivideAndConquer(arr, left, mid);
? ? int rightSum = maxSubArrayDivideAndConquer(arr, mid + 1, right);
? ? int crossSum = maxCrossingSum(arr, left, mid, right);
? ? return (leftSum > rightSum) ? ((leftSum > crossSum) ? leftSum : crossSum) : ((rightSum > crossSum) ? rightSum : crossSum);
}
int maxCrossingSum(int arr[], int left, int mid, int right) {
? ? int leftMax = INT_MIN, rightMax = INT_MIN;
? ? int sum = 0;
? ? for (int i = mid; i >= left; i--) {
? ? ? ? sum += arr[i];
? ? ? ? if (sum > leftMax) {
? ? ? ? ? ? leftMax = sum;
? ? ? ? }
? ? }
? ? sum = 0;
? ? for (int i = mid + 1; i <= right; i++) {
? ? ? ? sum += arr[i];
? ? ? ? if (sum > rightMax) {
? ? ? ? ? ? rightMax = sum;
? ? ? ? }
? ? }
? ? return leftMax + rightMax;
}
// Kadane's Algorithm Implementation
int maxSubArrayKadane(int arr[], int n) {
? ? int maxSum = arr[0];
? ? int currentSum = arr[0];
? ? for (int i = 1; i < n; i++) {
? ? ? ? currentSum = (arr[i] > currentSum + arr[i]) ? arr[i] : currentSum + arr[i];
? ? ? ? maxSum = (maxSum > currentSum) ? maxSum : currentSum;
? ? }
? ? return maxSum;
}
// Dynamic Programming Implementation
int maxSubArrayDP(int arr[], int n) {
? ? int dp[n];
? ? dp[0] = arr[0];
? ? int maxSum = dp[0];
? ? for (int i = 1; i < n; i++) {
? ? ? ? dp[i] = (arr[i] > dp[i - 1] + arr[i]) ? arr[i] : dp[i - 1] + arr[i];
? ? ? ? if (dp[i] > maxSum) {
? ? ? ? ? ? maxSum = dp[i];
? ? ? ? }
? ? }
? ? return maxSum;
}