|
TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
|
Na procura em largura primeiro, utiliza-se os sucessores na sua melhor versão analisada no exercício anterior, isto é, não são gerados estados em que um dos grupos tem mais de metade do total dos números.
| Geração | Estado | Nível | Pai | Expansão |
| 1 |
(5;4;3;2;2) 0 = 0 |
5 |
0 | 1 |
| 2 |
(4;3;2;2) 5 = 0 |
4 |
1 | 2 |
| 3 |
(4;3;2;2) 0 = 5 |
4 |
1 |
3 |
| 4 |
(3;2;2) 5 = 4 |
3 |
2 | 4 |
| 5 |
(3;2;2) 4 = 5 |
3 |
3 | 5 |
| 6 |
(2;2) 8 = 4 |
2 |
4 | 6 |
| 7 |
(2;2) 5 = 7 |
2 |
4 | 7 |
| 8 |
(2;2) 7 = 5 |
2 |
5 | 8 |
| 9 |
(2;2) 4 = 8 |
2 |
5 | 9 |
| 10 |
(2) 8 = 6 |
1 |
6 | 10 |
| 11 |
(2) 7 = 7 |
1 |
7 | |
| 12 |
(2) 7 = 7 |
1 |
8 | |
| 13 |
(2) 6 = 8 |
1 |
9 | |
| 14 Soluçao! |
8 = 8 |
0 |
10 |
Ficheiro de Excel, passo a passo:
A procura levou 14 gerações e 10 expansões. No entanto é nítido mais algum desperdício, alguns estados são analisados em duplicado. Os estados 2 e 3 são simétricos, já que são indiferentes um ou outro grupo, tal como os estados 4 e 5, entre outros. Já os estados 11 e 12 são exatamente iguais, muito embora possam ter associados números distintos num e noutro conjunto.
Pode-se ainda melhorar o gerador de sucessores, gerando estados que nunca tenham sido gerados. De forma a garantir que estados idênticos excepto na ordem dos grupos não são considerados distintos, pode-se ordenar o estado, colocando sempre o grupo com um número maior primeiro. Para verificar que o estado já foi gerado, tem de se ter uma hashtable de forma a poder fazer este teste em tempo constante.
| Geração | Estado | Nível | Pai | Expansão |
| 1 | (5;4;3;2;2) 0 = 0 | 5 | 0 | 1 |
| 2 | (4;3;2;2) 5 = 0 | 4 | 1 | 2 |
| 3 | (3;2;2) 5 = 4 | 3 | 2 | 3 |
| 4 | (2;2) 8 = 4 | 2 | 3 | 4 |
| 5 | (2;2) 7 = 5 | 2 | 3 | 5 |
| 6 | (2) 8 = 6 | 1 | 4 | 6 |
| 7 | (2) 7 = 7 | 1 | 5 | |
| 8 Solução! | 8 = 8 | 0 | 6 |