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:
Using a List of Values in a JdbcTemplate IN Clause
Map Interface trong java
Java Program to Implement Find all Forward Edges in a Graph
Java String to InputStream
Jackson JSON Views
Different Ways to Capture Java Heap Dumps
Java Perform to a 2D FFT Inplace Given a Complex 2D Array
HttpClient 4 Cookbook
The Java 8 Stream API Tutorial
Java Program to Implement PriorityQueue API
Java Program to Implement Unrolled Linked List
Implementing a Binary Tree in Java
Convert Time to Milliseconds in Java
Một số nguyên tắc, định luật trong lập trình
Java Program to Check Whether a Directed Graph Contains a Eulerian Cycle
HashSet trong Java hoạt động như thế nào?
Một số ký tự đặc biệt trong Java
Java Program to Solve a Matching Problem for a Given Specific Case
Java Program to Perform Stooge Sort
Converting between an Array and a List in Java
Java Program to Implement Adjacency List
Java Program to Generate a Sequence of N Characters for a Given Specific Case
Java Program to Implement ConcurrentSkipListMap API
Tạo ứng dụng Java RESTful Client không sử dụng 3rd party libraries
Java Program to Perform Preorder Recursive Traversal of a Given Binary Tree
Introduction to Java Serialization
Các nguyên lý thiết kế hướng đối tượng – SOLID
Java Program to Implement IdentityHashMap API
Java String Conversions
Setting the Java Version in Maven
Error Handling for REST with Spring
Ép kiểu trong Java (Type casting)