INDEX
INDEX
S. No Practical Signature
Practical-1
Aim: Write a Program to implement Merge sort
Code:
import java.util.Scanner;
public class MergeSort {
static void merge(int[] arr, int start, int mid, int end) {
int i = start;
int j = mid + 1;
int k = start;
int[] temp = new int[100];
while (i <= mid && j <= end) {
if (arr[i] < arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
while (i <= mid)
temp[k++] = arr[i++];
while (j <= end)
temp[k++] = arr[j++];
for (i = start; i <= end; i++)
arr[i] = temp[i];
}
static void mergeSort(int[] arr, int start, int end) {
if (start >= end)
return;
int mid = start + (end - start) / 2;
mergeSort(arr, start, mid);
mergeSort(arr, mid + 1, end);
merge(arr, start, mid, end);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the size of the array: ");
int n = scanner.nextInt();
int[] arr = new int[n];
System.out.print("Enter the elements of the array: ");
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
System.out.println("\nOriginal Array:");
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("\n");
mergeSort(arr, 0, n - 1);
System.out.println("Sorted Array:");
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("\n");
scanner.close();
}
}
Output:
Practical-2
Aim: Write a Program to implement Matrix Multiplication
using Divide and Conquer strategy
Code:
import java.util.Scanner;
public class MatrixMultiplication {
static int[][] createMatrix(int n) {
int[][] temp = new int[n][n];
return temp;
}
static int[][] divideAndConquer(int[][] A, int[][]
B, int n) {
if (n == 1) {
int[][] C = createMatrix(1);
C[0][0] = A[0][0] * B[0][0];
return C;
}
int[][] C = createMatrix(n);
int k = n / 2;
int[][] A11 = createMatrix(k);
int[][] A12 = createMatrix(k);
int[][] A21 = createMatrix(k);
int[][] A22 = createMatrix(k);
int[][] B11 = createMatrix(k);
int[][] B12 = createMatrix(k);
int[][] B21 = createMatrix(k);
int[][] B22 = createMatrix(k);
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++) {
A11[i][j] = A[i][j];
A12[i][j] = A[i][j + k];
A21[i][j] = A[i + k][j];
A22[i][j] = A[i + k][j + k];
B11[i][j] = B[i][j];
B12[i][j] = B[i][j + k];
B21[i][j] = B[i + k][j];
B22[i][j] = B[i + k][j + k];
}
}
int[][] P1 = divideAndConquer(A11, B11, k);
int[][] P2 = divideAndConquer(A12, B21, k);
int[][] P3 = divideAndConquer(A11, B12, k);
int[][] P4 = divideAndConquer(A12, B22, k);
int[][] P5 = divideAndConquer(A21, B11, k);
int[][] P6 = divideAndConquer(A22, B21, k);
int[][] P7 = divideAndConquer(A21, B12, k);
int[][] P8 = divideAndConquer(A22, B22, k);
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++) {
C[i][j] = P1[i][j] + P2[i][j];
C[i][j + k] = P3[i][j] + P4[i][j];
C[i + k][j] = P5[i][j] + P6[i][j];
C[i + k][j + k] = P7[i][j] + P8[i][j];
}
}
return C;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the size of matrix (in
powers of 2): ");
int size = scanner.nextInt();
int[][] A = createMatrix(size);
int[][] B = createMatrix(size);
int[][] C;
System.out.println("Enter the elements of
matrix A:");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
A[i][j] = scanner.nextInt();
}
}
System.out.println("Enter the elements of
matrix B:");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
B[i][j] = scanner.nextInt();
}
}
C = divideAndConquer(A, B, size);
System.out.println("The product of matrix A
and B is:");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.print(C[i][j] + " ");
}
System.out.println();
}
scanner.close();
}
}
Output:
Practical-3
Aim: Write a Program to implement Knapsack Problem
using Greedy Strategy
Code:
import java.util.Arrays;
import java.util.Scanner;
class Item {
int value;
int weight;
Item() {}
Item(int value, int weight) {
this.value = value;
this.weight = weight;
}
Output:
Practical-8
Output:
Practical-9