forked from sevastyan_b/SSPR_25
neshina_anastasiia_lab_1 is ready
This commit is contained in:
parent
0b8a697864
commit
d068814cca
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user