Fast Split Towers of Hanoi

Novamente, nossas soluções anteriores funcionam, mas estão longe de serem ótimas. Quando movemos as torres, usamos o algoritmo de 3 varas mesmo quando temos 4 varas. Obviamente, movimentos para a última vara são restritos pois ela contém a outra pilha, mas podemos sempre armazenar o menor disco no topo da outra pilha antes de mover nossa pilha.

Para isto, nós precisamos criar uma nova função hanoi_fast(height, src, free, full, dst) que move a pilha de src para dst usando free, mas armazenando o menor disco em full antes.

A função hanoi_fast(height, src, free, full, dst) não é recursiva. Ela move o primeiro disco e então chama a função regular hanoi().

Esta mudança melhora enormemente a eficiência, como você pode ver abaixo. Obviamente, este truque também pode ser usado para o algoritmo intercalado, levando, como esperado, a exatamente a mesma eficiência.

Quantidade de discosIntercaladaSlow SplitFast Split
5 pares 62 movimentos 88 movimentos 46 movimentos
6 pares 126 movimentos 183 movimentos 82 movimentos
7 pares 254 movimentos 374 movimentos 150 movimentos

Como uma conclusão, a maioria das pessoas se satisfaz com uma solução que funcione e rapidamente ignora possibilidades para melhorar a decomposição do problema. Você não deve fazer isto ;)