NISHIO Hirokazu[English][日本語]

loop detection

  • Given $f(x)$, I want to find $f^n(x)$ fast
    • The domain and value range of f are common finite sets
    • The starting point x is a single
    • If the size of the definition region is D and the maximum value of n is N, then the pre-processing O(D) can be made into the main process O(1)
  • pretreatment
    • Prepare two arrays A and B
    • $A: f^i(x) \to i$
    • $B: i \to f^i(x)$
    • Fill this array by incrementing i
    • If Ai is not the initial value, it is a loop
    • Can be determined by constant order.
    • Worst case scenario, a loop is found by D
  • main processing
    • i, Ai to the loop and the length of the path and the length of the loop until it enters the loop.
      • loop_start = Ai
      • loop_length = i - Ai
    • Constant Order $f^n(x) = (n - A_i) % (i - A_i)$

This page is auto-translated from /nishio/ループ検出 using DeepL. If you looks something interesting but the auto-translated English is not good enough to understand it, feel free to let me know at @nishio_en. I'm very happy to spread my thought to non-Japanese readers.


(C)NISHIO Hirokazu / Converted from Markdown (en)
Source: [GitHub] / [Scrapbox]