INSTITUTO VIANNA JÚNIOR FACULDADES INTEGRADAS VIANNA JÚNIOR ANÁLISE DA COMPLEXIDADE DE ALGORITMOS DE ORDENAÇÃO

Tamanho: px
Começar a partir da página:

Download "INSTITUTO VIANNA JÚNIOR FACULDADES INTEGRADAS VIANNA JÚNIOR ANÁLISE DA COMPLEXIDADE DE ALGORITMOS DE ORDENAÇÃO"

Transcrição

1 INSTITUTO VIANNA JÚNIOR FACULDADES INTEGRADAS VIANNA JÚNIOR ANÁLISE DA COMPLEXIDADE DE ALGORITMOS DE ORDENAÇÃO Lúcia Helena de Magalhães 1 Mônica de Lourdes Souza Batista 2 Teresinha Moreira Magalhães 3 Thiago José de Souza Batista 4 1. Introdução O problema da ordenação é fundamental na computação, e como nos métodos de pesquisa a eficiência da busca sempre é melhor quando trabalhamos com conjuntos ordenados. Para que os dados sejam mais facilmente manipulados, é necessário que estes utilizem algum critério de ordenação. Seria impossível achar o número de telefone de alguém se a lista telefônica estivesse desordenada. Ordenar significa rearranjar um conjunto de objetos em uma ordem ascendente ou descendente. O objetivo principal da ordenação é facilitar a recuperação posterior de itens do conjunto ordenado. Existem vários algoritmos que permitem a realização da ordenação dos dados. O objetivo deste artigo é estudar alguns destes algoritmos e analisar a complexidade dos mesmos. 1 Lúcia Helena de Magalhães, Mestre em Sistemas Computacionais Computação de Auto-Desempenho pela Universidade Federal do Rio de Janeiro, Pós Graduada em Desenvolvimento de Aplicações para Web pelo Centro de Ensino Superior, Pós Graduada em Matemática e Estatística pela Universidade Federal de Lavras e Professora do Curso de Sistemas de Informação da Faculdade de Ciências Gerenciais de Santos Dumont, professora da Faculdade do Sudeste Mineiro e professora do Curso de Desenvolvimento Web das Faculdades Integradas do Instituto Vianna Júnior. lmagalhaes@viannajr.edu.br 2 Mônica de Lourdes Souza Batista, Mestranda em Computação Visual pela Universidade Federal Fluminense, Bacharel em Sistemas de Informação pela Faculdade Metodista Granbery. Programadora responsável pela Internet do Instituto Vianna Júnior. monicasouzabatista@gmail.com 3 Teresinha Moreira de Magalhães, Doutoranda em Sistemas Computacionais Computação de Auto- Desempenho pela Universidade Federal do Rio de Janeiro, Mestre em Engenharia de Produção pela Universidade Federal de Santa Catarina, Pós Graduada em Redes de Computadores pelo Centro de Ensino Superior de Juiz de Fora e Pós Graduada em Matemática e Estatística pela Universidade Federal de Lavras. Professora do Curso de Desenvolvimento Web das Faculdades Integradas Vianna Júnior, coordenadora do Ensino a distância e departamento de Informática da FIVJ. tmagalhaes@viannajr.edu.br 4 Thiago José de Souza Batista, Bacharelando em Sistemas de Informação pela Faculdade Metodista Granbery. shogumjf@gmail.com

2 Este trabalho é subdividido em introdução, desenvolvimento com as sessões de 2 a 5 e a conclusão. Na seção 2 é apresentado o BubleSort; na seção 3, o SelectSort; na seção 4, o MergeSort; e na seção 5 é mostrado o QuickSort. Por fim, são destacadas as considerações finais do trabalho e as referências bibliográficas utilizadas. Para cada algoritmo foi realizado um estudo da complexidade do mesmo. 2. BubleSort O BubleSort é um método de ordenação por troca. Ele é o mais simples, embora não muito eficaz. O princípio deste método consiste em varrer a lista várias vezes e trocar cada elemento corrente (posição i) com o posterior (posição i + 1), caso Ci > C i + 1, onde C e Ci+1 são respectivamente as chaves dos registros (DROZDEK, 2002). O melhor caso ocorre quando todos os elementos do vetor já estão ordenados. O pior caso acontece quando o vetor se encontra inversamente ordenado. Para qualquer caso a complexidade é O(n 2 ) (KNUTH, 1998). O Programa 1 mostra o código fonte do BubleSort. Algoritmo escrito na Linguagem C. #include <stdio.h> #include <stdlib.h> #include <conio.h> #include<iostream> using namespace std; #define TAMANHO_DO_ARRAY 5 int i, j, aux, pass; bool trocou; int v[tamanho_do_array]; main() printf("informe no maximo %d numeros\n", TAMANHO_DO_ARRAY); for (i = 0; i < TAMANHO_DO_ARRAY; i++) printf("informe um numero inteiro positivo para a %d posicao: ", i+1); scanf("%d",&v[i]); for (pass = 0; pass < TAMANHO_DO_ARRAY - 1; pass++) trocou = false; for (j = 0; j < TAMANHO_DO_ARRAY - (pass + 1) ; j++) if (v[j] > v[j+1]) aux = v[j]; v[j] = v[j+1]; v[j+1] = aux;

3 trocou = true; printf("os numeros ordenados sao: "); printf("\n"); for (i = 0; i < TAMANHO_DO_ARRAY; i++) printf("%d\n",v[i]); getch(); Programa 1: Código fonte do BubleSort 3. SelectSort O princípio básico do SelectSort consiste em se escolher o menor valor da chave de um vetor e trocar este com o primeiro registro da sequência. O processo é repetido trocando-se o menor valor da chave dos n-1 registros (desconta-se o primeiro) com o segundo registro, troca-se o menor valor da chave dos n-2 registro (desconta-se o primeiro e o segundo registros) com o terceiro registro e assim sucessivamente. O código do SelectSort é descrito abaixo (ZIVIANI, 1999). O Programa 2 ilustra o código fonte do SelectSort. #include <stdio.h> #include <stdlib.h> #include <conio.h> #include<iostream> using namespace std; #define TAMANHO_DO_ARRAY 5 int i, j, aux, minimo; int v[tamanho_do_array]; main() printf("informe no maximo %d numeros\n", TAMANHO_DO_ARRAY); //o usuario entra com os dados for (i = 0; i < TAMANHO_DO_ARRAY; i++) printf("informe um numero inteiro positivo para a %d posicao: ", i + 1); scanf("%d",&v[i]); //fim o usuario entra com os dados //select sort for (i = 0; i < TAMANHO_DO_ARRAY - 1; i++) minimo = i; for (j = i + 1; j < TAMANHO_DO_ARRAY ; j++) if (v[j] < v[minimo])

4 minimo = j; aux = v[minimo]; v[minimo] = v[i]; v[i] = aux; //fim select sort printf("os numeros ordenados sao: \n"); for (i = 0; i < TAMANHO_DO_ARRAY; i++) printf("%d\n",v[i]); getch(); Programa 2: Código fonte do SelectSort A análise da complexidade deste algoritmo é a seguinte: 1ª iteração: compara o 1º elemento com os n-1 demais: n-1 comparações. 2ª iteração: compara o 2º elemento com os n-2 demais: n-2 comparações. 3ª iteração: compara o 3º elemento com os n-3 demais: n-3 comparações. Número total de comparações C(n): (n-1) + (n-2) = (n2 - n)/2 = O(n2) Portanto, a complexidade desse algoritmo no pior caso, no caso médio e no melhor caso é a mesma: O(n²). 4. MergeSort O algoritmo MergeSort consiste em sortear n listas de tamanho 1. Estas listas são intercaladas, utilizando-se o procedimento Merge, em n/2 pares de listas, cada qual com tamanho 2 (se n é impar, então existirá uma lista com tamanho 1). Estas n/2 listas são intercaladas por pares gerando-se no final, como resultado, uma lista. De forma recursiva a lista é dividida em n/4 listas são intercaladas por pares gerando-se no final, como resultado, uma nova lista e assim por diante até se ter somente uma lista que está ordenada (KNUTH, 1998). O processo chave no MergeSort é fundir metades ordenadas de uma lista em uma lista ordenada. No entanto, essas metades precisam ser ordenadas primeiro, o que é realizado fundindo as metades já ordenadas dessas metades. Esse processo de dividir listas em duas metades pára quando a lista tem menos de dois elementos (DROZDEK, 2002). O algoritmo do MergeSort é ilustrado no seguinte código: #include <stdio.h> #include <stdlib.h>

5 #include <conio.h> #define TAMANHO_DO_ARRAY 5 int i, j, meio, k, inicio, fim; int a[tamanho_do_array]; int b[tamanho_do_array]; int mergesort(int e, int d); int merge(int e, int m, int d); int mergesort(int e, int d) if (e < d) meio = (e + d)/2; mergesort(e, meio); mergesort(meio + 1, d); merge(e, meio, d); int merge(int e, int m, int d) i = e; j = m + 1; k = e; while ((i<=m) && (j<=d)) if (a[i] < a[j]) b[k] = a[i]; k++; i++; else b[k] = a[j]; k++; j++; while (i <= m) b[k] = a[i]; k++; i++; while (j <= d) b[k] = a[j]; k++; j++; for (i = 0; i <= d; i++) a[i] = b[i];

6 int main(int argc, char *argv[]) printf("informe no maximo %d numeros\n", TAMANHO_DO_ARRAY); inicio = 0; fim = TAMANHO_DO_ARRAY - 1 ; //o usuario entra com os dados for (i = 0; i <= fim; i++) printf("informe um numero inteiro positivo para a %d posicao: ", i + 1); scanf("%d",&a[i]); //fim o usuario entra com os dados mergesort(inicio, fim); printf("os numeros ordenados sao: \n"); for (i = 0; i <= fim; i++) printf("%d\n", a[i]); getch(); Programa 3: Código fonte do MergeSort Segundo Drozdek (2002), o pior caso é quando o último elemento de uma metade precede somente o último elemento da outra metade, como por exemplo, [1,6,10,12] e [5,9,11,13]. Para uma lista de n elementos, o número de movimentos é calculado pela seguinte relação de recorrência: M(1) = 0 M(n) = 2M(n/2) + 2n M(n) pode ser calculado do seguinte modo: M(n) = 2(2M(n/4) + 2(2/n)) + 2n = 4M(n/4) + 4n = 4(2M(n/8) + 2(n/4) + 4n) = 8M(n/8) + 6n... = 2iM(n/2i) + 2in Escolher i = logn, de modo que n = 2i permite inferir que: M(n) = 2iM(n/2i) + 2in = nm(1) + 2nlogn = 2nlogn = O(nlogn). O número de comparações, no pior caso, é dado por uma relação similar:

7 C(1) = 0 C(n) = 2C(n/2) + n-1 Que também resulta em C(n), sendo O(nlogn). 5. QuickSort Este método é o mais eficaz de ordenação baseado em troca. O conceito básico deste algoritmo consiste em se dividir o conjunto original em dois subconjuntos separados por um elemento escolhido arbitrariamente, denominado de pivô. Para cada partição, escolhe-se o primeiro elemento da lista esquerda cuja chave seja maior que a chave do pivô, e escolhe-se o primeiro elemento da lista direita cuja chave seja menor que a chave do pivô. Os dois elementos são trocados. Este processo é repetido enquanto existir registros para serem trocados. Os subconjuntos são ordenados separadamente utilizando de forma recursiva o mesmo procedimento descrito anteriormente. Isto é, para cada subconjunto, escolhe-se arbitrariamente um elemento e, em seguida, ordena-se os dois conjuntos separadamente (ZIVIANI, 1999). O custo para percorrer o vetor comparando-se cada elemento com o pivô, é linear, ou seja, O(n). 5.1 Análise da escolha do pivô QuickSort ou Ordenação Rápida, é um método eficaz de ordenação baseado em troca. Para se resolver o problema da ordenação, a lista original é dividida em duas sublistas. A primeira contém elementos menores ou iguais a uma chave escolhida chamada de limite ou pivô. A segunda lista inclui elementos iguais ou menores que o pivô (ZIVIANI, 1999). As duas sublistas são ordenadas separadamente, mas, antes que isso seja feito, o processo de partição é repetido para ambas as sublistas. Como resultado, dois novos pivôs são escolhidos, um para cada sublista. Este processo de particionar é realizado até que haja somente listas de uma célula que precisem ser ordenadas. Dividir a tarefa de ordenar uma grande lista em duas tarefas mais simples e então dividir essas tarefas em tarefas ainda mais simples resulta em dados já ordenados, no processo de se preparar para ordenar (ZIVIANI, 1999). Para particionar uma lista, duas operações tem que ser realizadas: um pivô deve ser encontrado e a lista precisa ser varrida para colocar os elementos nas sublistas apropriadas. No entanto, escolher um bom pivô não é uma tarefa trivial. O ideal é que as sublistas devem ser aproximadamente do mesmo comprimento. Se uma matriz contém os números de 1 até 100 e 2 é escolhido como um limite, tem-se um desbalanceamento: a primeira sublista contém somente

8 um número depois do particionamento, enquanto a segunda tem 99 números (DROZDEK, 2002). Várias estratégias diferentes para selecionar um pivô foram desenvolvidas. Uma das mais simples consiste em escolher o primeiro elemento da lista. Essa abordagem pode ser suficiente para algumas aplicações. No entanto, como muitas listas a serem ordenadas já têm muitos elementos em suas próprias posições, uma abordagem mais cuidadosa é escolher o elemento alocado no meio da lista. Outra tarefa é varrer a matriz e dividir os elementos entre suas duas sublistas. O algoritmo que realiza esta tarefa não decide onde colocar um elemento igual ao pivô; ele somente diz que os elementos são colocados na primeira sublista caso sejam menores ou iguais ao pivô, e na segunda, caso sejam maiores ou iguais ao pivô. A razão é que a diferença entre os comprimentos das duas sublistas deve ser mínimo. Em conseqüência, os elementos iguais ao pivô devem ser divididos igualmente entre as duas submatrizes, para tornar essa diferença de tamanho mínima (DROZDEK, 2002). Existem vários métodos para se encontrar o pivô. Um método gera aleatoriamente um número entre o início e o final da lista. Esse número é utilizado como índice do pivô. Um outro método escolhe uma mediana dos três elementos da lista, dentre eles, o primeiro, o médio e o último (DROZDEK, 2002). 5.2 Complexidade do QuickSort Análise do Pior caso O Pior Caso ocorre quando o algoritmo de particionamento produz a cada chamada um subproblema de tamanho n-1 e outro de tamanho 1. Nesse contexto pode-se extrair a seguinte relação de recorrência: T(1) = O(1) T(n) = T(n-1) + O(n) Resolvendo esta relação de recorrência, acha-se a complexidade do QuickSort no pior caso, ou seja, O(n 2 ) Análise do Melhor Caso O Melhor Caso ocorre quando o particionamento divide o vetor a cada chamada em dois subproblemas de tamanhos aproximadamente iguais a n/2, que produz a seguinte relação de recorrência: T(1) = O(1)

9 T(n) = 2T(n/2) + O(n) Resolvendo esta relação de recorrência, acha-se a complexidade do QuickSort no melhor caso, ou seja, O(nlogn) Análise do Caso Médio Considere o código a seguir: void quicksort(v,a,b) if a>=b return else m = split(v,a,b) quicksort(v,a,m-1) quicksort(v,m+1,b) O efeito da execução de m=split(v,a,b) á alterar o vetor v[], definindo um índice m tal que todos os elementos da seção do vetor v[a..m-1] são menores ou iguais a v[m] e todos os elementos da seção do vetor v[m+1..b] são maiores que v[m]. Seja n = b - a + 1 o número de elementos a ordenar. Na execução de m=split(v,a,b) há n - 1 comparações envolvendo elementos do vetor. Pretende-se mostrar que o número de comparações c(n) é de ordem O(nlogn); mais precisamente que é sempre c(n) knlogn para uma constante k apropriada. Admite-se que os elementos do vetor são todos distintos e que todas as n! permutações de elementos são igualmente prováveis. Assim, o valor de m dado por m=split(v,a,b) tem a mesma probabilidade se ser a, de ser a + 1,... e de ser b; essa probabilidade é 1/n (relembra-se que n = b - a + 1). Abaixo tem-se recorrência que determina o valor médio do número de comparações:

10 É possível notar que para cada i 2 1, 2,..., n o valor c(i) ocorre 2 vezes na soma anterior; pode-se então escrever a recorrência da forma seguinte: Pré-teorema: A solução c(n) da recorrência é majorada por knlogn em que o valor de k é encontrado na demonstração. Caso base, n = 1: tem-se (da recorrência) c(1) = 0 k(1log1) para qualquer k > 0; analogamente se trata o caso n = 0. Passo de indução: supor que c(i) kilogi para todo o i com 0 i n-1. Abaixo é possível visualizar que c(n) k(n log n). onde α = 2k(-2 ln 2 + 1)/n tem valor negativo. O teorema fica então demonstrado se for n - 1 kn/2, pois fica então k(nlogn). Em particular podemos tomar k = 2 e enunciar a versão final do pré-teorema anterior. Conclui-se que o número de comparações efetuadas pelo quicksort é, no caso médio, majorado por 2nlogn. O Programa 4 mostra o código do QuickSort: #include <stdio.h> #include <stdlib.h> #define TAMANHO_DO_ARRAY 20

11 int partition(int e, int d); void quicksort(int e, int d); int a[tamanho_do_array]; void quicksort(int e, int d) int i; if (e < d) i = partition(e,d); quicksort(e, i - 1); quicksort(i + 1, d); int partition(int e, int d) int v, i, j, aux; v = a[d];//pivo -> pode ser qquer valor i = e - 1; j = d; do do i++; while ((a[i] < v) && (i < d)); do j--; while ((a[j] > v) && (j > 0)); aux = a[i]; a[i] = a[j]; a[j] = aux; while (j > i); a[j] = a[i]; a[i] = a[d]; a[d] = aux; return i; int main(int argc, char *argv[]) int i, pare; pare = a[0] = 0; printf("informe no maximo %d numeros\n", TAMANHO_DO_ARRAY); for (i = 1; i < TAMANHO_DO_ARRAY; i++)

12 if (!pare) printf("informe um numero inteiro positivo para a %d posicao: ", i); scanf("%d",&a[i]); else if (a[i] < 1) pare = 1; else a[0]++; a[i] = -1; quicksort(1, a[0]); printf("os numeros ordenados sao: \n"); if (a[0] > 0) else for (i = 1; i <= a[0]; i++) printf("%d ", a[i]); printf("\n"); printf("nenhum numero informado!\n"); Programa 4: Código fonte do QuickSort 6. Considerações finais Um problema fundamental da ciência da computação está na ordenação de uma lista de itens. Existem muitos algoritmos de ordenação para resolver este problema. Alguns algoritmos são simples e intuitivos, como por exemplo o BubleSort. Outros são extremamente complicados, como por exemplo o QuickSort. Esse artigo abordou diferentes algoritmos de ordenação de itens, além de estudar a complexidade de cada um deles. É importante lembrar que existem outros, tais como InsertionSort, HeapSort, ShellSort, RadixSort, etc. 6. Referências biliográficas DROZDEK, A. Estrutura de Dados e Algoritmos em C++. São Paulo: Pioneira Thomson Learning, 2002

13 KNUTH, D. Section 5.2.4: Sorting by Merging, The Art of Computer Programming. Addison-Wesley, Pag São Paulo: ZIVIANI, N. Projeto de Algoritmos com Implementação em Pascal e C. 4ª Ed. São Paulo: Pioneira, 1999

Algoritmos de Busca em Tabelas

Algoritmos de Busca em Tabelas Dentre os vários algoritmos fundamentais, os algoritmos de busca em tabelas estão entre os mais usados. Considere por exemplo um sistema de banco de dados. As operações de busca e recuperação dos dados

Leia mais

ALGORITMOS DE ORDENAÇÃO. Algoritmos de comparação-e-troca. Bubble Sort Merge Sort Quick Sort

ALGORITMOS DE ORDENAÇÃO. Algoritmos de comparação-e-troca. Bubble Sort Merge Sort Quick Sort ALGORITMOS DE ORDENAÇÃO ALGORITMOS DE ORDENAÇÃO Algoritmos de comparação-e-troca Bubble Sort Merge Sort Quick Sort 1 BUBBLE SORT Usa a estratégia de comparação-e-troca É constituído por várias fases Cada

Leia mais

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática

Leia mais

Algoritmos de Pesquisa e Ordenação em Vectores

Algoritmos de Pesquisa e Ordenação em Vectores Algoritmos de Pesquisa e Ordenação em Vectores FEUP - MIEEC Programação 2-2008/2009 Pesquisa Sequencial Problema (pesquisa de valor em vector): Verificar se um valor existe no vector e, no caso de existir,

Leia mais

FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAÇÃO ESTRUTURA DE DADOS 2. Vieira Lima Junior. Everson Santos Araujo

FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAÇÃO ESTRUTURA DE DADOS 2. Vieira Lima Junior. Everson Santos Araujo 1 FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAÇÃO ESTRUTURA DE DADOS 2 Vieira Lima Junior Everson Santos Araujo ALGORITMOS DE ORDENAÇÃO: estudo comparativo de diversos algoritmos

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 04: Análise de Algoritmos (Parte 1) Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Ciência da Computação, DECOM Website: www.decom.ufop.br/reifortes

Leia mais

Estrutura de Dados Básica

Estrutura de Dados Básica Estrutura de Dados Básica Professor: Osvaldo Kotaro Takai. Aula 7: Recursividade O objetivo desta aula é apresentar o conceito de recursão para solução de problemas. A recursão é uma técnica de programação

Leia mais

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES ALGORITMOS DE BUSCA EM LISTAS COM ALOCAÇÃO SEQÜENCIAL Busca em Listas Lineares A operação de busca é

Leia mais

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos Vetores Nos capítulos anteriores estudamos as opções disponíveis na linguagem C para representar: Números inteiros em diversos intervalos. Números fracionários com várias alternativas de precisão e magnitude.

Leia mais

Busca. Pesquisa sequencial

Busca. Pesquisa sequencial Busca Banco de dados existem para que, de tempos em tempos, um usuário possa localizar o dado de um registro, simplesmente digitando sua chave. Uma tabela ou um arquivo é um grupo de elementos, cada um

Leia mais

Figura 1 Busca Linear

Figura 1 Busca Linear ----- Evidentemente, possuir os dados não ajuda o programador ou o usuário se eles não souberem onde os dados estão. Imagine, por exemplo, uma festa de casamento com cem convidados na qual não se sabe

Leia mais

EFICIÊNCIA DE ALGORITMOS E

EFICIÊNCIA DE ALGORITMOS E AULA 2 EFICIÊNCIA DE ALGORITMOS E PROGRAMAS Medir a eficiência de um algoritmo ou programa significa tentar predizer os recursos necessários para seu funcionamento. O recurso que temos mais interesse neste

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

Leia mais

Métodos de Pesquisa em Memória Primária

Métodos de Pesquisa em Memória Primária Algoritmos e Estrutura de Dados II Métodos de Pesquisa em Memória Primária Prof Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Pesquisa Por pesquisa (procura ou busca) entende-se o ato

Leia mais

Análise de Algoritmos: Melhor caso, pior caso, caso médio

Análise de Algoritmos: Melhor caso, pior caso, caso médio Análise de Algoritmos: Melhor caso, pior caso, caso médio Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 25 Sumário Rever um problema e um algoritmo que já conhecem. Descrevê-lo em pseudo-código

Leia mais

Exercícios Teóricos Resolvidos

Exercícios Teóricos Resolvidos Universidade Federal de Minas Gerais Instituto de Ciências Exatas Departamento de Matemática Exercícios Teóricos Resolvidos O propósito deste texto é tentar mostrar aos alunos várias maneiras de raciocinar

Leia mais

Árvores Binárias - continuação

Árvores Binárias - continuação Tópicos Avançados em Estrutura de Dados 6º Período Ciência da Computação Uma Aplicação de Árvores Binárias Árvores Binárias - continuação As árvore binárias são estruturas importantes toda vez que uma

Leia mais

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++. Data: 14/8 Página 1 de 9 Primeiros passos Introdução Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++. No tutorial anterior, mostramos como

Leia mais

O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2

O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2 3.2 O Espaço Nulo de A: Resolvendo Ax = 0 11 O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2 Esta seção trata do espaço de soluções para Ax = 0. A matriz A pode ser quadrada ou retangular. Uma solução imediata

Leia mais

1 se n = 0 n (n 1)! se n 1

1 se n = 0 n (n 1)! se n 1 Recursão versus Iteração Problema: Cálculo de n! = n (n 1)... 1 int facti(int n) { int fac=n; while(n>0){ fac=fac*n; n--; } return fac; } [epd94, Cap. 5.13-15] Definição recursiva: n! = { 1 se n = 0 n

Leia mais

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas CMP1132 Processo e qualidade de software II Prof. Me. Elias Ferreira Sala: 402 E Quarta-Feira:

Leia mais

Programação Recursiva versão 1.02

Programação Recursiva versão 1.02 Programação Recursiva versão 1.0 4 de Maio de 009 Este guião deve ser entregue, no mooshak e no moodle, até às 3h55 de 4 de Maio. AVISO: O mooshak é um sistema de avaliação e não deve ser utilizado como

Leia mais

Comandos Sequenciais if else, e Switch

Comandos Sequenciais if else, e Switch Introdução à Programação Comandos Sequenciais if else, e Switch 1º ano - ESI e IGE (2011/2012) Engenheiro Anilton Silva Fernandes (afernandes@unipiaget.cv) O computador pensa? Muitas vezes utiliza-se a

Leia mais

Algoritmos e Estrutura de Dados III. Árvores

Algoritmos e Estrutura de Dados III. Árvores Algoritmos e Estrutura de Dados III Árvores Uma das mais importantes classes de estruturas de dados em computação são as árvores. Aproveitando-se de sua organização hierárquica, muitas aplicações são realizadas

Leia mais

Análise de complexidade

Análise de complexidade Introdução Algoritmo: sequência de instruções necessárias para a resolução de um problema bem formulado (passíveis de implementação em computador) Estratégia: especificar (definir propriedades) arquitectura

Leia mais

Experimentos com a memória cache do CPU

Experimentos com a memória cache do CPU Experimentos com a memória cache do CPU Alberto Bueno Júnior & Andre Henrique Serafim Casimiro Setembro de 2010 1 Contents 1 Introdução 3 2 Desvendando o cache 3 2.1 Para que serve o cache?.....................

Leia mais

17 - Funções e Procedimentos em C Programação Modular

17 - Funções e Procedimentos em C Programação Modular 17 - Funções e Procedimentos em C Programação Modular Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Ministrado por: Prof. André Amarante 17

Leia mais

UNIVERSIDADE FEDERAL DE SANTA MARIA

UNIVERSIDADE FEDERAL DE SANTA MARIA 1 UNIVERSIDADE FEDERAL DE SANTA MARIA Disciplina de Algoritmos e Programação Profa: Juliana Kaizer Vizzotto Lista de Exercícios Vetores Para a implementação de programas que solucionem os problemas a seguir

Leia mais

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Estruturas de Dados Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Árvores Conceitos Árvores binárias Árvores binárias de pesquisa Árvores binárias balanceadas Árvores ESTRUTURAS

Leia mais

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor.

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor. PUC-Rio Departamento de Informática Período: 2015.1 Horário: 2as-feiras e 4as-feiras de 17-19 30 de março de 2015 ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) 1 a Lista de Exercícios 1. Lista (a) Seja um TAD

Leia mais

Solução da prova da 1 a fase OBMEP 2008 Nível 1

Solução da prova da 1 a fase OBMEP 2008 Nível 1 OBMEP 00 Nível 1 1 QUESTÃO 1 Como Leonardo da Vinci nasceu 91 anos antes de Pedro Américo, ele nasceu no ano 14 91 = 145. Por outro lado, Portinari nasceu 451 anos depois de Leonardo da Vinci, ou seja,

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

O Problema do Troco Principio da Casa dos Pombos. > Princípios de Contagem e Enumeração Computacional 0/48

O Problema do Troco Principio da Casa dos Pombos. > Princípios de Contagem e Enumeração Computacional 0/48 Conteúdo 1 Princípios de Contagem e Enumeração Computacional Permutações com Repetições Combinações com Repetições O Problema do Troco Principio da Casa dos Pombos > Princípios de Contagem e Enumeração

Leia mais

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza Introdução Manipulação de arquivos em C Estrutura de Dados II Prof Jairo Francisco de Souza Manipulação de Arquivo em C Existem dois tipos possíveis de acesso a arquivos na linguagem C : sequencial (lendo

Leia mais

a 1 x 1 +... + a n x n = b,

a 1 x 1 +... + a n x n = b, Sistemas Lineares Equações Lineares Vários problemas nas áreas científica, tecnológica e econômica são modelados por sistemas de equações lineares e requerem a solução destes no menor tempo possível Definição

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 12 Cadeia de Caracteres (Strings) Edirlei Soares de Lima Caracteres Até o momento nós somente utilizamos variáveis que armazenam números (int, float ou

Leia mais

Análises Geração RI (representação intermediária) Código Intermediário

Análises Geração RI (representação intermediária) Código Intermediário Front-end Análises Geração RI (representação intermediária) Código Intermediário Back-End Geração de código de máquina Sistema Operacional? Conjunto de Instruções do processador? Ambiente de Execução O

Leia mais

Soluções Nível 1 5 a e 6 a séries (6º e 7º anos) do Ensino Fundamental

Soluções Nível 1 5 a e 6 a séries (6º e 7º anos) do Ensino Fundamental a e 6 a séries (6º e 7º anos) do Ensino Fundamental 1. (alternativa C) Os números 0,01 e 0,119 são menores que 0,12. Por outro lado, 0,1 e 0,7 são maiores que 0,. Finalmente, 0,29 é maior que 0,12 e menor

Leia mais

QUESTÃO 1 ALTERNATIVA B

QUESTÃO 1 ALTERNATIVA B 1 QUESTÃO 1 Marcos tem 10 0,25 = 2,50 reais em moedas de 25 centavos. Logo ele tem 4,30 2,50 = 1,80 reais em moedas de 10 centavos, ou seja, ele tem 1,80 0,10 = 18 moedas de 10 centavos. Outra maneira

Leia mais

Quão rápido podemos ordenar? Aula07-LimiteInferiorpara Ordenação. Quão rápido podemos ordenar? Árvore de Decisão- Exemplo. Ordenação em Tempo Linear

Quão rápido podemos ordenar? Aula07-LimiteInferiorpara Ordenação. Quão rápido podemos ordenar? Árvore de Decisão- Exemplo. Ordenação em Tempo Linear Quão rápido podemos ordenar? Aula07-LimiteInferiorpara Ordenação Ordenação em Tempo Linear Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Um algoritmo baseado em comparação para

Leia mais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Variáveis na linguagem C: tipo char O tipo char representa um caractere ASCII (ocupa só 1 byte) int main(int argc, char **

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas

ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Departamento de Computação ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas Luiz Henrique Santos

Leia mais

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas? Recorrências Muitas vezes não é possível resolver problemas de contagem diretamente combinando os princípios aditivo e multiplicativo. Para resolver esses problemas recorremos a outros recursos: as recursões

Leia mais

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação Programação 1I Prof. Osório Árvores Binárias Pag.: 1 - UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação Programação II Disciplina: Linguagem

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

2ª Lista de Exercícios

2ª Lista de Exercícios Universidade Federal de Minas Gerais Departamento de Ciência da Computação Algoritmos e Estruturas de Dados II (Turmas M, N, W, F) 1º Semestre de 2012 Profs. Camilo Oliveira, Gisele Pappa, Ítalo Cunha,

Leia mais

Estruturas de Repetição

Estruturas de Repetição Estruturas de Repetição Introdução No capítulo anterior verificamos que a execução seqüencial dos comandos da função main nos limita a programação de algoritmos muito simples. Passamos, então, a dedicar

Leia mais

AV2 - MA 12-2012. (a) De quantos modos diferentes posso empilhá-los de modo que todos os CDs de rock fiquem juntos?

AV2 - MA 12-2012. (a) De quantos modos diferentes posso empilhá-los de modo que todos os CDs de rock fiquem juntos? Questão 1. Num porta-cds, cabem 10 CDs colocados um sobre o outro, formando uma pilha vertical. Tenho 3 CDs de MPB, 5 de rock e 2 de música clássica. (a) De quantos modos diferentes posso empilhá-los de

Leia mais

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados Tipo de dados, tipo abstrato de dados, estruturas de dados Termos parecidos, mas com significados diferentes Tipo de dado Em linguagens de programação

Leia mais

428 Capítulo 7 Arrays. do { ExibeArrayInts(ar, n); /* Exibe a configuração */ /* corrente do array */ } while (ProximaPermutacao(ar, n));

428 Capítulo 7 Arrays. do { ExibeArrayInts(ar, n); /* Exibe a configuração */ /* corrente do array */ } while (ProximaPermutacao(ar, n)); 428 Capítulo 7 Arrays do { ExibeArrayInts(ar, n); / Exibe a configuração / / corrente do array / while (ProximaPermutacao(ar, n)); Análise: Inicialmente, a função GeraPermutacoes() chama a função BubbleSort(),

Leia mais

Métodos de Pesquisa 472

Métodos de Pesquisa 472 472 Métodos de Pesquisa 473 Objetivos e Caracterizações Para que se possa falar em algoritmos de pesquisa, é necessário inicialmente introduzir a noção de mapeamento que é uma das mais primitivas em programação.

Leia mais

Prof. Paulo Henrique Raciocínio Lógico

Prof. Paulo Henrique Raciocínio Lógico Prof. Paulo Henrique Raciocínio Lógico Comentário da prova de Agente Penitenciário Federal Funrio 01. Uma professora formou grupos de 2 e 3 alunos com o objetivo de conscientizar a população local sobre

Leia mais

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,... Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,... 0) O que veremos na aula de hoje? Um fato interessante Produtos notáveis Equação do 2º grau Como fazer a questão 5 da 3ª

Leia mais

Pesquisa Sequencial e Binária. Introdução à Programação SI2

Pesquisa Sequencial e Binária. Introdução à Programação SI2 Pesquisa Sequencial e Binária Introdução à Programação SI2 3 Contexto Diferentes estratégias para pesquisa (busca) de um elemento específico em um conjunto de dados. Lista, array, coleção Operação importante,

Leia mais

2. Representação Numérica

2. Representação Numérica 2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos

Leia mais

Aplicações de Combinatória e Geometria na Teoria dos Números

Aplicações de Combinatória e Geometria na Teoria dos Números Aplicações de Combinatória e Geometria na Teoria dos Números Nesse artigo vamos discutir algumas abordagens diferentes na Teoria dos Números, no sentido de envolverem também outras grandes áreas, como

Leia mais

José Romildo Malaquias 2011-1

José Romildo Malaquias 2011-1 Programação de Computadores I Aula 08 Programação: Estruturas de Repetição José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/58 Motivação Como imprimir os três

Leia mais

Estruturas de Repetição

Estruturas de Repetição Estruturas de Repetição Lista de Exercícios - 04 Linguagem e Técnicas de Programação Professor: Edwar Saliba Júnior Estruturas de Repetição O que são e para que servem? São comandos que são utilizados

Leia mais

Programação: Estruturas de seleção

Programação: Estruturas de seleção Programação de Computadores I Aula 07 Programação: Estruturas de seleção José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/53 Valores booleanos Os valores booleanos

Leia mais

Linguagem C: Árvores Binarias

Linguagem C: Árvores Binarias Instituto de C Linguagem C: Árvores Binarias Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Tópicos Principais Introdução Árvores binárias Implementação

Leia mais

Aula 03 Limite assintótico para a ordenação, Ordenação em tempo linear

Aula 03 Limite assintótico para a ordenação, Ordenação em tempo linear MC3305 Algoritmos e Estruturas de Dados II Aula 03 Limite assintótico para a ordenação, Ordenação em tempo linear Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 2Q-2015 1 2 Ordenação Ordenar corresponde

Leia mais

struct LISTA item quant

struct LISTA item quant UNIVERSIDADE SÃO JUDAS TADEU ESTRUTURA DE DADOS - PROF. H. Senger IMPLEMENTAÇÃO DE LISTAS COM VETORES A implementação de listas utilizando vetores é simples. Existe apenas uma pequena questão, com relação

Leia mais

Tutorial de Matlab Francesco Franco

Tutorial de Matlab Francesco Franco Tutorial de Matlab Francesco Franco Matlab é um pacote de software que facilita a inserção de matrizes e vetores, além de facilitar a manipulação deles. A interface segue uma linguagem que é projetada

Leia mais

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

20 Caracteres - Tipo char

20 Caracteres - Tipo char 0 Caracteres - Tipo char Ronaldo F. Hashimoto e Carlos H. Morimoto Até agora vimos como o computador pode ser utilizado para processar informação que pode ser quantificada de forma numérica. No entanto,

Leia mais

Este material traz a teoria necessária à resolução das questões propostas.

Este material traz a teoria necessária à resolução das questões propostas. Inclui Teoria e Questões Inteiramente Resolvidas dos assuntos: Contagem: princípio aditivo e multiplicativo. Arranjo. Permutação. Combinação simples e com repetição. Lógica sentencial, de primeira ordem

Leia mais

Somatórias e produtórias

Somatórias e produtórias Capítulo 8 Somatórias e produtórias 8. Introdução Muitas quantidades importantes em matemática são definidas como a soma de uma quantidade variável de parcelas também variáveis, por exemplo a soma + +

Leia mais

Pesquisa em Memória Primária. Prof. Jonas Potros

Pesquisa em Memória Primária. Prof. Jonas Potros Pesquisa em Memória Primária Prof. Jonas Potros Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação é dividida

Leia mais

Árvore Binária de Busca

Árvore Binária de Busca Árvore Binária de Busca 319 Árvore Binária de Busca! construída de tal forma que, para cada nó:! nós com chaves menores estão na sub-árvore esquerda! nós com chaves maiores (ou iguais) estão na subárvore

Leia mais

Universidade Federal de Mato Grosso do Sul Faculdade de Computação Disciplina de Verão: Algoritmos e Programação II

Universidade Federal de Mato Grosso do Sul Faculdade de Computação Disciplina de Verão: Algoritmos e Programação II Universidade Federal de Mato Grosso do Sul Faculdade de Computação Disciplina de Verão: Algoritmos e Programação II Professores: Liana Duenha 10 de março de 2014 Professores: Liana Duenha () Universidade

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso

Leia mais

Lei de Gauss Origem: Wikipédia, a enciclopédia livre.

Lei de Gauss Origem: Wikipédia, a enciclopédia livre. Lei de Gauss Origem: Wikipédia, a enciclopédia livre. A lei de Gauss é a lei que estabelece a relação entre o fluxo de campo elétrico que passa através de uma superfície fechada com a carga elétrica que

Leia mais

Podemos encontrar uma figura interessante no PMBOK (Capítulo 7) sobre a necessidade de organizarmos o fluxo de caixa em um projeto.

Podemos encontrar uma figura interessante no PMBOK (Capítulo 7) sobre a necessidade de organizarmos o fluxo de caixa em um projeto. Discussão sobre Nivelamento Baseado em Fluxo de Caixa. Item aberto na lista E-Plan Podemos encontrar uma figura interessante no PMBOK (Capítulo 7) sobre a necessidade de organizarmos o fluxo de caixa em

Leia mais

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II Pesquisa em Memória Primária Algoritmos e Estruturas de Dados II Pesquisa em Memória Primária Pesquisa: Recuperação de informação em um grande volume de dados Informação é dividida em registros e cada

Leia mais

Pesquisa Sequencial e Binária

Pesquisa Sequencial e Binária Pesquisa Sequencial e Binária Prof. Wylliams Barbosa Santos wylliamss@gmail.com Introdução à Programação Crédito de Conteúdo: Professora Ceça Moraes Agenda Pesquisa Sequencial Noções de complexidade Pesquisa

Leia mais

Module Introduction. Programação. Cap. 4 Algoritmos e Programação Estruturada

Module Introduction. Programação. Cap. 4 Algoritmos e Programação Estruturada 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação 9099 : Bioengenharia 10135 : Ciências Biomédicas Cap. 4 Algoritmos e Estruturada Module Introduction Algoritmos e Estruturada Objectivos:

Leia mais

6. Geometria, Primitivas e Transformações 3D

6. Geometria, Primitivas e Transformações 3D 6. Geometria, Primitivas e Transformações 3D Até agora estudamos e implementamos um conjunto de ferramentas básicas que nos permitem modelar, ou representar objetos bi-dimensionais em um sistema também

Leia mais

INF 1620 P1-10/04/02 Questão 1 Nome:

INF 1620 P1-10/04/02 Questão 1 Nome: INF 1620 P1-10/04/02 Questão 1 Considere uma disciplina que adota o seguinte critério de aprovação: os alunos fazem duas provas (P1 e P2) iniciais; se a média nessas duas provas for maior ou igual a 5.0,

Leia mais

Projeto e Análise de Algoritmos. Profa. Juliana Kaizer Vizzotto. Projeto e Análise de Algoritmos - Aula 1

Projeto e Análise de Algoritmos. Profa. Juliana Kaizer Vizzotto. Projeto e Análise de Algoritmos - Aula 1 Projeto e Análise de Algoritmos Profa. Juliana Kaizer Vizzotto Projeto e Análise de Algoritmos - Aula 1 Roteiro Introdução Exemplo: ordenação Introdução Análise de Algoritmos Estudo teórico da performance

Leia mais

E A D - S I S T E M A S L I N E A R E S INTRODUÇÃO

E A D - S I S T E M A S L I N E A R E S INTRODUÇÃO E A D - S I S T E M A S L I N E A R E S INTRODUÇÃO Dizemos que uma equação é linear, ou de primeiro grau, em certa incógnita, se o maior expoente desta variável for igual a um. Ela será quadrática, ou

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação CENTRO DE CIÊNCIAS EXATAS DEPARTAMENTO DE COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Algoritmos de Ordenação Alunos: André Ricardo Gonçalves Luiz Gustavo Andrade dos Santos Paulo Roberto Silla Profa. Linnyer Beatrys

Leia mais

AV1 - MA 12-2012. (b) Se o comprador preferir efetuar o pagamento à vista, qual deverá ser o valor desse pagamento único? 1 1, 02 1 1 0, 788 1 0, 980

AV1 - MA 12-2012. (b) Se o comprador preferir efetuar o pagamento à vista, qual deverá ser o valor desse pagamento único? 1 1, 02 1 1 0, 788 1 0, 980 Questão 1. Uma venda imobiliária envolve o pagamento de 12 prestações mensais iguais a R$ 10.000,00, a primeira no ato da venda, acrescidas de uma parcela final de R$ 100.000,00, 12 meses após a venda.

Leia mais

INTRODUÇÃO À LINGUAGEM C++

INTRODUÇÃO À LINGUAGEM C++ INTRODUÇÃO À LINGUAGEM C++ 1 - VARIÁVEIS Variáveis espaço de memória reservado para armazenar tipos de dados, com um nome para referenciar seu conteúdo. Observações importantes Todas as variáveis devem

Leia mais

Esta apresentação ensinará os conceitos de Orientação a Objetos com C++, do mais básico para o mais avançado. É suposto que o aluno já tenha

Esta apresentação ensinará os conceitos de Orientação a Objetos com C++, do mais básico para o mais avançado. É suposto que o aluno já tenha Esta apresentação ensinará os conceitos de Orientação a Objetos com C++, do mais básico para o mais avançado. É suposto que o aluno já tenha conhecimento avançado de C. Exemplo em C: Faça um programa que

Leia mais

5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS. 5.1 - Os Programas de Avaliação

5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS. 5.1 - Os Programas de Avaliação 36 5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS 5.1 - Os Programas de Avaliação Programas de avaliação convencionais foram utilizados para análise de diversas configurações da arquitetura. Estes programas

Leia mais

Bases Matemáticas. Aula 2 Métodos de Demonstração. Rodrigo Hausen. v. 2013-7-31 1/15

Bases Matemáticas. Aula 2 Métodos de Demonstração. Rodrigo Hausen. v. 2013-7-31 1/15 Bases Matemáticas Aula 2 Métodos de Demonstração Rodrigo Hausen v. 2013-7-31 1/15 Como o Conhecimento Matemático é Organizado Definições Definição: um enunciado que descreve o significado de um termo.

Leia mais

Árvores Binárias e Busca. Jeane Melo

Árvores Binárias e Busca. Jeane Melo Árvores Binárias e Busca Jeane Melo Roteiro Parte 1 Árvores Relação hierárquica Definição Formal Terminologia Caminhamento em Árvores Binárias Exemplos Parte 2 Busca seqüencial Busca Binária Grafos Conjunto

Leia mais

Curso de Programação Computadores

Curso de Programação Computadores 3 O Primeiro Programa em C Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro 3 O Primeiro Programa em C 3.1 - Introdução Depois dos conceitos

Leia mais

7 - Análise de redes Pesquisa Operacional CAPÍTULO 7 ANÁLISE DE REDES. 4 c. Figura 7.1 - Exemplo de um grafo linear.

7 - Análise de redes Pesquisa Operacional CAPÍTULO 7 ANÁLISE DE REDES. 4 c. Figura 7.1 - Exemplo de um grafo linear. CAPÍTULO 7 7 ANÁLISE DE REDES 7.1 Conceitos Básicos em Teoria dos Grafos Diversos problemas de programação linear, inclusive os problemas de transporte, podem ser modelados como problemas de fluxo de redes.

Leia mais

Pointer Jumping. odg(v) e idg(v): graus de saída e entrada do vértice v V. um vértice r tal que. O vértice r é dita raíz de T

Pointer Jumping. odg(v) e idg(v): graus de saída e entrada do vértice v V. um vértice r tal que. O vértice r é dita raíz de T Pointer Jumping T = (V,E) : árvore direcionada odg(v) e idg(v): graus de saída e entrada do vértice v V um vértice r tal que v V-{r}, odg(v) = 1, odg(r)=0 v V-{r}, um caminho de v a r O vértice r é dita

Leia mais

OBSERVANDO AS DIFERENÇAS DE TEMPO NAS EXECUÇÕES DE ALGORITMOS EM PROCESSADORES DIFERENTES

OBSERVANDO AS DIFERENÇAS DE TEMPO NAS EXECUÇÕES DE ALGORITMOS EM PROCESSADORES DIFERENTES OBSERVANDO AS DIFERENÇAS DE TEMPO NAS EXECUÇÕES DE ALGORITMOS EM PROCESSADORES DIFERENTES Noting the Time Differences in the Execution of Algorithms on Different Processors Walteno Martins Parreira Júnior,

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO

Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO Problemas & Algoritmos Para resolver um problema através dum computador é necessário encontrar em primeiro lugar uma maneira de descrevê-lo

Leia mais

Busca em Memória. Secundária

Busca em Memória. Secundária UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Busca em Memória Secundária e Gomes da Costa yandre@din.uem.br 1 Busca de um item em uma massa de dados que não cabe na memória principal; Procura-se

Leia mais

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.1. Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.1. Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005. Agenda Análise e Técnicas de Algoritmos Introdução Informal Motivação Jorge Figueiredo Visão Geral do do Curso Introdução Informal O nosso curso é sobre técnicas e análise de de algoritmos (computacionais).

Leia mais

RESUMO 2 - FÍSICA III

RESUMO 2 - FÍSICA III RESUMO 2 - FÍSICA III CAMPO ELÉTRICO Assim como a Terra tem um campo gravitacional, uma carga Q também tem um campo que pode influenciar as cargas de prova q nele colocadas. E usando esta analogia, podemos

Leia mais

OBI2014 Caderno de Tarefas

OBI2014 Caderno de Tarefas OBI2014 Caderno de Tarefas Modalidade Universitária, Fase 2 16 de agosto de 2014 A PROVA TEM DURAÇÃO DE 5 HORAS Promoção: Patrocínio: Olimpíada Brasileira de Informática OBI2014 1 Instruções LEIA ATENTAMENTE

Leia mais