Considere o seguinte problema:
Seja definido um wheel como uma lista indexada circularmente indexada de inteiros. Por exemplo…
{3, 4, 9, -1, 6}
… É um 5 rodas com 3 na posição 0, 4 na posição 1 e assim por diante. Uma roda suporta a operação de rotação, de modo que uma rotação em uma etapa transforma a roda acima em…
{6, 3, 4, 9, -1}
… Agora com 6 na posição 0, 3 na posição 1 e assim por diante. Seja um conjunto ordenado de N rodas k distintas . Dado algum W_ {N_k} e algum inteiro t , encontre uma série de rotações tais que…
Em outras palavras, se você dispor as rodas como uma matriz, a soma de cada coluna será . Suponha que seja construído para que a solução seja única até as rotações de cada elemento (ou seja, existem exatamente soluções únicas que consistem em tomar uma solução e girar cada roda em pelo mesmo número de etapas).
A solução trivial para esse problema envolve simplesmente verificar todas as rotações possíveis. Aqui está um pseudocódigo para isso:
function solve(wheels, index)
if wheels are solved:
return true
if index >= wheels.num_wheels:
return false
for each position 1..k:
if solve(index + 1) is true:
return true
else:
rotate wheels[index] by 1
solve(wheels, 0)
Esta é uma solução bastante lenta (algo como ). Gostaria de saber se é possível resolver esse problema mais rapidamente e também se existe um nome para ele.