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:
Tạo ứng dụng Java RESTful Client không sử dụng 3rd party libraries
TreeSet và sử dụng Comparable, Comparator trong java
An Intro to Spring Cloud Vault
Java Program to Implement Floyd-Warshall Algorithm
How To Serialize and Deserialize Enums with Jackson
An Example of Load Balancing with Zuul and Eureka
Java – Get Random Item/Element From a List
Java Program to Implement Knapsack Algorithm
Spring Data JPA and Null Parameters
Java Program to Implement Pollard Rho Algorithm
List Interface trong Java
Java Program to Implement DelayQueue API
Một số từ khóa trong Java
Spring MVC Async vs Spring WebFlux
Java Program to Find the Minimum Element of a Rotated Sorted Array using Binary Search approach
Java Program to find the maximum subarray sum using Binary Search approach
Assertions in JUnit 4 and JUnit 5
How to Get a Name of a Method Being Executed?
OAuth 2.0 Resource Server With Spring Security 5
Spring RestTemplate Error Handling
New Features in Java 13
Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions
Using Optional with Jackson
Java Program to Perform Postorder Recursive Traversal of a Given Binary Tree
The Spring @Controller and @RestController Annotations
Injecting Prototype Beans into a Singleton Instance in Spring
Tính đa hình (Polymorphism) trong Java
Java Program to Implement Variable length array
Simplify the DAO with Spring and Java Generics
Send email with SMTPS (eg. Google GMail)
Apache Commons Collections SetUtils
Receive email by java client