Pollard's kangaroo algorithm
In computational number theory and computational algebra, Pollard's kangaroo algorithm (also Pollard's lambda algorithm, see Naming below) is an algorithm for solving the discrete logarithm problem. The algorithm was introduced in 1978 by the number theorist John M. Pollard, in the same paper as his better-known Pollard's rho algorithm for solving the same problem. Although Pollard described the application of his algorithm to the discrete logarithm problem in the multiplicative group of units modulo a prime p, it is in fact a generic discrete logarithm algorithm—it will work in any finite cyclic group. Algorithm
Suppose  is a finite cyclic group of order  which is generated by the element , and we seek to find the discrete logarithm  of the element  to the base . In other words, one seeks  such that . The lambda algorithm allows one to search for  in some interval . One may search the entire range of possible logarithms by setting  and . 1. Choose a set  of positive integers of mean roughly  and define a pseudorandom map . 2. Choose an integer  and compute a sequence of group elements  according to:
 
 
3. Compute

Observe that:

4. Begin computing a second sequence of group elements  according to:
 
 
and a corresponding sequence of integers  according to:
. Observe that:

5. Stop computing terms of  and  when either of the following conditions are met:

A)  for some . If the sequences  and  "collide" in this manner, then we have:

and so we are done. B) . If this occurs, then the algorithm has failed to find . Subsequent attempts can be made by changing the choice of  and/or . Complexity
Pollard gives the time complexity of the algorithm as , using a probabilistic argument based on the assumption that  acts pseudorandomly. Since  can be represented using  bits, this is exponential in the problem size (though still a significant improvement over the trivial brute-force algorithm that takes time ). For an example of a subexponential time discrete logarithm algorithm, see the index calculus algorithm. Naming
The algorithm is well known by two names. The first is "Pollard's kangaroo algorithm". This name is a reference to an analogy used in the paper presenting the algorithm, where the algorithm is explained in terms of using a tame kangaroo to trap a wild kangaroo. Pollard has explained that this analogy was inspired by a "fascinating" article published in the same issue of Scientific American as an exposition of the RSA public key cryptosystem. The article described an experiment in which a kangaroo's "energetic cost of locomotion, measured in terms of oxygen consumption at various speeds, was determined by placing kangaroos on a treadmill". The second is "Pollard's lambda algorithm". Much like the name of another of Pollard's discrete logarithm algorithms, Pollard's rho algorithm, this name refers to the similarity between a visualisation of the algorithm and the Greek letter lambda (). The shorter stroke of the letter lambda corresponds to the sequence , since it starts from the position b to the right of x. Accordingly, the longer stroke corresponds to the sequence , which "collides with" the first sequence (just like the strokes of a lambda intersect) and then follows it subsequently. Pollard has expressed a preference for the name "kangaroo algorithm", as this avoids confusion with some parallel versions of his rho algorithm, which have also been called "lambda algorithms". See also
 Dynkin's card trick
 Kruskal count
 Rainbow table

References

Further reading
 

Number theoretic algorithms
Computer algebra
Logarithms