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:
Flattening Nested Collections in Java
Converting between an Array and a List in Java
Add Multiple Items to an Java ArrayList
Lớp Arrarys trong Java (Arrays Utility Class)
Spring Data JPA @Query
Tránh lỗi ConcurrentModificationException trong Java như thế nào?
Giới thiệu Google Guice – Binding
New Features in Java 10
Java Program to Find MST (Minimum Spanning Tree) using Prim’s Algorithm
Spring Cloud Series – The Gateway Pattern
Spring Cloud AWS – Messaging Support
Custom Cascading in Spring Data MongoDB
Spring Boot - Thymeleaf
Java Program to Implement Shoelace Algorithm
Java Program to Implement Naor-Reingold Pseudo Random Function
Java Program to Implement Self Balancing Binary Search Tree
Java Program to Implement Doubly Linked List
Java Copy Constructor
Daemon Threads in Java
Vector trong Java
Java Program to Implement Queue using Two Stacks
Spring REST API + OAuth2 + Angular
JWT – Token-based Authentication trong Jersey 2.x
Java 8 Stream findFirst() vs. findAny()
Exception Handling in Java
Introduction to Spring Data REST
Java Program to Use Dynamic Programming to Solve Approximate String Matching
Ép kiểu trong Java (Type casting)
Arrays.asList vs new ArrayList(Arrays.asList())
OAuth2 Remember Me with Refresh Token
Java Program to Implement Double Order Traversal of a Binary Tree
Java Program to Perform the Shaker Sort
 
