Java Program to Implement Brent Cycle Algorithm

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:

Spring REST API + OAuth2 + Angular
The SpringJUnitConfig and SpringJUnitWebConfig Annotations in Spring 5
Spring’s RequestBody and ResponseBody Annotations
Java Program to Implement Shoelace Algorithm
Java Program to Test Using DFS Whether a Directed Graph is Weakly Connected or Not
Java Program to Implement Disjoint Sets
Java Program to Use Above Below Primitive to Test Whether Two Lines Intersect
Java Program to Solve Set Cover Problem assuming at max 2 Elements in a Subset
Java Collections Interview Questions
Hướng dẫn Java Design Pattern – Dependency Injection
Create a Custom Exception in Java
New Features in Java 12
ExecutorService – Waiting for Threads to Finish
Object Type Casting in Java
Java Program to Find Nearest Neighbor for Dynamic Data Set
Circular Dependencies in Spring
Spring Boot - Sending Email
Default Password Encoder in Spring Security 5
Explain about URL and HTTPS protocol
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree
A Guide to BitSet in Java
The Order of Tests in JUnit
A Guide to HashSet in Java
Java Concurrency Interview Questions and Answers
Spring Security – security none, filters none, access permitAll
Java Program to Implement Ternary Search Algorithm
Java Program to Implement the String Search Algorithm for Short Text Sizes
Java Program to Perform the Sorting Using Counting Sort
Guava – Join and Split Collections
@Lookup Annotation in Spring
Java Program to Implement First Fit Decreasing for 1-D Objects and M Bins
Guide to the Java TransferQueue