TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
Loading...
Searching...
No Matches
✏️ Partição, largura primeiro

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.


⚡ Ação: Aplique este algoritmo para este problema, com esta regra, de apenas gerar os estados que ainda não estiverem sido gerados, e ordenando os grupos por total somado. 
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 6
7 (2) 7 = 7 1 5  
8 Solução! 8 = 8 0 6  

◀ Passo anterior Próximo passo ▶