Java Program to Implement Floyd Cycle Algorithm

This is a Java Program to Implement Floyd Cycle Algorithm. Cycle detection is the algorithmic problem of finding a cycle in a sequence of iterated function values. Floyd’s cycle-finding algorithm, also called the “tortoise and the hare” algorithm, is a pointer algorithm that uses only two pointers, which move through the sequence at different speeds.

Here is the source code of the Java Program to Implement Floyd 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 Floyd Cycle Algorithm 
 **/
 
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
 
/** Class FloydCycle **/
public class FloydCycle
{
    private List<Integer> func;
    private int lam, mu; 
    /** Constructor **/
    public FloydCycle(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 tortoise = f(x0);    
        int hare = f(f(x0));    
        while (tortoise != hare)
        {
            tortoise = f(tortoise);
            hare = f(f(hare));
        }
        int mu = 0;
        tortoise = x0;
        while (tortoise != hare)
        {
            tortoise = f(tortoise);
            hare = f(hare);
            mu += 1;
        }
        int lam = 1;
        hare = f(tortoise);
        while (tortoise != hare)
        {
            hare = f(hare);
            lam += 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("Floyd 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();
        FloydCycle fc = new FloydCycle(list, x0);
    }
}
Floyd Cycle Algorithm Test
 
Enter size of list
9
 
Enter f(x)
6 6 0 1 4 3 3 4 0
 
Enter x0
2
 
First 9 elements in sequence :
2 0 6 3 1 6 3 1 6 3
 
Length of cycle : 3
Position : 3

Related posts:

Java Program to Encode a Message Using Playfair Cipher
Java Program to Test Using DFS Whether a Directed Graph is Weakly Connected or Not
Configuring a DataSource Programmatically in Spring Boot
Hướng dẫn Java Design Pattern – Adapter
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
A Guide to Java HashMap
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
Java Program to Implement Queue using Two Stacks
Filtering a Stream of Optionals in Java
Intro to the Jackson ObjectMapper
Tìm hiểu về xác thực và phân quyền trong ứng dụng
Spring Boot - Runners
Java Program to Perform Insertion in a 2 Dimension K-D Tree
Java Program to Implement Graham Scan Algorithm to Find the Convex Hull
Java Program to Check whether Undirected Graph is Connected using BFS
Quản lý bộ nhớ trong Java với Heap Space vs Stack
Java Program to Implement the Monoalphabetic Cypher
Function trong Java 8
Custom HTTP Header with the HttpClient
Xử lý ngoại lệ đối với trường hợp ghi đè phương thức trong java
Spring Boot Configuration with Jasypt
Jackson – Change Name of Field
Java Program to Implement Hash Tables with Double Hashing
Java Program to Implement Binary Heap
OAuth2 Remember Me with Refresh Token
Guide to BufferedReader
@Order in Spring
Working with Tree Model Nodes in Jackson
Converting Between a List and a Set in Java
Lập trình mạng với java
Creating a Web Application with Spring 5
SOAP Web service: Authentication trong JAX-WS