Push changes for Angel
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package edu.slcc.asdv.caleb.maxtask;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import java.util.concurrent.RecursiveTask;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author caleb
|
||||
*/
|
||||
public class Factorial extends RecursiveTask<Integer>
|
||||
{
|
||||
final int n;
|
||||
|
||||
Factorial(int n)
|
||||
{
|
||||
this.n = n;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer compute()
|
||||
{
|
||||
if (n == 1 || n <= 1)
|
||||
{
|
||||
return n;
|
||||
}
|
||||
Factorial fact = new Factorial(n - 1);
|
||||
fact.fork();
|
||||
|
||||
return n * fact.join();
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
RecursiveTask<Integer> task = new Factorial(4);
|
||||
ForkJoinPool pool = new ForkJoinPool();
|
||||
int fact = pool.invoke(task);
|
||||
System.out.println(fact);
|
||||
}
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package edu.slcc.asdv.caleb.maxtask;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author caleb
|
||||
*/
|
||||
import java.math.BigInteger;
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import java.util.concurrent.RecursiveTask;
|
||||
|
||||
public class FactorialBig extends RecursiveTask<BigInteger>
|
||||
{
|
||||
final int THRESHOLD = 50;
|
||||
public static void main(String[] args)
|
||||
{
|
||||
RecursiveTask<BigInteger> task = new FactorialBig( new BigInteger( "1060"));
|
||||
ForkJoinPool pool = new ForkJoinPool();
|
||||
BigInteger fact = pool.invoke(task);
|
||||
System.out.println(fact);
|
||||
}
|
||||
final BigInteger n;
|
||||
|
||||
FactorialBig(BigInteger n)
|
||||
{
|
||||
this.n = n;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BigInteger compute()
|
||||
{
|
||||
if (this.n.compareTo(new BigInteger(String.valueOf(THRESHOLD))) < 0)
|
||||
{
|
||||
if (n == BigInteger.ONE || n == BigInteger.ZERO)
|
||||
return BigInteger.ONE;
|
||||
long fact = 1;
|
||||
//compare factorial with loop
|
||||
for (int i = 2; i < THRESHOLD; ++i)
|
||||
{
|
||||
fact *= i;
|
||||
}
|
||||
return new BigInteger(String.valueOf(fact));
|
||||
}
|
||||
else {
|
||||
//compute factorial in parallel
|
||||
FactorialBig factBig = new FactorialBig(n.subtract(BigInteger.ONE));
|
||||
factBig.fork();
|
||||
|
||||
return n.multiply(factBig.join());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package edu.slcc.asdv.caleb.maxtask;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author caleb
|
||||
*/
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import java.util.concurrent.RecursiveTask;
|
||||
|
||||
public class Fibonacci extends RecursiveTask<Integer>
|
||||
{
|
||||
|
||||
final int n;
|
||||
|
||||
Fibonacci(int n)
|
||||
{
|
||||
this.n = n;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer compute()
|
||||
{
|
||||
if (n <= 1)
|
||||
{
|
||||
return n;
|
||||
}
|
||||
Fibonacci f1 = new Fibonacci(n - 1);
|
||||
f1.fork();
|
||||
Fibonacci f2 = new Fibonacci(n - 2);
|
||||
return f2.compute() + f1.join();
|
||||
}
|
||||
public static void main(String[] args)
|
||||
{
|
||||
RecursiveTask<Integer> task = new Fibonacci(8);
|
||||
ForkJoinPool pool = new ForkJoinPool();
|
||||
int fib = pool.invoke(task);
|
||||
System.out.println(fib);
|
||||
}
|
||||
}
|
||||
|
||||
class Test
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
@@ -14,7 +14,7 @@ public class ParallelMax
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Create a list
|
||||
final int N = 20;
|
||||
final int N = 999999999;
|
||||
int[] list = new int[N];
|
||||
for (int i = 0; i < list.length; i++)
|
||||
list[i] = i;
|
||||
@@ -75,21 +75,21 @@ public class ParallelMax
|
||||
for (int i = low; i < high; i++)
|
||||
if (list[i] > max)
|
||||
max = list[i];
|
||||
return new Integer(max);
|
||||
return max;
|
||||
}
|
||||
else
|
||||
{
|
||||
int mid = (low + high) / 2;
|
||||
RecursiveTask<Integer> left = new MaxTask(list, low, mid);
|
||||
System.out.println("left: " + low +", " + high);
|
||||
//System.out.println("left: " + low +", " + high);
|
||||
RecursiveTask<Integer> right = new MaxTask(list, mid+1, high);
|
||||
System.out.println("right: " + (mid + 1) +", " + high);
|
||||
System.out.println("fork right");
|
||||
//System.out.println("right: " + (mid + 1) +", " + high);
|
||||
//System.out.println("fork right");
|
||||
right.fork();
|
||||
System.out.println("fork left");
|
||||
//System.out.println("fork left");
|
||||
left.fork();
|
||||
return new Integer(Math.max( left.join().intValue(),
|
||||
right.join().intValue())
|
||||
return Math.max( left.join().intValue(),
|
||||
right.join().intValue()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user