Resolução comentada do problema "Desordens" Prof. Adolfo Neto Departamento Acadêmico de Informática Universidade Tecnológica Federal do Paraná

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Busque o menor elemento no vetor Troque sua posição com o primeiro Repita a operação a partir do segundo elemento, até que reste apenas um elemento a ser.
Prof. Luis Otavio Alvares
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Fundamentos de Programação 1 Linguagem C Slides 03 – ‘Vetores’ Prof. SIMÃO Jean Marcelo SIMÃO Estrutura de Dados Homogêneas “Vetores” 1.
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ Campus Londrina CINEMÁTICA 1. MEDIDAS A: CINEMÁTICA UNIDIMENSIONAL B:
Linguagem de Programação – Aula 03 Prof. Me. Ronnison Reges Vidal.
Respostas dos Exercícios. Lista 1 1.a) Escreva uma função que receba como parâmetro uma temperatura dada em graus Fahrenheit e retorna a temperatura.
Cinemática Escalar. 1. O movimento de um carro, que se move com velocidade constante, é descrito pela seguinte tabela t (h) S (km)
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Variáveis e Atribuições.
Supervisão e Redes Industriais Tutorial E3 Elipse Capítulo 14 ARMAZENAMENTO DE DADOS Felipe Domeni, Gabriel Martin, Leandro Gomes Rafael Benoliel, Tiago.
Introdução à Computação para Engenharia MAC2166
Casamento de Padrão Aproximado e Compressão de Huffaman
INF1007: Programação 2 8 – Listas Encadeadas
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
Análise de Estruturas.
Algoritmos e Estruturas de Dados I
Vetores e Matrizes em C/C++
Algoritmo e Estrutura de Dados I
INF1007: Programação 2 2 – Alocação Dinâmica
Fundamentos de Programação 1
Profa. Mercedes Gonzales Márquez
Introdução à Computação para Engenharia MAC2166
Estruturas de Repetição
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Algoritmos e Estruturas de Dados I
Métodos de Pesquisa e Ordenação
Prof. Wellington Franco
INF1007: Programação 2 6 – Ordenação de Vetores
FUNDAMENTO DE PROGRAMAÇÃO
Estrutura de dados Pilhas e filas
Fundamentos de Programação 1
Prof. Wellington Franco
Departamento de Informática Universidade Federal do Espírito Santo
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
Introdução à Programação BCC 201 Aula
FUNDAMENTO DE PROGRAMAÇÃO
CONCEITO DE VARIÁVEIS ESTÁTICAS
Métodos de Pesquisa e Ordenação
Introdução à Programação BCC 201 Aula
Árvores.
Programação de Computadores I – Arquivos
Prof. Wellington Franco
Algoritmos e Estruturas de Dados I
FUNDAMENTO DE PROGRAMAÇÃO
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Algoritmos e Programação I
Listas Encadeadas.
Professor : Neilton Satel
Algoritmos Prof.: Carlos Alberto _1:
Aula 22 Modularização 22/10/08.
Particle Swarm Optimization (PSO)
Complexidade de Algoritmos
MODELANDO SISTEMAS LTI NO DOMÍNIO DA FREQUÊNCIA.
Programação de Computadores I – Arquivos
Instalação e Manutenção de Computadores Técnico em Informática MAI1
Observe as seqüências numéricas:
Múltiplos e divisores.
Título do Projeto Projeto Integrador 2018/02
Computação Eletrônica Vetores e Matrizes
MODELANDO SISTEMAS LTI NO DOMÍNIO DA FREQUÊNCIA.
Estruturas de Dados em C
Geometria Computacional
Prof. Rafael Mesquita Listas Encadeadas Prof. Rafael Mesquita
METODOLOGIA DA PESQUISA CIENTÍFICA Prof. Otávio Lima
Aula 7 Professores: Conteúdo: Dante Corbucci Filho
Aula de R Introdutória.
Transcrição da apresentação:

Resolução comentada do problema "Desordens" Prof. Adolfo Neto Departamento Acadêmico de Informática Universidade Tecnológica Federal do Paraná Agosto de 2008

Índice Apresentação do problema Idéia do algoritmo Refinamentos sucessivos Programa em C padrão ANSI Referências

Apresentação do Problema Problema obtido no sítio da Olimpíada Brasileira de Informática:

Apresentação do Problema O problema está na seção ”Modalidade Iniciação”, subseção ”Modalidade Iniciação Nível 1”. É um exemplo de tarefa de computação considerada de nível médio.

Apresentação do Problema Uma permutação dos números de 1 a N é uma seqüência de números a1, a2,... aN na qual cada um dos números de 1 a N aparece exatamente uma vez. Uma desordem de uma permutação é uma nova permutação que se obtém ao realizar um conjunto de intercâmbios de pares de números na permutação origem de tal forma que cada número seja intercambiado no máximo uma vez.a intercambiando 5 com 4.

Apresentação do Problema 1. Tarefa Sua tarefa é determinar a menor quantidade de desordens necessárias para transformar a permutação 1, 2,... N em uma outra permutação dada (chamada de permutação objetivo). Por exemplo, com N=5, para obter-se a permutação 3, 4, 1, 5, 2 são necessárias duas desordens: a primeira intercambiando 1 com 3, e 2 com 5; a segunda intercambiando 5 com 4.

Apresentação do Problema 2. Dados Cada conjunto de teste que você receberá é composto por duas linhas. A primeira linha contém um inteiro positivo, N, que indica a quantidade de números da permutação. A segunda linha contém a permutação objetivo, composta de N inteiros positivos, separados por espaço em branco.

Apresentação do Problema Exemplo de Dados

Apresentação do Problema 3. Resposta Para cada conjunto de teste você deve produzir duas linhas na resposta. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n é numerado a partir de 1. A segunda linha deve conter o número de desordens necessá para se atingir a permutação objetivo.

Apresentação do Problema Exemplo de Resposta Teste 1 2 Teste 2 1 (esta resposta corresponde ao exemplo de dados acima)

Apresentação do Problema 4. Restrições 1 <= N <= Conjuntos de Testes Clique aquiClique aqui para acessar os conjuntos de testes. 6. Gabarito Clique aquiClique aqui para acessar o gabarito utilizado na correção

Idéia do algoritmo Para cada conjunto de teste há: Uma permutação inicial: 1, 2, 3,..., N Uma permutação objetivo que é recebida como entrada É simples observar que: Cada permutação será armazenada num vetor O vetor que armazenar a permutação inicial também armazenará as permutações resultantes das desordens

Idéia do algoritmo Esboço do programa Enquanto ! (atual == objetivo) faz_desordem(atual,objetivo) desordens++ Precisamos ter: Uma função que verifica se dois vetores são iguais (!= não funciona com vetores) Uma função que faz uma desordem num vetor

Refinamentos sucessivos Ref. atual == objetivo int iguais (int vetor1[], int vetor2[], int tam){ int result=1; int i; for (i=0; i<tam; i++) if (vetor1[i]!=vetor2[i]) return 0; }

Refinamentos Sucessivos Ref. faz_desordem(atual,objetivo) Usar um vetor de modificados para registrar os valores do vetor atual que já foram trocados nesta desordem

Refinamentos Sucessivos Ref. faz_desordem(atual,objetivo) - cont. Vai olhando um por um do vetor objetivo. Se na posição i do vetor atual: atual[i] != objetivo[i] atual[i] não foi trocado ainda nesta desordem Então Troca o atual[i] com atual[posição de objetivo[i] em atual] Marca que as posições i e ”posição de objetivo[i] em atual” foram trocadas

Refinamentos Sucessivos faz_desordem (int vetor1[], int vetor2[], int tam){ int i, aux, pos, modificado[MAX]; for (i=0;i<tam;i++) modificado[i]=0; for (i=0; i<tam; i++){ aux = vetor2[i]; pos=posicao_de_em(vetor2[i],vetor1,tam); if (!modificado[i] && !modificado[pos] && vetor1[i]!=vetor2[i]){ vetor1[pos]=vetor1[i]; vetor1[i]=aux; modificado[i]=1; modificado[pos]=1; }}}

Programa em C #includes Protótipos de funções Função main() Implementação das funções

Programa em C Função main(): leitura dos dados inicia(atual,N); while (!iguais(atual, objetivo, N)){ faz_desordem(atual, objetivo, N); desordens++; } printf("Teste %d\n",++contador); printf("%d\n",desordens);

Programa em C inicia(int vetor[], int tam){ int i; for(i=0; i<tam;i++){ vetor[i]=i+1; }

Programa em C int posicao_de_em(int valor, int vetor[], int tam){ int i; for (i=0; i<tam; i++) if (valor == vetor[i]) return i; return -1; }

Programa em C Como receber vários conjuntos de teste? Por exemplo:

Programa em C Como receber vários conjuntos de teste? while(scanf("%d",&N)==1){ leitura da permutação objetivo todo o resto descrito anteriormente como conteúdo da função main() } Supõe-se que a entrada esteja correta exceto pelo valor de N: deve-se verificar se está no intervalo [1,10000]

Referências Site da Olimpíada Brasileira de Informática: