From c9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:08:27 +0200 Subject: add: graphs et rushs --- .../epita/assistants/forkjoin/MyRecursiveTask.java | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 graphs/java/threadForkJoin/src/main/java/fr/epita/assistants/forkjoin/MyRecursiveTask.java (limited to 'graphs/java/threadForkJoin/src/main') diff --git a/graphs/java/threadForkJoin/src/main/java/fr/epita/assistants/forkjoin/MyRecursiveTask.java b/graphs/java/threadForkJoin/src/main/java/fr/epita/assistants/forkjoin/MyRecursiveTask.java new file mode 100644 index 0000000..5934f92 --- /dev/null +++ b/graphs/java/threadForkJoin/src/main/java/fr/epita/assistants/forkjoin/MyRecursiveTask.java @@ -0,0 +1,49 @@ +package fr.epita.assistants.forkjoin; + +import java.util.concurrent.ForkJoinTask; +import java.util.concurrent.RecursiveTask; + +public class MyRecursiveTask extends RecursiveTask { + final private double[][] matrix; + final private int xLowerBound; + final private int xUpperBound; + final private int yLowerBound; + final private int yUpperBound; + + public MyRecursiveTask(double[][] matrix, int xLowerBound, int xUpperBound, int yLowerBound, int yUpperBound) { + this.matrix = matrix; + this.xLowerBound = xLowerBound; + this.xUpperBound = xUpperBound; + this.yLowerBound = yLowerBound; + this.yUpperBound = yUpperBound; + } + + @Override + protected Double compute() { + if (xUpperBound - xLowerBound <= 5 && yUpperBound - yLowerBound <= 5) { + Double avg = 0.0; + for (int j = yLowerBound; j < yUpperBound; j++) { + for (int i = xLowerBound; i < xUpperBound; i++) { + avg += matrix[j][i]; + } + } + if ((xUpperBound - xLowerBound) * (yUpperBound - yLowerBound) == 0) + return 0.0; + return avg / ((xUpperBound - xLowerBound) * (yUpperBound - yLowerBound)); + } else { + MyRecursiveTask t1 = new MyRecursiveTask(matrix, xLowerBound, xLowerBound + (xUpperBound - xLowerBound) / 2, + yLowerBound, yLowerBound + (yUpperBound - yLowerBound) / 2); + MyRecursiveTask t2 = new MyRecursiveTask(matrix, xLowerBound + (xUpperBound - xLowerBound) / 2, xUpperBound, + yLowerBound, yLowerBound + (yUpperBound - yLowerBound) / 2); + MyRecursiveTask t3 = new MyRecursiveTask(matrix, xLowerBound, xLowerBound + (xUpperBound - xLowerBound) / 2, + yLowerBound + (yUpperBound - yLowerBound) / 2, yUpperBound); + MyRecursiveTask t4 = new MyRecursiveTask(matrix, xLowerBound + (xUpperBound - xLowerBound) / 2, xUpperBound, + yLowerBound + (yUpperBound - yLowerBound) / 2, yUpperBound); + t1.fork(); + t2.fork(); + t3.fork(); + t4.fork(); + return (t1.join() + t2.join() + t3.join() + t4.join()) / 4; + } + } +} \ No newline at end of file -- cgit v1.2.3