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 Implement Euclid GCD Algorithm
Finding Max/Min of a List or Collection
Java Program to implement Priority Queue
Java Program to implement Associate Array
Java Program to Implement Find all Forward Edges in a Graph
Introduction to Apache Commons Text
Fixing 401s with CORS Preflights and Spring Security
How To Serialize and Deserialize Enums with Jackson
Java Program to Implement Network Flow Problem
Java Program to Check Whether an Undirected Graph Contains a Eulerian Cycle
A Guide to Queries in Spring Data MongoDB
Jackson Exceptions – Problems and Solutions
Hashtable trong java
Java Program to Compare Binary and Sequential Search
Exploring the Spring Boot TestRestTemplate
Java Program to Implement Nth Root Algorithm
Java – Create a File
The SpringJUnitConfig and SpringJUnitWebConfig Annotations in Spring 5
Spring Cloud – Adding Angular
Java Program to Implement Hash Tables Chaining with Doubly Linked Lists
Immutable ArrayList in Java
Validations for Enum Types
File Upload with Spring MVC
Apache Tiles Integration with Spring MVC
Java Program to Implement Knapsack Algorithm
Java CyclicBarrier vs CountDownLatch
Java Program to Generate N Number of Passwords of Length M Each
Spring Data Reactive Repositories with MongoDB
Send email with SMTPS (eg. Google GMail)
Reactive Flow with MongoDB, Kotlin, and Spring WebFlux
Spring Cloud – Securing Services
HttpClient with SSL