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:
Spring Cloud AWS – EC2
Constructor Injection in Spring with Lombok
Java Program to Print only Odd Numbered Levels of a Tree
Use Liquibase to Safely Evolve Your Database Schema
REST Web service: Basic Authentication trong Jersey 2.x
A Guide to Queries in Spring Data MongoDB
Tiêu chuẩn coding trong Java (Coding Standards)
Guide to @JsonFormat in Jackson
Comparing Dates in Java
Java Program to Implement HashTable API
Intro to the Jackson ObjectMapper
Java Program to Implement Fermat Factorization Algorithm
Introduction to Liquibase Rollback
A Guide To UDP In Java
Java Program to Find the GCD and LCM of two Numbers
Immutable Objects in Java
Spring WebClient and OAuth2 Support
Guide to Java OutputStream
Spring Security 5 for Reactive Applications
Java Program to Implement Trie
Java – InputStream to Reader
Write/Read cookies using HTTP and Read a file from the internet
Spring Boot - Quick Start
Java Program to Implement RoleList API
Java Program to Find the Minimum value of Binary Search Tree
Java 9 Stream API Improvements
A Guide to the finalize Method in Java
Functional Interface trong Java 8
Java Collections Interview Questions
Spring Data MongoDB – Indexes, Annotations and Converters
Validate email address exists or not by Java Code
Refactoring Design Pattern với tính năng mới trong Java 8