This is a Java Program to Implement Brent Cycle Algorithm. Cycle detection is the algorithmic problem of finding a cycle in a sequence of iterated function values. Brent Cycle Algorithm is an alternative cycle detection algorithm that, like the tortoise and hare algorithm, requires only two pointers into the sequence.
Here is the source code of the Java Program to Implement Brent Cycle Algorithm . The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
** Java Program to Implement Brent Cycle Algorithm
**/
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
/** Class BrentCycle **/
public class BrentCycle
{
private List<Integer> func;
private int lam, mu;
/** Constructor **/
public BrentCycle(List<Integer> list, int x0)
{
func = list;
/** print sequence **/
printSequence(x0);
/** find cycle **/
findCycle(x0);
/** display results **/
display();
}
/** function to find cycle **/
private void findCycle(int x0)
{
int power, lam;
power = lam = 1;
int tortoise = x0;
int hare = f(x0);
while (tortoise != hare)
{
if (power == lam)
{
tortoise = hare;
power *= 2;
lam = 0;
}
hare = f(hare);
lam += 1;
}
mu = 0;
tortoise = hare = x0;
for (int i = 0; i < lam; i++)
{
hare = f(hare);
}
while (tortoise != hare)
{
tortoise = f(tortoise);
hare = f(hare);
mu += 1;
}
this.lam = lam;
this.mu = mu;
}
/** function to return value of function f(x) **/
private int f(int p)
{
return func.get(p);
}
/** function to print first n sequence **/
public void printSequence(int x0)
{
int n = func.size();
int tempx = x0;
System.out.print("\nFirst "+ n +" elements in sequence : \n"+ tempx);
for (int i = 0; i < n; i++)
{
tempx = f(tempx);
System.out.print(" "+ tempx);
}
System.out.println();
}
/** function to display results **/
public void display()
{
System.out.println("\nLength of cycle : "+ lam);
System.out.println("Position : "+ (mu + 1));
}
/** Main function **/
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Brent Cycle Algorithm Test\n");
System.out.println("Enter size of list");
int n = scan.nextInt();
List<Integer> list = new ArrayList<Integer>();
System.out.println("\nEnter f(x)");
for (int i = 0; i < n; i++)
list.add(scan.nextInt());
System.out.println("\nEnter x0");
int x0 = scan.nextInt();
BrentCycle bc = new BrentCycle(list, x0);
}
}
Brent Cycle Algorithm Test Enter size of list 9 Enter f(x) 6 6 0 1 4 3 3 4 2 Enter x0 8 First 9 elements in sequence : 8 2 0 6 3 1 6 3 1 6 Length of cycle : 3 Position : 4
Related posts:
Send an email using the SMTP protocol
The DAO with JPA and Spring
Java Program to Implement Fenwick Tree
Spring Boot - Sending Email
Converting Strings to Enums in Java
ETags for REST with Spring
ExecutorService – Waiting for Threads to Finish
Java Program to Find All Pairs Shortest Path
Java Program to Solve TSP Using Minimum Spanning Trees
Java Program to Implement Queue using Linked List
Java Program to Implement Binomial Tree
Debug a JavaMail Program
Java Program to Implement Floyd Cycle Algorithm
A Guide to Java SynchronousQueue
Spring Boot - Google Cloud Platform
Introduction to Java Serialization
Java Program to Implement AVL Tree
Java Program to Generate Random Numbers Using Multiply with Carry Method
Java Program to Check if it is a Sparse Matrix
A Guide to Spring Cloud Netflix – Hystrix
Sử dụng CountDownLatch trong Java
Java Program to Implement Sorted Vector
Comparing Objects in Java
The Modulo Operator in Java
Assertions in JUnit 4 and JUnit 5
Java Program to Implement Fermat Primality Test Algorithm
Spring Security Authentication Provider
Join and Split Arrays and Collections in Java
Java Program to Implement Coppersmith Freivald’s Algorithm
Object Type Casting in Java
Jackson Annotation Examples
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)