neshina_anastasiia_lab_1 is ready

This commit is contained in:
korbwest 2025-02-25 21:31:58 +04:00
parent 0b8a697864
commit d068814cca

View File

@ -1,6 +1,6 @@
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
import java.util.concurrent.*; // <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> import java.util.concurrent.*;
public class Main { public class Main {
@ -40,7 +40,7 @@ public class Main {
return matrix; return matrix;
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public static void singleThreadedSort(int[][] matrix) { public static void singleThreadedSort(int[][] matrix) {
int cols = matrix[0].length; int cols = matrix[0].length;
int rows = matrix.length; int rows = matrix.length;
@ -48,48 +48,45 @@ public class Main {
int[] columnSums = new int[cols]; int[] columnSums = new int[cols];
for (int j = 0; j < cols; j++) { for (int j = 0; j < cols; j++) {
for (int i = 0; i < rows; i++) { for (int i = 0; i < rows; i++) {
columnSums[j] += matrix[i][j]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> j columnSums[j] += matrix[i][j];
} }
} }
sortColumns(matrix, columnSums); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sortColumns(matrix, columnSums);
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public static void multiThreadedSortWithThreadPool(int[][] matrix, int numThreads) throws InterruptedException { public static void multiThreadedSortWithThreadPool(int[][] matrix, int numThreads) throws InterruptedException {
int cols = matrix[0].length; int cols = matrix[0].length;
int rows = matrix.length; int rows = matrix.length;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ExecutorService executor = Executors.newFixedThreadPool(numThreads); ExecutorService executor = Executors.newFixedThreadPool(numThreads);
int[] columnSums = new int[cols]; int[] columnSums = new int[cols];
for (int j = 0; j < cols; j++) { for (int j = 0; j < cols; j++) {
final int col = j; final int col = j;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
executor.submit(() -> { executor.submit(() -> {
for (int i = 0; i < rows; i++) { for (int i = 0; i < rows; i++) {
columnSums[col] += matrix[i][col]; columnSums[col] += matrix[i][col];
} }
}); });
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
executor.shutdown(); executor.shutdown();
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
executor.awaitTermination(1, TimeUnit.MINUTES); executor.awaitTermination(1, TimeUnit.MINUTES);
sortColumns(matrix, columnSums); sortColumns(matrix, columnSums);
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public static void multiThreadedSortWithForkJoin(int[][] matrix) { public static void multiThreadedSortWithForkJoin(int[][] matrix) {
int cols = matrix[0].length; int cols = matrix[0].length;
int rows = matrix.length; int rows = matrix.length;
int[] columnSums = new int[cols]; int[] columnSums = new int[cols];
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ForkJoinPool pool = new ForkJoinPool(); ForkJoinPool pool = new ForkJoinPool();
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ޣ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pool.invoke(new ColumnSumTask(matrix, columnSums, 0, cols - 1)); pool.invoke(new ColumnSumTask(matrix, columnSums, 0, cols - 1));
sortColumns(matrix, columnSums); sortColumns(matrix, columnSums);
@ -120,7 +117,6 @@ public class Main {
int mid = (start + end) / 2; int mid = (start + end) / 2;
ColumnSumTask leftTask = new ColumnSumTask(matrix, columnSums, start, mid); ColumnSumTask leftTask = new ColumnSumTask(matrix, columnSums, start, mid);
ColumnSumTask rightTask = new ColumnSumTask(matrix, columnSums, mid + 1, end); ColumnSumTask rightTask = new ColumnSumTask(matrix, columnSums, mid + 1, end);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
invokeAll(leftTask, rightTask); invokeAll(leftTask, rightTask);
} }
} }
@ -135,7 +131,6 @@ public class Main {
columnIndices[j] = j; columnIndices[j] = j;
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> columnSums
Arrays.sort(columnIndices, Comparator.comparingInt(j -> columnSums[j])); Arrays.sort(columnIndices, Comparator.comparingInt(j -> columnSums[j]));
int[][] sortedMatrix = new int[rows][cols]; int[][] sortedMatrix = new int[rows][cols];
@ -157,7 +152,6 @@ public class Main {
System.out.print("Input columns: "); System.out.print("Input columns: ");
int cols = scanner.nextInt(); int cols = scanner.nextInt();
int[][] matrix = generateMatrix(rows, cols); int[][] matrix = generateMatrix(rows, cols);
writeMatrixToFile(matrix, "input_matrix.txt"); writeMatrixToFile(matrix, "input_matrix.txt");
@ -177,7 +171,6 @@ public class Main {
System.out.println("ThreadPoolExecutor: " + (endTime - startTime) + " mc"); System.out.println("ThreadPoolExecutor: " + (endTime - startTime) + " mc");
writeMatrixToFile(matrix2, "output_thread_pool.txt"); writeMatrixToFile(matrix2, "output_thread_pool.txt");
startTime = System.currentTimeMillis(); startTime = System.currentTimeMillis();
multiThreadedSortWithForkJoin(matrix3); multiThreadedSortWithForkJoin(matrix3);
endTime = System.currentTimeMillis(); endTime = System.currentTimeMillis();