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 Sorted Circularly Singly Linked List
Quick Guide to the Java StringTokenizer
Java Program to Implement Circular Singly Linked List
Java Program to Implement Threaded Binary Tree
Hướng dẫn Java Design Pattern – Singleton
A Guide to HashSet in Java
Spring Data JPA Delete and Relationships
Java Program to Implement Sieve Of Eratosthenes
Spring Boot - Admin Client
Disable DNS caching
Introduction to Using Thymeleaf in Spring
Java Program to Implement Cartesian Tree
How to Count Duplicate Elements in Arraylist
Spring MVC and the @ModelAttribute Annotation
Java Program to Compute the Area of a Triangle Using Determinants
Introduction to Apache Commons Text
Java Byte Array to InputStream
Java Program to Represent Linear Equations in Matrix Form
Removing all Nulls from a List in Java
Intro to Inversion of Control and Dependency Injection with Spring
Java Program to Find the Peak Element of an Array O(n) time (Naive Method)
Fixing 401s with CORS Preflights and Spring Security
Java Program to Implement EnumMap API
LinkedHashSet trong Java hoạt động như thế nào?
Spring Boot - File Handling
Java 8 Stream API Analogies in Kotlin
Receive email by java client
Wiring in Spring: @Autowired, @Resource and @Inject
A Guide to TreeMap in Java
Primitive Type Streams in Java 8
Arrays.asList vs new ArrayList(Arrays.asList())
Guide to Java 8 groupingBy Collector