Aplicação do Algoritmo de Dijkstra - Matching 3ª reunião do Grupo de Estudos – UP&D Fernando Sales e Danilo Lage 22 de fev de 2008 Enunciado do Problema Idéias Iniciais Curva 1 Curva 2 1 1 2 2 3 4 5 3 6 7 8 4 9 10 11 12 • Condições do problema: – n(1) < n(2); • Obs: – n(1) = n(2): trivial; – n(1) > n(2): raciocínio análogo ao caso n(1) < n(2), basta “inverter” as curvas; – Ligações não podem se cruzar; Construção do Grafo 0 0 1 1 2 1 3 1 4 1 1 2 2 2 3 2 4 2 1 3 2 3 3 3 4 3 2 12 : Nó Inicial 3 12 i j Ex: Seja i =1. Então, temos: j(max) = 09 [12 – 4+1]. ... ... 0 0 ... ... 1 12 • Condições de Contorno: – Ramos: j prox jant 4 12 i: Curva 1 j: Curva 2 =|k(i)-k(j)| – Nós: • 1 por coluna; Construção do Grafo Esboço: 1 Curva 2 2 3 4 5 6 7 8 9 10 11 12 Curva 1 1 2 3 4 i Custo do Ramo: i j =|k(i)-k(j)| j Matriz de Custos a11 a12 a13 a14 a22 a23 a33 a24 a34 a44 a19 a29 a210 a39 a310 a311 a49 a410 a411 a412 Para o i-ésimo elemento, temos o intervalo dos nós possíveis: [a,b] a: max {i, col(i-1) +1} b: min {n2 – n1 + i, col(i-1) +1} , se : i j ou j n2 n1 i aij k (i ) k ( j ) , c.c. i 1, n1 j 1, n2 Proposta 1. Dadas as curvas, cria-se a matriz de custos; 2. Constrói-se o grafo; 3. Inicia-se o algoritmo de Dijkstra, no entanto, a determinação dos ramos será feita através das restrições dadas no slide anterior; 4. O caminho fornecido deverá ser o ótimo, dadas as restrições; Conclusões • Abordagem válida para: n1 < n2; – Se n1 > n2: “trocar” as curvas; – Se n1 = n2: problema trivial; • Restrições devem ser inseridas/computadas no momento da seleção dos possíveis ramos; • Generalização do algoritmo: – Construção do grafo; – Cálculo dos custos; – Seleção dos vizinhos;