В інформатиці виявлення циклу — це алгоритмічна задача пошуку циклу в послідовності ітераційних значень функції.
Для будь-якої функції f, яка відображає скінченну множину S на саму себе, і будь-якого початкового значення x0 з S, послідовність ітераційних значень функції
зрештою буде двічі використовувати одне й те ж значення, тобто знайдеться пара різних індексів i та j таких, що xi = xj. Як тільки це трапиться, послідовність буде періодично продовжуватися, повторюючи ту саму послідовність значень від xi до xj − 1. Виявлення циклу — це задача пошуку i та j для заданих f та x0.
Відомо кілька алгоритмів швидкого знаходження циклів з незначним використанням пам'яті. Алгоритм черепахи та зайця Роберта У. Флойда переміщує два вказівника з різною швидкістю по послідовності значень, поки обидва не вкажуть на рівні значення. Алгоритм Брента базується на ідеї [en]. Алгоритми Флойда і Брента використовують сталий об'єм пам'яті, а кількість разів обчислення значеннь функції пропорційна відстані від початку послідовності до першого повторення. Кілька інших алгоритмів використовують більший об'єм пам'яті для меншої кількості обчислень значень функції.
Серед застосунків виявлення циклів є перевірка якості генераторів псевдовипадкових чисел та криптографічних хеш-функцій, алгоритмів обчислювальної теорії чисел, виявлення нескінченних циклів у комп'ютерних програмах та періодичних конфігурацій у клітинних автоматах, автоматизований [en] в таких структурах даних, як зв'язаний список, взаємне блокування при обробці транзакцій в СУБД.
Приклад
На малюнку показана функція f, яка відображає множину S={0,1,2,3,4,5,6,7,8} саму до себе. Якщо починати з x0 = 2 і послідовно знаходити f, отримаємо послідовність значень функції: 2, 0, 6, 3, 1, 6, 3, 1, 6, 3, 1, ...
Циклом у цій послідовності буде підпослідовність 6, 3, 1.
Визначення
Нехай S — будь-яка скінченна множина, f — будь-яка функція, що відображає S на саму себе, — будь-який елемент з S. Для будь-якого нехай . Нехай μ — найменший індекс, для якого значення xμ знову з'являється нескінченно часто в межах послідовності значень xi, а λ (довжина петлі) — це найменше натуральне число, що xμ = xλ + μ. Проблема виявлення циклу — це задача пошуку λ і μ.
Цю ж задачу розглянемо с точки зору теорії графів: побудуємо орієнтований граф (у якому кожна вершина має єдине вихідне ребро), якому відповідає граф функції нашої задачі, та вершинами якого є елементи множини S, а ребра якого відображають елемент на відповідне значення функції, як показано на малюнку. Набір вершин доступних від початкової вершини x0 утворюють підграф форми, що нагадує грецьку букву rho (ρ): шлях довжини μ від x0 до цикла, який складається з λ вершин.
Комп'ютерне представлення
Як правило, f не буде вказано таблицею значень, як це показано на малюнку вище. Швидше за все, алгоритму виявлення циклу може бути наданий доступ або до послідовності значень xi, або до підпрограми для обчислення f. Завдання полягає в тому, щоб знайти λ і μ, перевіряючи якомога менше значень з послідовності або виконуючи якомога менше викликів підпрограм. Як правило, також важлива просторова складність алгоритму для проблеми виявлення циклу: бажано вирішити цю проблему, використовуючи обсяг пам'яті, значно менший, ніж потрібно для збереження всієї послідовності.
У деяких додатках, і зокрема в ρ-алгоритм Полларда для факторізації цілих чисел, алгоритм має набагато обмежений доступ до S та f. Наприклад, в ρ-алгоритмі Полларда S — це набір цілих чисел за модулем невідомого простого множника числа, що підлягає факторизації, тому навіть розмір S невідомий алгоритму. Щоб дозволити алгоритмам виявлення циклу використовувати такі обмежені знання, вони можуть бути розроблені на основі наступних можливостей. Спочатку передбачається, що алгоритм має у своїй пам'яті об'єкт, що представляє вказівник на початкове значення x0. На будь-якому етапі він може виконати одну з трьох дій: він може скопіювати будь-який вказівник, який він має, на інший об'єкт у пам'яті, він може застосувати f і замінити будь-який з його покажчиків на вказівник на наступний об'єкт у послідовності, або він може застосувати підпрограма для визначення того, чи є два її покажчики рівними значеннями в послідовності. Дія тестування рівності може включати деякі нетривіальні обчислення: наприклад, в ρ-алгоритмі Полларда це реалізується шляхом перевірки того, чи має різниця між двома збереженими значеннями нетривіальний найбільший спільний дільник з числом, яке потрібно врахувати. У цьому контексті, за аналогією до моделі обчислень [en], алгоритм, який використовує лише копіювання покажчика, просування в межах послідовності та тести рівності, можна назвати алгоритмом покажчика.
Алгоритми
Якщо вхід подається як підпрограма для обчислення f, задачу виявлення циклу можна тривіально вирішити, використовуючи лише λ + μ, просто обчисливши послідовність значень xi та використовуючи структуру даних, таку як хеш-таблицю для їх зберігання значення та перевірити, чи кожне наступне значення вже збережено. Проте просторова складність цього алгоритму пропорційна λ + μ, надмірно велика. Крім того, для реалізації цього методу як [en] знадобиться застосувати тест рівності до кожної пари значень, що призведе до загального квадратичного часу. Таким чином, дослідження в цій галузі зосереджені на двох цілях: використати менше місця, ніж цей наївний алгоритм, і знайти алгоритми покажчиків, які використовують менше тестів рівності.
Черепаха і заєць Флойда
Алгоритм пошуку циклу Флойда — це алгоритм покажчиків, який використовує лише два покажчики, які рухаються по послідовності з різною швидкістю. Його також називають «алгоритмом черепахи та зайця», натякаючи на байку Езопа про «Черепаху та зайця».
Алгоритм названий на честь Роберта У. Флойда, якому його винахід приписував Дональд Кнут. Однак алгоритм не з'являється у опублікованій роботі Флойда, і це може бути хибним віднесенням: Флойд описує алгоритми перерахування всіх простих циклів в орієнтованому графі у роботі 1967 року але ця робота не описує проблему пошуку циклу у графах функцій, що є темою цієї статті. Насправді, твердження Кнута (1969 року), яке він приписує Флойду без цитування, є першим відомим згадуванням у друкованому вигляді, і, отже, він може належати до [en] і не належати окремій особі.
Ключове розуміння алгоритму наступне. Якщо існує цикл, то для будь-яких цілих чисел i ≥ μ і k ≥ 0, xi = xi + kλ, де λ — довжина петлі, яку потрібно знайти, а μ — індекс першого елемента циклу. Виходячи з цього, тоді можна показати, що i = kλ ≥ μ для деякого k тоді і тільки тоді, коли xi = x2i.
Таким чином, алгоритму потрібно лише перевірити наявність повторюваних значень цієї спеціальної форми, одна вдвічі далі від початку послідовності, ніж інша, щоб знайти період ν повторення, кратний λ. Як тільки ν буде знайдено, алгоритм відновлює послідовність від її початку, щоб знайти перше повторене значення xμ у послідовності, використовуючи той факт, що λ ділить ν і, отже, xμ = xμ + v. Нарешті, як тільки значення μ стало відомим, тривіально знайти довжину λ найкоротшого повторюваного циклу шляхом пошуку першого положення μ + λ для якого xμ + λ = xμ.
Таким чином, алгоритм утримує два вказівники у даній послідовності: один (черепаха) у точці xi, а інший (заєць) у точці x2i. На кожному кроці алгоритму він збільшується i на один, рухаючи черепаху на один крок вперед, а зайця на два кроки вперед у послідовності, а потім порівнює значення послідовності за цими двома вказівниками. Найменше значення i > 0 для якого черепаха та заєць вказують на рівні значення, є бажаним значенням ν.
Наступний код Python показує, як ця ідея може бути реалізована як алгоритм.
def floyd(f, x0): # Основна фаза алгоритму: пошук повторень x_i = x_2i. # Заєць рухається вдвічі швидше черепахи та # відстань між ними збільшується на 1 на кожному кроці. # Врешті -решт вони обидва опиняться всередині циклу, а потім, # в певний момент відстань між ними буде # ділиться на крапку λ. tortoise = f(x0) # f (x0) - елемент/вузол поруч із x0. hare = f (f (x0)) while tortoise != hare: tortoise = f(tortoise) hare = f(f(hare)) # На цьому місці розташування черепахи ν, що також дорівнює # на відстань між зайцем і черепахою ділиться на # період λ. Тож зайці рухаються по колу крок за кроком, # і черепаха (скинути на x0) рухаються до кола, буде # перетинаються на початку кола. Тому що # відстань між ними є постійною на 2ν, кратною λ, # вони погодяться, як тільки черепаха досягне індексу μ. # Знайдіть позицію μ першого повторення. mu = 0 tortoise = x0 while tortoise != hare: tortoise = f(tortoise) hare = f(hare) # Заєць і черепаха рухаються з однаковою швидкістюd mu += 1 # Знайдіть довжину найкоротшого циклу, починаючи з x_μ # Заєць рухається крок за кроком, поки черепаха нерухома. # lam збільшується, поки не знайдеться λ. lam = 1 hare = f(tortoise) while tortoise != hare: hare = f(hare) lam += 1 return lam, mu
Цей код звертається лише до послідовності шляхом зберігання та копіювання покажчиків, оцінок функцій та тестів рівності; тому він кваліфікується як алгоритм вказівників. Алгоритм використовує O(λ + μ) цих типів та O(1) простір для зберігання.
Алгоритм Брента
[en] описав альтернативний алгоритм виявлення циклу, який, як і алгоритм черепахи та зайця, вимагає лише двох вказівників у послідовності. Однак він базується на іншому принципі: пошук найменшої потужності з двох 2i, більшої як за λ і за μ.
Для i = 0, 1, 2, ..., алгоритм порівнює x2i−1 з кожним наступним значенням послідовності до наступного степеня двох, зупиняючись, коли знаходить відповідність. Він має дві переваги порівняно з алгоритмом черепахи та зайця: він безпосередньо знаходить правильну довжину λ циклу, замість того, щоб шукати його на наступному етапі, а його кроки передбачають лише одну оцінку f, а не три.
Наступний код Python більш детально показує, як працює ця техніка.
def brent(f, x0): # основний етап: пошук степеня двійки power = lam = 1 tortoise = x0 hare = f(x0) # f (x0) - елемент/вузол поруч із x0. while tortoise != hare: if power == lam: # час почати нову степінь двійки? tortoise = hare power *= 2 lam = 0 hare = f(hare) lam += 1 # Знайдіть позицію першого повторення довжини λ tortoise = hare = x0 for i in range(lam): # range(lam) створює список зі значеннями 0, 1, ..., lam-1 hare = f(hare) # Відстань між зайцем і черепахою тепер λ. # Далі заєць і черепаха рухаються з однаковою швидкістю, поки вони не домовляться mu = 0 while tortoise != hare: tortoise = f(tortoise) hare = f(hare) mu += 1 return lam, mu
Як і алгоритм черепахи та зайця, це алгоритм вказівників, який використовує O(λ + μ) та оцінки функцій та O(1) простір для зберігання. Не важко показати, що кількість оцінок функцій ніколи не може бути вище, ніж для алгоритму Флойда. Брент стверджує, що в середньому його алгоритм пошуку циклу працює приблизно на 36 % швидше, ніж алгоритм Флойда, і що він швидше ρ-алгоритма Полларда приблизно на 24 %. Він також виконує [en] для рандомізованої версії алгоритму, в якому послідовність індексів, відстежена повільнішим із двох покажчиків, — це не повноваження двох самих, а скоріше рандомізоване кратне ступеням двох. Хоча його основне призначення — алгоритми цілочисельної факторизації, Брент також обговорює застосування для тестування генераторів псевдовипадкових чисел.
Алгоритм Госпера
Алгоритм [en] знаходить період і нижню і верхню межу вихідної точки першого циклу. Різниця між нижньою та верхньою межею має той самий порядок, що й період, наприклад. .
Головною особливістю алгоритму Госпера є те, що він ніколи не створює резервних копій для переоцінки функції генератора, і є економічним як у просторі, так і в часі. Його можна приблизно охарактеризувати як паралельну версію алгоритму Брента. У той час як алгоритм Брента поступово збільшує розрив між черепахою та зайцем, алгоритм Госпера використовує кілька черепах (збережено кілька попередніх значень), які приблизно експоненціально рознесені. Відповідно до примітки в пункті 132 HAKMEM [ 15 вересня 2020 у Wayback Machine.], цей алгоритм буде виявляти повторення до третього входження будь-якого значення, наприклад. цикл повторюватиметься максимум двічі. У цій примітці також зазначено, що її достатньо для зберігання попередні значення; однак, передбачена реалізація зберігає цінності. Наприклад: значення функції-це 32-розрядні цілі числа, і апріорі відомо, що друга ітерація циклу закінчується після щонайменше 232 оцінок функції з початку, тобто. . Тоді достатньо зберегти 33 32-розрядні цілі числа.
На -го оцінювання функції генератора, алгоритм порівнює отримане значення з попередні значення; зауважте це піднімається принаймні і максимум . Тому складність цього алгоритму у часі дорівнює . Так як він зберігається цінностей, її просторова складність становить . Це за звичайного припущення, наявного у цій статті, що розмір значень функції постійний. Без цього припущення складність простору така оскільки нам принаймні потрібно різні значення, а отже, розмір кожного значення .
Компроміси між часом і простором
Ряд авторів вивчали методи виявлення циклів, які використовують більше пам'яті, ніж методи Флойда та Брента, але виявляють цикли швидше. Загалом ці методи зберігають декілька попередньо обчислених значень послідовності та перевіряють, чи кожне нове значення дорівнює одному з попередньо обчислених значень. Для того, щоб зробити це швидко, вони зазвичай використовують хеш-таблицю або подібну структуру даних для зберігання попередньо обчислених значень, і тому не є алгоритмами покажчиків: зокрема, вони зазвичай не можуть бути застосовані до ρ-алгоритма Полларда. Ці методи відрізняються тим, як вони визначають, які значення зберігати. Слідом за Нівашем ми коротко оглядаємо ці методи.
- Брент вже описував варіанти його методу, в яких індекси збережених значень послідовностей є степенями числа R відмінними від двох. Вибираючи R як число, близьке до одиниці, і зберігаючи значення послідовностей в індексах, які знаходяться поблизу послідовності послідовних повноважень R, алгоритм виявлення циклу може використовувати ряд оцінок функцій, які знаходяться в межах довільно малого коефіцієнта оптимуму λ + μ.
- [en], Шиманьский и Яо надають метод, який використовує M комірок пам'яті і вимагає лише в найгіршому випадку оцінки функцій для деякої сталої c, яку вони показують як оптимальну. Методика передбачає збереження числового параметра d, зберігання в таблиці лише тих позицій у послідовності, кратних d, а також очищення таблиці та подвоєння d коли зберігається занадто багато значень.
- Кілька авторів описали методи виділених точок, які зберігають значення функцій у таблиці на основі критерію, що включає значення, а не індекси (як у методі Седжвіка та ін.). Простіше кажучи, Ніваш приписує Д. П. Вудраффу пропозицію зберегти випадкову вибірку раніше побачених значень, зробивши відповідний випадковий вибір на кожному кроці, щоб вибірка залишалася випадковою.
- Ніваш описує алгоритм, який не використовує фіксований обсяг пам'яті, але для якого очікуваний обсяг використовуваної пам'яті (за припущення, що функція введення є випадковою) є логарифмічним по довжині послідовності. Елемент зберігається в таблиці пам'яті за допомогою цієї техніки, коли попередній елемент не має меншого значення. Як показує Ніваш, елементи з цією технікою можна підтримувати за допомогою стека, і кожне наступне значення послідовності потрібно порівнювати лише з верхньою частиною стека. Алгоритм завершується, коли знайдено повторюваний елемент послідовності з найменшим значенням. Запуск одного і того ж алгоритму з кількома стеками, з використанням випадкових перестановок значень для впорядкування значень у кожному стеку, дозволяє знайти компроміс у просторі часу, подібний до попередніх алгоритмів. Однак навіть версія цього алгоритму з одним стеком не є вказівним алгоритмом через порівняння, необхідні для визначення того, яке з двох значень менше.
Будь-який алгоритм виявлення циклу, який зберігає не більше M значень із вхідної послідовності, повинен виконувати принаймні оцінки функцій.
Застосування
Виявлення циклів має багато застосувань.
- Визначення довжини циклу генератора псевдовипадкових чисел є одним із показників його сили. Це додаток, наведене Кнутом при описі методу Флойда. Брент описує результати тестування лінійного конгруенціального генератора таким чином; його період виявився значно меншим за рекламований. Для більш складних генераторів послідовність значень, у яких слід знайти цикл, може відображати не вихід генератора, а його внутрішній стан.
- Кілька теоретично численних алгоритмів ґрунтуються на виявленні циклу, включаючи ρ-алгоритма Полларда для цілочисельної факторизації та пов'язаний з ним алгоритм кенгуру для задачі дискретного логарифма.
- У криптографії можливість знайти два різних значення xμ−-1 і х λ+μ−-1 відображається з допомогою деяких криптографічного функції ƒ до того ж значення хμ може вказувати на слабкість в ƒ. Наприклад, Quisquater та Delescaille застосовують алгоритми виявлення циклу у пошуку повідомлення та пару стандартних ключів шифрування даних, які відображають це повідомлення на одне й те саме зашифроване значення; Каліскі, Рівест та Шерман також використовують алгоритми виявлення циклу для атаки на DES. Цей метод також може бути використаний для пошуку колізій у криптографічній хеш-функціях.
- Виявлення циклу може бути корисним як спосіб виявлення нескінченних циклів у певних типах комп'ютерних програм.
- Періодичні конфігурації в моделюванні клітинних автоматів можна знайти, застосувавши алгоритми виявлення циклу до послідовності станів автоматів.
- [en] зв'язаних списків — це метод перевірки правильності алгоритму, що використовує ці структури. Якщо вузол у списку неправильно вказує на попередній вузол у цьому ж списку, структура сформує цикл, який може бути виявлений цими алгоритмами. У мові Common Lisp принтер S-виразів при змінній
*print-circle*
виявляє зациклені спискові структури і друкує їх компактно. - описує застосування в обчислювальній теорії груп: визначення структури абелевої групи з набору її твірних. Криптографічні алгоритми Каліського та ін. також можна розглядати як спробу зробити висновок про структуру невідомої групи.
- коротко згадує додаток для комп'ютерного моделювання небесної механіки, яке вона приписує Вільяму Кехену. У цьому додатку виявлення циклу у фазовому просторі орбітальної системи може бути використано для визначення того, чи є система періодичною з точністю до моделювання.
- У фрактальній генерації множини Мандельброта використовуються деякі техніки виконання для прискорення генерації зображення. Одна з них називається «перевірка періоду», яка полягає у знаходженні циклів на точковій орбіті. У цій статті описано техніку «перевірки періоду». Ви можете знайти інше пояснення тут [ 27 квітня 2021 у Wayback Machine.]. Деякі алгоритми виявлення циклу повинні бути реалізовані для реалізації цієї техніки.
Примітки
- Joux, Antoine (2009), , CRC Press, с. 223, ISBN , архів оригіналу за 2 серпня 2021, процитовано 16 серпня 2021.
- Joux, (2009).
- Дональд Кнут. Seminumerical Algorithms // The Art of Computer Programming. — 3rd. — Massachusetts : Addison–Wesley, 1997. — Т. 2. — 762 с. — .(англ.)
- Handbook of Applied Cryptography, by Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone, p. 125 [ 2 серпня 2021 у Wayback Machine.], describes this algorithm and others
- Флойд, Роберт (1967), Nondeterministic Algorithms, J. ACM, 14 (4): 636—644, doi:10.1145/321420.321422
- The Hash Function BLAKE, by Jean-Philippe Aumasson, Willi Meier, Raphael C.-W. Phan, Luca Henzen (2015), p. 21 [ 17 серпня 2021 у Wayback Machine.], footnote 8
- Joux, (2009), Section 7.1.1, Floyd's cycle-finding algorithm, pp. 225—226.
- [en] (1980), (PDF), BIT Numerical Mathematics, 20 (2): 176—184, doi:10.1007/BF01933190, архів оригіналу (PDF) за 24 вересня 2009, процитовано 16 серпня 2021
{{}}
: Перевірте значення|last=
(). - Joux, (2009), Section 7.1.2, Brent's cycle-finding algorithm, pp. 226—227.
- . Архів оригіналу за 14 квітня 2016. Процитовано 8 лютого 2017.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - . Архів оригіналу за 15 вересня 2020. Процитовано 16 серпня 2021.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - Nivasch, Gabriel (2004), Cycle detection using a stack, Information Processing Letters, 90 (3): 135—140, doi:10.1016/j.ipl.2004.01.016.
- ; (1984), A Monte Carlo factoring algorithm with linear storage, Mathematics of Computation, 43 (167): 289—311, doi:10.2307/2007414, JSTOR 2007414.
- Teske, Edlyn (1998), A space-efficient algorithm for group structure computation, Mathematics of Computation, 67 (224): 1637—1663, Bibcode:1998MaCom..67.1637T, doi:10.1090/S0025-5718-98-00968-5.
- ; Szymanski, Thomas G.; (1982), The complexity of finding cycles in periodic functions, SIAM Journal on Computing, 11 (2): 376—390, doi:10.1137/0211030.
- van Oorschot, Paul C.; Wiener, Michael J. (1999), , Journal of Cryptology, 12 (1): 1—28, doi:10.1007/PL00003816, архів оригіналу за 16 серпня 2021, процитовано 16 серпня 2021.
- Quisquater, J.-J.; Delescaille, J.-P., How easy is collision search? Application to DES, Advances in Cryptology – EUROCRYPT '89, Workshop on the Theory and Application of Cryptographic Techniques, Lecture Notes in Computer Science, т. 434, Springer-Verlag, с. 429—434, doi:10.1007/3-540-46885-4_43.
- (1981), Lower bounds for the cycle detection problem, Proc. 13th ACM Symposium on Theory of Computing, с. 96—105, doi:10.1145/800076.802462.
- ; (1985), Improved lower bounds for the cycle detection problem, Theoretical Computer Science (journal)|Theoretical Computer Science, 36 (2–3): 231—237, doi:10.1016/0304-3975(85)90044-1.
- Pollard, J. M. (1975), A Monte Carlo method for factorization, BIT, 15 (3): 331—334, doi:10.1007/BF01933667.
- Pollard, J. M. (1978), Monte Carlo methods for index computation (mod p), Mathematics of Computation, American Mathematical Society, 32 (143): 918—924, doi:10.2307/2006496, JSTOR 2006496.
- Kaliski, Burton S., Jr.; Rivest, Ronald L.; Sherman, Alan T. (1988), Is the Data Encryption Standard a group? (Results of cycling experiments on DES), Journal of Cryptology, 1 (1): 3—36, doi:10.1007/BF00206323.
- Joux, (2009), Section 7.5, Collisions in hash functions, pp. 242—245.
- Van Gelder, Allen (1987), Efficient loop detection in Prolog using the tortoise-and-hare technique, Journal of Logic Programming, 4 (1): 23—31, doi:10.1016/0743-1066(87)90020-3.
- Auguston, Mikhail; Hon, Miu Har (1997), Assertions for Dynamic Shape Analysis of List Data Structures, , Linköping Electronic Articles in Computer and Information Science, Linköping University, с. 37—42, архів оригіналу за 16 серпня 2021, процитовано 16 серпня 2021.
Посилання
- Габріель Ніваш, Проблема виявлення циклу та алгоритм стека [ 16 серпня 2021 у Wayback Machine.]
- Черепаха і заєць [ 8 червня 2021 у Wayback Machine.], Портлендське сховище візерунків
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
V informatici viyavlennya ciklu ce algoritmichna zadacha poshuku ciklu v poslidovnosti iteracijnih znachen funkciyi Dlya bud yakoyi funkciyi f yaka vidobrazhaye skinchennu mnozhinu S na samu sebe i bud yakogo pochatkovogo znachennya x0 z S poslidovnist iteracijnih znachen funkciyi x 0 x 1 f x 0 x 2 f x 1 x i f x i 1 displaystyle x 0 x 1 f x 0 x 2 f x 1 dots x i f x i 1 dots zreshtoyu bude dvichi vikoristovuvati odne j te zh znachennya tobto znajdetsya para riznih indeksiv i ta j takih sho xi xj Yak tilki ce trapitsya poslidovnist bude periodichno prodovzhuvatisya povtoryuyuchi tu samu poslidovnist znachen vid xi do xj 1 Viyavlennya ciklu ce zadacha poshuku i ta j dlya zadanih f ta x0 Vidomo kilka algoritmiv shvidkogo znahodzhennya cikliv z neznachnim vikoristannyam pam yati Algoritm cherepahi ta zajcya Roberta U Flojda peremishuye dva vkazivnika z riznoyu shvidkistyu po poslidovnosti znachen poki obidva ne vkazhut na rivni znachennya Algoritm Brenta bazuyetsya na ideyi en Algoritmi Flojda i Brenta vikoristovuyut stalij ob yem pam yati a kilkist raziv obchislennya znachenn funkciyi proporcijna vidstani vid pochatku poslidovnosti do pershogo povtorennya Kilka inshih algoritmiv vikoristovuyut bilshij ob yem pam yati dlya menshoyi kilkosti obchislen znachen funkciyi Sered zastosunkiv viyavlennya cikliv ye perevirka yakosti generatoriv psevdovipadkovih chisel ta kriptografichnih hesh funkcij algoritmiv obchislyuvalnoyi teoriyi chisel viyavlennya neskinchennih cikliv u komp yuternih programah ta periodichnih konfiguracij u klitinnih avtomatah avtomatizovanij en v takih strukturah danih yak zv yazanij spisok vzayemne blokuvannya pri obrobci tranzakcij v SUBD PrikladFunkciya yaka vidobrazhaye mnozhinu 0 1 2 3 4 5 6 7 8 na samu sebe ta yiyi graf Na malyunku pokazana funkciya f yaka vidobrazhaye mnozhinu S 0 1 2 3 4 5 6 7 8 samu do sebe Yaksho pochinati z x0 2 i poslidovno znahoditi f otrimayemo poslidovnist znachen funkciyi 2 0 6 3 1 6 3 1 6 3 1 Ciklom u cij poslidovnosti bude pidposlidovnist 6 3 1 ViznachennyaNehaj S bud yaka skinchenna mnozhina f bud yaka funkciya sho vidobrazhaye S na samu sebe x 0 displaystyle x 0 bud yakij element z S Dlya bud yakogo i gt 0 displaystyle i gt 0 nehaj x i f x i 1 displaystyle x i f x i 1 Nehaj m najmenshij indeks dlya yakogo znachennya xm znovu z yavlyayetsya neskinchenno chasto v mezhah poslidovnosti znachen xi a l dovzhina petli ce najmenshe naturalne chislo sho xm xl m Problema viyavlennya ciklu ce zadacha poshuku l i m Cyu zh zadachu rozglyanemo s tochki zoru teoriyi grafiv pobuduyemo oriyentovanij graf u yakomu kozhna vershina maye yedine vihidne rebro yakomu vidpovidaye graf funkciyi nashoyi zadachi ta vershinami yakogo ye elementi mnozhini S a rebra yakogo vidobrazhayut element na vidpovidne znachennya funkciyi yak pokazano na malyunku Nabir vershin dostupnih vid pochatkovoyi vershini x0 utvoryuyut pidgraf formi sho nagaduye grecku bukvu rho r shlyah dovzhini m vid x0 do cikla yakij skladayetsya z l vershin Komp yuterne predstavlennyaYak pravilo f ne bude vkazano tabliceyu znachen yak ce pokazano na malyunku vishe Shvidshe za vse algoritmu viyavlennya ciklu mozhe buti nadanij dostup abo do poslidovnosti znachen xi abo do pidprogrami dlya obchislennya f Zavdannya polyagaye v tomu shob znajti l i m pereviryayuchi yakomoga menshe znachen z poslidovnosti abo vikonuyuchi yakomoga menshe viklikiv pidprogram Yak pravilo takozh vazhliva prostorova skladnist algoritmu dlya problemi viyavlennya ciklu bazhano virishiti cyu problemu vikoristovuyuchi obsyag pam yati znachno menshij nizh potribno dlya zberezhennya vsiyeyi poslidovnosti U deyakih dodatkah i zokrema v r algoritm Pollarda dlya faktorizaciyi cilih chisel algoritm maye nabagato obmezhenij dostup do S ta f Napriklad v r algoritmi Pollarda S ce nabir cilih chisel za modulem nevidomogo prostogo mnozhnika chisla sho pidlyagaye faktorizaciyi tomu navit rozmir S nevidomij algoritmu Shob dozvoliti algoritmam viyavlennya ciklu vikoristovuvati taki obmezheni znannya voni mozhut buti rozrobleni na osnovi nastupnih mozhlivostej Spochatku peredbachayetsya sho algoritm maye u svoyij pam yati ob yekt sho predstavlyaye vkazivnik na pochatkove znachennya x0 Na bud yakomu etapi vin mozhe vikonati odnu z troh dij vin mozhe skopiyuvati bud yakij vkazivnik yakij vin maye na inshij ob yekt u pam yati vin mozhe zastosuvati f i zaminiti bud yakij z jogo pokazhchikiv na vkazivnik na nastupnij ob yekt u poslidovnosti abo vin mozhe zastosuvati pidprograma dlya viznachennya togo chi ye dva yiyi pokazhchiki rivnimi znachennyami v poslidovnosti Diya testuvannya rivnosti mozhe vklyuchati deyaki netrivialni obchislennya napriklad v r algoritmi Pollarda ce realizuyetsya shlyahom perevirki togo chi maye riznicya mizh dvoma zberezhenimi znachennyami netrivialnij najbilshij spilnij dilnik z chislom yake potribno vrahuvati U comu konteksti za analogiyeyu do modeli obchislen en algoritm yakij vikoristovuye lishe kopiyuvannya pokazhchika prosuvannya v mezhah poslidovnosti ta testi rivnosti mozhna nazvati algoritmom pokazhchika AlgoritmiYaksho vhid podayetsya yak pidprograma dlya obchislennya f zadachu viyavlennya ciklu mozhna trivialno virishiti vikoristovuyuchi lishe l m prosto obchislivshi poslidovnist znachen xi ta vikoristovuyuchi strukturu danih taku yak hesh tablicyu dlya yih zberigannya znachennya ta pereviriti chi kozhne nastupne znachennya vzhe zberezheno Prote prostorova skladnist cogo algoritmu proporcijna l m nadmirno velika Krim togo dlya realizaciyi cogo metodu yak en znadobitsya zastosuvati test rivnosti do kozhnoyi pari znachen sho prizvede do zagalnogo kvadratichnogo chasu Takim chinom doslidzhennya v cij galuzi zoseredzheni na dvoh cilyah vikoristati menshe miscya nizh cej nayivnij algoritm i znajti algoritmi pokazhchikiv yaki vikoristovuyut menshe testiv rivnosti Cherepaha i zayec Flojda Algoritm viyavlennya ciklu cherepaha i zayec Flojda zastosovanij do poslidovnosti 2 0 6 3 1 6 3 1 Algoritm poshuku ciklu Flojda ce algoritm pokazhchikiv yakij vikoristovuye lishe dva pokazhchiki yaki ruhayutsya po poslidovnosti z riznoyu shvidkistyu Jogo takozh nazivayut algoritmom cherepahi ta zajcya natyakayuchi na bajku Ezopa pro Cherepahu ta zajcya Algoritm nazvanij na chest Roberta U Flojda yakomu jogo vinahid pripisuvav Donald Knut Odnak algoritm ne z yavlyayetsya u opublikovanij roboti Flojda i ce mozhe buti hibnim vidnesennyam Flojd opisuye algoritmi pererahuvannya vsih prostih cikliv v oriyentovanomu grafi u roboti 1967 roku ale cya robota ne opisuye problemu poshuku ciklu u grafah funkcij sho ye temoyu ciyeyi statti Naspravdi tverdzhennya Knuta 1969 roku yake vin pripisuye Flojdu bez cituvannya ye pershim vidomim zgaduvannyam u drukovanomu viglyadi i otzhe vin mozhe nalezhati do en i ne nalezhati okremij osobi Klyuchove rozuminnya algoritmu nastupne Yaksho isnuye cikl to dlya bud yakih cilih chisel i m i k 0 xi xi kl de l dovzhina petli yaku potribno znajti a m indeks pershogo elementa ciklu Vihodyachi z cogo todi mozhna pokazati sho i kl m dlya deyakogo k todi i tilki todi koli xi x2i Takim chinom algoritmu potribno lishe pereviriti nayavnist povtoryuvanih znachen ciyeyi specialnoyi formi odna vdvichi dali vid pochatku poslidovnosti nizh insha shob znajti period n povtorennya kratnij l Yak tilki n bude znajdeno algoritm vidnovlyuye poslidovnist vid yiyi pochatku shob znajti pershe povtorene znachennya xm u poslidovnosti vikoristovuyuchi toj fakt sho l dilit n i otzhe xm xm v Nareshti yak tilki znachennya m stalo vidomim trivialno znajti dovzhinu l najkorotshogo povtoryuvanogo ciklu shlyahom poshuku pershogo polozhennya m l dlya yakogo xm l xm Takim chinom algoritm utrimuye dva vkazivniki u danij poslidovnosti odin cherepaha u tochci xi a inshij zayec u tochci x2i Na kozhnomu kroci algoritmu vin zbilshuyetsya i na odin ruhayuchi cherepahu na odin krok vpered a zajcya na dva kroki vpered u poslidovnosti a potim porivnyuye znachennya poslidovnosti za cimi dvoma vkazivnikami Najmenshe znachennya i gt 0 dlya yakogo cherepaha ta zayec vkazuyut na rivni znachennya ye bazhanim znachennyam n Nastupnij kod Python pokazuye yak cya ideya mozhe buti realizovana yak algoritm def floyd f x0 Osnovna faza algoritmu poshuk povtoren x i x 2i Zayec ruhayetsya vdvichi shvidshe cherepahi ta vidstan mizh nimi zbilshuyetsya na 1 na kozhnomu kroci Vreshti resht voni obidva opinyatsya vseredini ciklu a potim v pevnij moment vidstan mizh nimi bude dilitsya na krapku l tortoise f x0 f x0 element vuzol poruch iz x0 hare f f x0 while tortoise hare tortoise f tortoise hare f f hare Na comu misci roztashuvannya cherepahi n sho takozh dorivnyuye na vidstan mizh zajcem i cherepahoyu dilitsya na period l Tozh zajci ruhayutsya po kolu krok za krokom i cherepaha skinuti na x0 ruhayutsya do kola bude peretinayutsya na pochatku kola Tomu sho vidstan mizh nimi ye postijnoyu na 2n kratnoyu l voni pogodyatsya yak tilki cherepaha dosyagne indeksu m Znajdit poziciyu m pershogo povtorennya mu 0 tortoise x0 while tortoise hare tortoise f tortoise hare f hare Zayec i cherepaha ruhayutsya z odnakovoyu shvidkistyud mu 1 Znajdit dovzhinu najkorotshogo ciklu pochinayuchi z x m Zayec ruhayetsya krok za krokom poki cherepaha neruhoma lam zbilshuyetsya poki ne znajdetsya l lam 1 hare f tortoise while tortoise hare hare f hare lam 1 return lam mu Cej kod zvertayetsya lishe do poslidovnosti shlyahom zberigannya ta kopiyuvannya pokazhchikiv ocinok funkcij ta testiv rivnosti tomu vin kvalifikuyetsya yak algoritm vkazivnikiv Algoritm vikoristovuye O l m cih tipiv ta O 1 prostir dlya zberigannya Algoritm Brenta en opisav alternativnij algoritm viyavlennya ciklu yakij yak i algoritm cherepahi ta zajcya vimagaye lishe dvoh vkazivnikiv u poslidovnosti Odnak vin bazuyetsya na inshomu principi poshuk najmenshoyi potuzhnosti z dvoh 2i bilshoyi yak za l i za m Dlya i 0 1 2 algoritm porivnyuye x2i 1 z kozhnim nastupnim znachennyam poslidovnosti do nastupnogo stepenya dvoh zupinyayuchis koli znahodit vidpovidnist Vin maye dvi perevagi porivnyano z algoritmom cherepahi ta zajcya vin bezposeredno znahodit pravilnu dovzhinu l ciklu zamist togo shob shukati jogo na nastupnomu etapi a jogo kroki peredbachayut lishe odnu ocinku f a ne tri Nastupnij kod Python bilsh detalno pokazuye yak pracyuye cya tehnika def brent f x0 osnovnij etap poshuk stepenya dvijki power lam 1 tortoise x0 hare f x0 f x0 element vuzol poruch iz x0 while tortoise hare if power lam chas pochati novu stepin dvijki tortoise hare power 2 lam 0 hare f hare lam 1 Znajdit poziciyu pershogo povtorennya dovzhini l tortoise hare x0 for i in range lam range lam stvoryuye spisok zi znachennyami 0 1 lam 1 hare f hare Vidstan mizh zajcem i cherepahoyu teper l Dali zayec i cherepaha ruhayutsya z odnakovoyu shvidkistyu poki voni ne domovlyatsya mu 0 while tortoise hare tortoise f tortoise hare f hare mu 1 return lam mu Yak i algoritm cherepahi ta zajcya ce algoritm vkazivnikiv yakij vikoristovuye O l m ta ocinki funkcij ta O 1 prostir dlya zberigannya Ne vazhko pokazati sho kilkist ocinok funkcij nikoli ne mozhe buti vishe nizh dlya algoritmu Flojda Brent stverdzhuye sho v serednomu jogo algoritm poshuku ciklu pracyuye priblizno na 36 shvidshe nizh algoritm Flojda i sho vin shvidshe r algoritma Pollarda priblizno na 24 Vin takozh vikonuye en dlya randomizovanoyi versiyi algoritmu v yakomu poslidovnist indeksiv vidstezhena povilnishim iz dvoh pokazhchikiv ce ne povnovazhennya dvoh samih a skorishe randomizovane kratne stupenyam dvoh Hocha jogo osnovne priznachennya algoritmi cilochiselnoyi faktorizaciyi Brent takozh obgovoryuye zastosuvannya dlya testuvannya generatoriv psevdovipadkovih chisel Algoritm Gospera Algoritm en znahodit period l displaystyle lambda i nizhnyu m l displaystyle mu l i verhnyu m u displaystyle mu u mezhu vihidnoyi tochki pershogo ciklu Riznicya mizh nizhnoyu ta verhnoyu mezheyu maye toj samij poryadok sho j period napriklad m l l m h displaystyle mu l lambda sim mu h Golovnoyu osoblivistyu algoritmu Gospera ye te sho vin nikoli ne stvoryuye rezervnih kopij dlya pereocinki funkciyi generatora i ye ekonomichnim yak u prostori tak i v chasi Jogo mozhna priblizno oharakterizuvati yak paralelnu versiyu algoritmu Brenta U toj chas yak algoritm Brenta postupovo zbilshuye rozriv mizh cherepahoyu ta zajcem algoritm Gospera vikoristovuye kilka cherepah zberezheno kilka poperednih znachen yaki priblizno eksponencialno rozneseni Vidpovidno do primitki v punkti 132 HAKMEM 15 veresnya 2020 u Wayback Machine cej algoritm bude viyavlyati povtorennya do tretogo vhodzhennya bud yakogo znachennya napriklad cikl povtoryuvatimetsya maksimum dvichi U cij primitci takozh zaznacheno sho yiyi dostatno dlya zberigannya 8 log l displaystyle Theta log lambda poperedni znachennya odnak peredbachena realizaciya zberigaye 8 log m l displaystyle Theta log mu lambda cinnosti Napriklad znachennya funkciyi ce 32 rozryadni cili chisla i apriori vidomo sho druga iteraciya ciklu zakinchuyetsya pislya shonajmenshe 232 ocinok funkciyi z pochatku tobto m 2 l 2 32 displaystyle mu 2 lambda leq 2 32 Todi dostatno zberegti 33 32 rozryadni cili chisla Na i displaystyle i go ocinyuvannya funkciyi generatora algoritm porivnyuye otrimane znachennya z O log i displaystyle O log i poperedni znachennya zauvazhte ce i displaystyle i pidnimayetsya prinajmni m l displaystyle mu lambda i maksimum m 2 l displaystyle mu 2 lambda Tomu skladnist cogo algoritmu u chasi dorivnyuye O m l log m l displaystyle O mu lambda cdot log mu lambda Tak yak vin zberigayetsya 8 log m l displaystyle Theta log mu lambda cinnostej yiyi prostorova skladnist stanovit 8 log m l displaystyle Theta log mu lambda Ce za zvichajnogo pripushennya nayavnogo u cij statti sho rozmir znachen funkciyi postijnij Bez cogo pripushennya skladnist prostoru taka W log 2 m l displaystyle Omega log 2 mu lambda oskilki nam prinajmni potribno m l displaystyle mu lambda rizni znachennya a otzhe rozmir kozhnogo znachennya W log m l displaystyle Omega log mu lambda Kompromisi mizh chasom i prostorom Ryad avtoriv vivchali metodi viyavlennya cikliv yaki vikoristovuyut bilshe pam yati nizh metodi Flojda ta Brenta ale viyavlyayut cikli shvidshe Zagalom ci metodi zberigayut dekilka poperedno obchislenih znachen poslidovnosti ta pereviryayut chi kozhne nove znachennya dorivnyuye odnomu z poperedno obchislenih znachen Dlya togo shob zrobiti ce shvidko voni zazvichaj vikoristovuyut hesh tablicyu abo podibnu strukturu danih dlya zberigannya poperedno obchislenih znachen i tomu ne ye algoritmami pokazhchikiv zokrema voni zazvichaj ne mozhut buti zastosovani do r algoritma Pollarda Ci metodi vidriznyayutsya tim yak voni viznachayut yaki znachennya zberigati Slidom za Nivashem mi korotko oglyadayemo ci metodi Brent vzhe opisuvav varianti jogo metodu v yakih indeksi zberezhenih znachen poslidovnostej ye stepenyami chisla R vidminnimi vid dvoh Vibirayuchi R yak chislo blizke do odinici i zberigayuchi znachennya poslidovnostej v indeksah yaki znahodyatsya poblizu poslidovnosti poslidovnih povnovazhen R algoritm viyavlennya ciklu mozhe vikoristovuvati ryad ocinok funkcij yaki znahodyatsya v mezhah dovilno malogo koeficiyenta optimumu l m en Shimanskij i Yao nadayut metod yakij vikoristovuye M komirok pam yati i vimagaye lishe v najgirshomu vipadku l m 1 c M 1 2 displaystyle lambda mu 1 cM 1 2 ocinki funkcij dlya deyakoyi staloyi c yaku voni pokazuyut yak optimalnu Metodika peredbachaye zberezhennya chislovogo parametra d zberigannya v tablici lishe tih pozicij u poslidovnosti kratnih d a takozh ochishennya tablici ta podvoyennya d koli zberigayetsya zanadto bagato znachen Kilka avtoriv opisali metodi vidilenih tochok yaki zberigayut znachennya funkcij u tablici na osnovi kriteriyu sho vklyuchaye znachennya a ne indeksi yak u metodi Sedzhvika ta in Prostishe kazhuchi Nivash pripisuye D P Vudraffu propoziciyu zberegti vipadkovu vibirku ranishe pobachenih znachen zrobivshi vidpovidnij vipadkovij vibir na kozhnomu kroci shob vibirka zalishalasya vipadkovoyu Nivash opisuye algoritm yakij ne vikoristovuye fiksovanij obsyag pam yati ale dlya yakogo ochikuvanij obsyag vikoristovuvanoyi pam yati za pripushennya sho funkciya vvedennya ye vipadkovoyu ye logarifmichnim po dovzhini poslidovnosti Element zberigayetsya v tablici pam yati za dopomogoyu ciyeyi tehniki koli poperednij element ne maye menshogo znachennya Yak pokazuye Nivash elementi z ciyeyu tehnikoyu mozhna pidtrimuvati za dopomogoyu steka i kozhne nastupne znachennya poslidovnosti potribno porivnyuvati lishe z verhnoyu chastinoyu steka Algoritm zavershuyetsya koli znajdeno povtoryuvanij element poslidovnosti z najmenshim znachennyam Zapusk odnogo i togo zh algoritmu z kilkoma stekami z vikoristannyam vipadkovih perestanovok znachen dlya vporyadkuvannya znachen u kozhnomu steku dozvolyaye znajti kompromis u prostori chasu podibnij do poperednih algoritmiv Odnak navit versiya cogo algoritmu z odnim stekom ne ye vkazivnim algoritmom cherez porivnyannya neobhidni dlya viznachennya togo yake z dvoh znachen menshe Bud yakij algoritm viyavlennya ciklu yakij zberigaye ne bilshe M znachen iz vhidnoyi poslidovnosti povinen vikonuvati prinajmni l m 1 1 M 1 displaystyle lambda mu left 1 frac 1 M 1 right ocinki funkcij ZastosuvannyaViyavlennya cikliv maye bagato zastosuvan Viznachennya dovzhini ciklu generatora psevdovipadkovih chisel ye odnim iz pokaznikiv jogo sili Ce dodatok navedene Knutom pri opisi metodu Flojda Brent opisuye rezultati testuvannya linijnogo kongruencialnogo generatora takim chinom jogo period viyavivsya znachno menshim za reklamovanij Dlya bilsh skladnih generatoriv poslidovnist znachen u yakih slid znajti cikl mozhe vidobrazhati ne vihid generatora a jogo vnutrishnij stan Kilka teoretichno chislennih algoritmiv gruntuyutsya na viyavlenni ciklu vklyuchayuchi r algoritma Pollarda dlya cilochiselnoyi faktorizaciyi ta pov yazanij z nim algoritm kenguru dlya zadachi diskretnogo logarifma U kriptografiyi mozhlivist znajti dva riznih znachennya xm 1 i h l m 1 vidobrazhayetsya z dopomogoyu deyakih kriptografichnogo funkciyi ƒ do togo zh znachennya hm mozhe vkazuvati na slabkist v ƒ Napriklad Quisquater ta Delescaille zastosovuyut algoritmi viyavlennya ciklu u poshuku povidomlennya ta paru standartnih klyuchiv shifruvannya danih yaki vidobrazhayut ce povidomlennya na odne j te same zashifrovane znachennya Kaliski Rivest ta Sherman takozh vikoristovuyut algoritmi viyavlennya ciklu dlya ataki na DES Cej metod takozh mozhe buti vikoristanij dlya poshuku kolizij u kriptografichnij hesh funkciyah Viyavlennya ciklu mozhe buti korisnim yak sposib viyavlennya neskinchennih cikliv u pevnih tipah komp yuternih program Periodichni konfiguraciyi v modelyuvanni klitinnih avtomativ mozhna znajti zastosuvavshi algoritmi viyavlennya ciklu do poslidovnosti staniv avtomativ en zv yazanih spiskiv ce metod perevirki pravilnosti algoritmu sho vikoristovuye ci strukturi Yaksho vuzol u spisku nepravilno vkazuye na poperednij vuzol u comu zh spisku struktura sformuye cikl yakij mozhe buti viyavlenij cimi algoritmami U movi Common Lisp printer S viraziv pri zminnij print circle viyavlyaye zacikleni spiskovi strukturi i drukuye yih kompaktno opisuye zastosuvannya v obchislyuvalnij teoriyi grup viznachennya strukturi abelevoyi grupi z naboru yiyi tvirnih Kriptografichni algoritmi Kaliskogo ta in takozh mozhna rozglyadati yak sprobu zrobiti visnovok pro strukturu nevidomoyi grupi korotko zgaduye dodatok dlya komp yuternogo modelyuvannya nebesnoyi mehaniki yake vona pripisuye Vilyamu Kehenu U comu dodatku viyavlennya ciklu u fazovomu prostori orbitalnoyi sistemi mozhe buti vikoristano dlya viznachennya togo chi ye sistema periodichnoyu z tochnistyu do modelyuvannya U fraktalnij generaciyi mnozhini Mandelbrota vikoristovuyutsya deyaki tehniki vikonannya dlya priskorennya generaciyi zobrazhennya Odna z nih nazivayetsya perevirka periodu yaka polyagaye u znahodzhenni cikliv na tochkovij orbiti U cij statti opisano tehniku perevirki periodu Vi mozhete znajti inshe poyasnennya tut 27 kvitnya 2021 u Wayback Machine Deyaki algoritmi viyavlennya ciklu povinni buti realizovani dlya realizaciyi ciyeyi tehniki PrimitkiJoux Antoine 2009 CRC Press s 223 ISBN 9781420070033 arhiv originalu za 2 serpnya 2021 procitovano 16 serpnya 2021 Joux 2009 Donald Knut Seminumerical Algorithms The Art of Computer Programming 3rd Massachusetts Addison Wesley 1997 T 2 762 s ISBN 0 201 89684 2 angl Handbook of Applied Cryptography by Alfred J Menezes Paul C van Oorschot Scott A Vanstone p 125 2 serpnya 2021 u Wayback Machine describes this algorithm and others Flojd Robert 1967 Nondeterministic Algorithms J ACM 14 4 636 644 doi 10 1145 321420 321422 The Hash Function BLAKE by Jean Philippe Aumasson Willi Meier Raphael C W Phan Luca Henzen 2015 p 21 17 serpnya 2021 u Wayback Machine footnote 8 Joux 2009 Section 7 1 1 Floyd s cycle finding algorithm pp 225 226 en 1980 PDF BIT Numerical Mathematics 20 2 176 184 doi 10 1007 BF01933190 arhiv originalu PDF za 24 veresnya 2009 procitovano 16 serpnya 2021 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Citation title Shablon Citation citation a Perevirte znachennya last dovidka Joux 2009 Section 7 1 2 Brent s cycle finding algorithm pp 226 227 Arhiv originalu za 14 kvitnya 2016 Procitovano 8 lyutogo 2017 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Arhiv originalu za 15 veresnya 2020 Procitovano 16 serpnya 2021 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Nivasch Gabriel 2004 Cycle detection using a stack Information Processing Letters 90 3 135 140 doi 10 1016 j ipl 2004 01 016 1984 A Monte Carlo factoring algorithm with linear storage Mathematics of Computation 43 167 289 311 doi 10 2307 2007414 JSTOR 2007414 Teske Edlyn 1998 A space efficient algorithm for group structure computation Mathematics of Computation 67 224 1637 1663 Bibcode 1998MaCom 67 1637T doi 10 1090 S0025 5718 98 00968 5 Szymanski Thomas G 1982 The complexity of finding cycles in periodic functions SIAM Journal on Computing 11 2 376 390 doi 10 1137 0211030 van Oorschot Paul C Wiener Michael J 1999 Journal of Cryptology 12 1 1 28 doi 10 1007 PL00003816 arhiv originalu za 16 serpnya 2021 procitovano 16 serpnya 2021 Quisquater J J Delescaille J P How easy is collision search Application to DES Advances in Cryptology EUROCRYPT 89 Workshop on the Theory and Application of Cryptographic Techniques Lecture Notes in Computer Science t 434 Springer Verlag s 429 434 doi 10 1007 3 540 46885 4 43 1981 Lower bounds for the cycle detection problem Proc 13th ACM Symposium on Theory of Computing s 96 105 doi 10 1145 800076 802462 1985 Improved lower bounds for the cycle detection problem Theoretical Computer Science journal Theoretical Computer Science 36 2 3 231 237 doi 10 1016 0304 3975 85 90044 1 Pollard J M 1975 A Monte Carlo method for factorization BIT 15 3 331 334 doi 10 1007 BF01933667 Pollard J M 1978 Monte Carlo methods for index computation mod p Mathematics of Computation American Mathematical Society 32 143 918 924 doi 10 2307 2006496 JSTOR 2006496 Kaliski Burton S Jr Rivest Ronald L Sherman Alan T 1988 Is the Data Encryption Standard a group Results of cycling experiments on DES Journal of Cryptology 1 1 3 36 doi 10 1007 BF00206323 Joux 2009 Section 7 5 Collisions in hash functions pp 242 245 Van Gelder Allen 1987 Efficient loop detection in Prolog using the tortoise and hare technique Journal of Logic Programming 4 1 23 31 doi 10 1016 0743 1066 87 90020 3 Auguston Mikhail Hon Miu Har 1997 Assertions for Dynamic Shape Analysis of List Data Structures Linkoping Electronic Articles in Computer and Information Science Linkoping University s 37 42 arhiv originalu za 16 serpnya 2021 procitovano 16 serpnya 2021 PosilannyaGabriel Nivash Problema viyavlennya ciklu ta algoritm steka 16 serpnya 2021 u Wayback Machine Cherepaha i zayec 8 chervnya 2021 u Wayback Machine Portlendske shovishe vizerunkiv