Döngü tespit edildi!
Floyd'un Döngü Bulma Algoritması, bağlı listelerdeki döngüleri tespit etmek için kullanılan verimli bir algoritmadır. 'Kaplumbağa ve Tavşan' algoritması olarak da bilinir. Biri yavaş (kaplumbağa), diğeri hızlı (tavşan) hareket eden iki işaretçi kullanarak, döngü varsa bu iki işaretçinin mutlaka bir noktada buluşacağı prensibine dayanır.
Floyd's Cycle Finding Algoritması (Tortoise and Hare) algoritmasının farklı programlama dillerindeki uygulamaları aşağıda verilmiştir. Her örnek, algoritmanın temel akışını açık şekilde gösterecek biçimde sunulmuştur.
1function floydCycleFinding(arr: T[]): { cycleExists: boolean; cycleStart?: number; cycleLength?: number } { 2 if (arr.length === 0) {3 return { cycleExists: false };4 }56 let tortoise = 0;7 let hare = 0;8 9 do {10 tortoise = getNextIndex(arr, tortoise);11 hare = getNextIndex(arr, getNextIndex(arr, hare));12 13 if (tortoise === -1 || hare === -1) {14 return { cycleExists: false };15 }16 } while (tortoise !== hare);17 18 tortoise = 0;19 while (tortoise !== hare) {20 tortoise = getNextIndex(arr, tortoise);21 hare = getNextIndex(arr, hare);22 }23 24 let cycleLength = 1;25 hare = getNextIndex(arr, tortoise);26 while (tortoise !== hare) {27 hare = getNextIndex(arr, hare);28 cycleLength++;29 }30 31 return {32 cycleExists: true,33 cycleStart: tortoise,34 cycleLength: cycleLength35 };36}Aşağıya kendi verilerinizi girerek algoritmanın örnek çalışma akışını görebilirsiniz. Virgülle ayrılmış sayılar veya metin değerleri kullanabilirsiniz.
Girilen veri, algoritmanın pseudo kodundaki genel akışa göre örnek bir sonuca dönüştürülür.
En İyi Durum: O(n)
Ortalama Durum: O(n)
En Kötü Durum: O(n)
O(1) - Giriş boyutu ne olursa olsun, algoritma her zaman aynı sürede çalışır.
Floyd's Cycle Finding Algoritması (Tortoise and Hare) ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar:
Bu kullanım alanı, algoritmanın benzer problem aileleriyle birlikte incelenmesi için iyi bir başlangıç noktasıdır.
Bu kullanım alanı, algoritmanın benzer problem aileleriyle birlikte incelenmesi için iyi bir başlangıç noktasıdır.
Bu kullanım alanı, algoritmanın benzer problem aileleriyle birlikte incelenmesi için iyi bir başlangıç noktasıdır.