Generating bracelets in constant amortized time
A bracelet is the lexicographically smallest element in an equivalence class of strings under string rotation and reversal. We present a fast, simple, recursive algorithm for generating (i.e., listing) k-ary bracelets. Using simple bounding techniques, we prove that the algorithm is optimal in the sense that the running time is proportional to the number of bracelets produced. This is an improvement by a factor of n ( where n is the length of the bracelets being generated) over the fastest, previously known algorithm to generate bracelets.
generate bracelet necklace cat algorithm forbidden substring