[EP15] Dijkstra e unit test

[EP15] Dijkstra e unit test

por Vitor Guidi -
Número de respostas: 6

Algumas divagações:

1) O site do EP na cos226 pede que usemos o algoritmo de dijkstra. Isso é obrigatório ou podemos explorar outras alternativas mais eficientes?

2) O unit test é necessário nesse EP?

Em resposta à Vitor Guidi

Re: [EP15] Dijkstra e unit test

por José Coelho de Pina -

Olá Victor e Raphael,

Desculpem pela demora...

O site do EP na cos226 pede que usemos o algoritmo de dijkstra. Isso é obrigatório

Após muito meditar ... acho que devemos fazer como pede o enunciado: encontrar caminho de menor energia usando o algoritmo de Dijkstra e a estrutura IndexMinPQ. Suponho que a ideia seja desenvolver uma melhor compreensão do algoritmo de Dijkstra.

Ainda, como diz o checklist, não usem a estrutura EdgeWeightedDigraph.
Executem o algoritmo diretamente nos pixels (o digrafo fica implícito).

Migrei de uma implementação (sem Dijkstra) para a outra (com Dijkstra) muito rapidamente.

Em resposta à José Coelho de Pina

Re: [EP15] Dijkstra e unit test

por Alessandro Bezerra da Silva -

Se for pra usar IndexMinPQ da algs4, então temos que considerar na nossa implementação necessariamente uma função de Z² -> Z que leva o endereço do pixel (i, j) num outro inteiro, certo?

Em resposta à Alessandro Bezerra da Silva

Re: [EP15] Dijkstra e unit test

por José Coelho de Pina -

Oi Alessandro,

Se for pra usar IndexMinPQ da algs4, então temos que considerar na nossa implementação necessariamente uma função de Z² -> Z que leva o endereço do pixel (i, j) num outro inteiro, certo?

Legal! 
Eu fiz exatamente isso, mas talvez alguém tenha outra ideia.
Teve algo parecido no percolation.

Em resposta à José Coelho de Pina

Re: [EP15] Dijkstra e unit test

por Alessandro Bezerra da Silva -

Certo

Mudando de assunto, queria tocar num ponto que está me incomodando um pouco, é em relação ao tempo de execução. No exemplo de execução que está na página do EP15, o código rodou em uns 10 segundos. Aqui em casa, depois de otimizar o máximo que consegui, cheguei em uns 60 segundos.

Penso que essa diferença se deve a capacidade de processamento do hardware, uma vez li em algum lugar que o seu processador é um core 2 quad blablabla, enquanto o meu processador é um mobile dual core da década passada.

Só que ainda estou com a pulga atrás da orelha, será que a diferença no tempo de execução se deve só ao hardware ou existe algum macete pra otimizar ainda mais o código?

Em resposta à Alessandro Bezerra da Silva

Re: [EP15] Dijkstra e unit test

por José Coelho de Pina -

Ois,

será que a diferença no tempo de execução se deve só ao hardware ou existe algum macete pra otimizar ainda mais o código?

Legal você ter levantado essa questão.

No computador que estou agora tenho duas versões do EP15.
Um delas da os tempos que estão no enunciado e que usa o algoritmo de busca em caminho mínimo em um digrafo acíclico (examina os pixels em ordem topológica). Neste computador com esse algoritmo obtenho:

    % java ResizeDemo seamCarving/HJocean.png 200 100
    768-by-432 image
    new image size is 568 columns by 332 rows
    Resizing time: 13.921 seconds.

Já, usando o algoritmo de Dijkstra, como você devem fazer.
Dijkstra não tira proveito do digrafo dos pixels ser acíclico.
Os pixels são examinados na ordem de distâncias a partir da borda.
Usando esse algoritmo obtenho: 

    % java ResizeDemo seamCarving/HJocean.png 200 100 
    768-by-432 image
    new image size is 568 columns by 332 rows
    Resizing time: 36.469 seconds. 

Em ambas implementações o digrafo é implícito, como sugere o checklist.

Acho que tudo ajuda.
O algoritmo e o hardware.

O computador que estou usando:

    % more /proc/meminfo 
    MemTotal:        4008052 kB
    [...]

    % more /proc/cpuinfo
    model name	: AMD FX(tm)-4300 Quad-Core Processor
    cpu MHz		: 1400.000
    cache size	: 2048 KB