Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Introdução e Conceitos: Tipos de Dados, Estruturas de Dados e Tipos Abstratos de Dados Huei Diana Lee Fabiana F.F. Peres Ana Paula Martins Algoritmos e Estruturas de Dados 2007 Referências Introdução Conceitos Tipos de Dados Conteúdo Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Estruturas de Dados Tipo Abstrato de Dados Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências The discipline of computing is the systematic study of algorithmic processes that describe and transform information: their theory, analysis, design, efficiency, implementation, and application. The fundamental question underlying all the computing is ’What can be (efficiently) automated?’ Relatório da ACM [Comer et al., 1989] (Association for Computing Machinery) Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências COMPUTAÇÃO: estudo de ALGORITMOS I Conceito de algoritmo: originado como um meio para representar procedimentos para resolver problemas matemáticos; I Formalizado em 1936 por meio das Máquinas de Turing1 de Alan Turing e pelo Cálculo Lambda2 de Alonzo Church e Stephen Cole Kleene. 1 Modelo abstrato de um computador. Sistema formal desenvolvido para investigar definição de funções, aplicação de funções e recursão. 2 Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Definição I ALGORITMO: conjunto finito de instruções bem definidas que, se seguidas, realizam uma determinada tarefa; Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Definição I ALGORITMO: conjunto finito de instruções bem definidas que, se seguidas, realizam uma determinada tarefa; I Informalmente... receita: I I I Instruções para o uso de medicamentos; Indicações de como montar um aparelho; Uma receita de culinária. Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Definição I ALGORITMO: conjunto finito de instruções bem definidas que, se seguidas, realizam uma determinada tarefa; I Informalmente... receita: I I I I Instruções para o uso de medicamentos; Indicações de como montar um aparelho; Uma receita de culinária. Segundo Dijkstra, um algoritmo corresponde a uma descrição de um padrão de comportamento, expresso em termos de um conjunto finito de ações. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Origem... Abu Abdullah Muhammad bin Musa al-Khwarizmi I I I Algorism (regras para aritmética usando números hindu-arábicos); Algorithm (século 18 latinização); 1o algoritmo escrito para um computar: Ada Byron em 1842. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Critérios para “ser” um algoritmo: 1. Entrada: zero ou mais valores de entrada; 2. Saída: pelo menos um valor é produzido; 3. Clareza de definição: toda instrução deve ser clara e não ambígua; 4. Efetividade: toda instrução deve ser factível; 5. O algoritmo deve terminar após um no finito de passos. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Programa: não satisfaz necessariamente o critério (5). Ex: SO. Porém... I Algoritmo é MEIO I Computador é manipulador de DADOS I FIM: TRANFORMAÇÃO DE DADOS Referências Introdução Conceitos Dados Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Dados Transformados Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados COMPUTAÇÃO: estudo de DADOS Modelagem Dados RESULTADOS!! Interpretação Dados Transformados Representação Execução ALGORITMOS Transformação Diferentes representações =⇒ diferentes algoritmos. Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Algumas questões a serem analisadas... I Existem diferentes dados a serem considerados: 1. Cada um envolve um conjunto de operações; 2. Cada representação alternativa do dado origina algoritmos distintos que realizam as operações sobre o dado. I Os algoritmos devem ser analisados para a avaliação da influência da representação do dado. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados ESTRATÉGIA: analisar o papel de diferentes estruturas de dados em problemas clássicos de Ciências da Computação através da análise dos algoritmos correspondentes. Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências DADO: I s.m. Elemento ou quantidade conhecida, que serve de base à resolução de um problema; princípio em que assenta uma discussão; elemento ou base para a formação de um juízo [de Holanda Ferreira, 1986]; Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências DADO: I Representação formalizada de fatos ou idéias, capaz de ser comunicada ou manipulada por algum processo; I Representação em uma linguagem precisa e formalizada de alguns fatos ou conceitos, freqüentemente valores numéricos ou alfabéticos, de uma forma tal que possam ser manipulados por um método computacional [Knuth, 1997]. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências TIPO DE DADO: I Especificação de como o dado representado por cadeia de bits é interpretado. I Exemplos de tipos de dados: I I I I I Variáveis; Constantes; Expressões; Funções. Referem-se ao conjunto de valores que estes podem assumir ou gerar. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Escalares de Dados I Incluem os números, os valores lógicos e o conjunto de caracteres de impressão. I Denotam-se por meio de identificadores: I I I I I Integer (simples); Boolean (simples); Char (simples); Real (simples); Enumerado e Subconjuntos. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Escalares de Dados: Integer (inteiro) I Compreende o conjunto de todos os números inteiros (negativos, zero e positivos); I Operações permitidas são: I I I I I I Soma; Subtração; Multiplicação; Divisão inteira (DIV); Resto da divisão (MOD); Operações de comparação: =, 6=, ≥, ≤, >, <. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Tipos Escalares de Dados: Real I São os números racionais, isto é, números compostos por uma parte inteira e uma fracionária; I Operações permitidas são: I I I I I Soma; Subtração; Multiplicação; Divisão (/); Operações de comparação: =, 6=, ≥, ≤, >, <. Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Tipos Escalares de Dados: Boolean (lógico) I Composto por apenas dois valores: verdadeiro e falso (TRUE e FALSE) I Operações: I I I OU (OR - conjunção); E (AND - disjunção); NÃO (NOT - negação). Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Tipos Escalares de Dados: Char (caracter) I São os caracteres alfanuméricos, isto é, dígitos decimais (0..9), letras (a..z, A..Z) e sinais especiais (sinais de pontuação, espaço em branco entre outros); I Operações de comparação: =, 6=. Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Escalares de Dados: Enumerated (enumerado) I Conjunto ordenado de identificador da seguinte forma: TYPE T = (a1, a2, ..., an) onde T é o novo identificador de tipo e os aj são os novos identificadores de constantes. I Exemplos: I I I TYPE cor = (azul, vermelho, amarelo); TYPE dia-da-semana = (segunda, terça, quarta, quinta, sexta, sábado, domingo); TYPE moeda = (real, dólar, peso, franco); Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Escalares de Dados I Definição de tipos enumerados, possibilita que os identificadores sejam utilizados ao longo do programa como constantes, aumentando consideravelmente a sua inteligibilidade. I Vejamos os exemplos abaixo: I I I I VAR c: VAR d: VAR m: cor; dia-da-semana; moeda. então I I I c := vermelho; d := segunda; m := real; Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Escalares de Dados I onde naturalmente, estes são mais informativos que seus correspondentes numéricos: I I I I c := 2; d := 1; m := 1; OBS: Também, o compilador poderá verificar a consistência de operações envolvendo tais tipos. Assim, tomando-se a definição de c, c := c + 1 não teria sentido. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Escalares de Dados: Subrange (subconjunto) I Composto por um subconjunto de um determinado tipo, limitados a um intervalo específico da forma: TYPE T = [min,..., máx] onde min e máx definem os limites do intervalo. Estes limites devem ser constantes; I Ex: TYPE ano = [1900..2000] TYPE letra-maiúscula = ["A".."Z"] Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Escalares de Dados: Subrange (subconjunto) I Então, definindo-se: I I I VAR y: ano; VAR l: letra-maiúscula; as seguintes atribuições são válidas: I I y := 1996; l := "U"; Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Tipos Compostos de Dados (Tipos Estruturados) São tipos construídos a partir de tipos simples: I I I I Array File of Record Set Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Estruturados: Array I Estrutura matricial: I I Composta de um número fixo de elementos do mesmo tipo com índices variando de a1 até an ; A variável usada como índice é do tipo simples (não real). Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Exemplo: considere os elementos aij , onde i = [1...n] e j = [1...m]. O conjunto de m × n variáveis pode ser representado por um array bidimensional A, onde m é o número de linhas e n o número de colunas. a11 a21 .. . ai1 am1 a12 a22 .. . a12 a12 ... ... .. . ... ... a1j a11 .. . a11 a11 a1n a2n .. . ain amn Ex: ARRAY [a1...am, b1...bn] OF Tipo Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Estruturados: Record (registro) I I Estrutura de campos que pode ser utilizada para ligar componentes de diferentes tipos. Cada campo tem um nome próprio chamado de identificador de campo. Número fixo de variáveis: TYPE pessoa1 = RECORD Nome: string[30]; Altura: real; Idade: integer; Sexo: tiposexo; END; Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Tipos Estruturados: Record (registro) I Campo variante: TYPE pessoa-2 = RECORD Nome : string[30]; Est-civil: (solt, cas, viú, div); CASE s : tiposexo OF masculino: (peso: real; barbudo : boolean;) feminino : ARRAY [1..3] OF integer; END; END; Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Estruturados: File (arquivo) I Estrutura de arquivo, com registro do TIPO especificado, onde tipo pode ser TEXT por exemplo; I Exemplo: TYPE cadastro : FILE OF pessoa-1; Nomes : FILE OF TEXT; (arquivo de char organizado em linhas) Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipos Estruturados: Set (conjunto) I Estrutura de conjunto de valores simples de um só tipo (escalares exceto reais); I Exemplo: TYPE letra-ma = SET OF ’A’...’Z’; vogal = SET OF (’a’,’e’,’i’,’o’,’u’); Introdução Conceitos Tipos de Dados Program complex; type complexnumber = Estruturas de Dados Tipo Abstrato de Dados record r1: real; im: real; end; var c1, c2, c3: complexnumber; begin c1.r1 := 12,3; c1.im := 6,5; c2.r1 := -2,4; c2.im := 0,0; c3.r1 := c1.r1 + c2.r1; writeln(‘Parte real da soma = ’, c3.r1); c3.im := c1.im + c2.im; writeln(‘Parte imaginária da soma = ’, c3.im); c3.r1 := c1.r1 * c2.r1 – c1.im * c2.im; writeln(‘Parte real do produto = ’, c3.r1); c3.im := c1.im * c2.r1 – c1.r1 * c2.im; writeln(‘Parte imaginária do produto = ’, c3.im); end. Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Estruturas de Dados — ED Definição: Conjunto de valores e da maneira como se relacionam. Exemplo: estrutura de dados Inteiros Conjunto de valores || (0, ±1, ±2, . . .) + Relações || (+, -, *, /, MOD) Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Estruturas de Dados Uma implementação de ED d é um mapeamento de d para um conjunto de outras estruturas de dados e O que faz ⇓ Definição ED × Como faz ⇓ Implementação ED Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Estruturas de Dados e Algoritmos I Estruturas de dados e algoritmos estão intimamente ligados: I I I Não se pode estudar estruturas de dados sem considerar os algoritmos associados a elas; Assim como a escolha dos algoritmos em geral depende da representação e da estrutura dos dados. Para resolver um problema é necessário escolher uma abstração da realidade, em geral mediante a definição de um conjunto de dados que representa a situação real. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Escolha da representação I I A escolha da representação dos dados é determinada, entre outras, pelas operações a serem realizadas sobre os dados; Exemplo: considere a operação de adição: I I I Para pequenos números, uma boa representação é por meio de barras verticais (caso em que a operação de adição é bastante simples); Já a representação por dígitos decimais requer regras relativamente complicadas, as quais devem ser. memorizadas Entretanto, quando consideramos a adição de grandes números é mais fácil a representação por dígitos decimais (devido ao princípio baseado no peso relativo da posição de cada dígito). Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Programas I I I Programar é basicamente estruturar dados e construir algoritmos. Programas são formulações concretas de algoritmos abstratos, baseados em representações e estruturas específicas de dados; Programas representam uma classe especial de algoritmos capazes de serem seguidos por computadores; Um computador só é capaz de seguir programas em linguagem de máquina (seqüência de instruções obscuras e desconfortáveis para os humanos!). Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Programas I I É necessário construir linguagens mais adequadas, que facilitem a tarefa de programar um computador; Uma linguagem de programação é uma técnica de notação para programar, com a intenção de servir de veículo tanto para a expressão do raciocínio algorítmico quanto para a execução automática de um algoritmo por um computador. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Tipo Abstrato de Dados - TAD Encapsula ED + Operações Vantagem: A alteração no módulo de implementação não altera o módulo de interface. Referências Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Tipo Abstrato de Dados I São utilizados extensivamente como base para o projeto de algoritmos; I A implementação do algoritmo em uma linguagem de programação específica exige a representação do TAD em termos dos tipos de dados e dos operadores suportados; I A representação do modelo matemático por trás do tipo abstrato de dados é realizada mediante uma estrutura de dados. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Referências Comer, D. E., Gries, D., Mulder, M. C., Tucker, A., Turner, A. J., and Young, P. R. (1989). Computing as a discipline. Commun. ACM, 32(1):9–23. de Holanda Ferreira, A. B. (1986). Novo Dicionário da Língua Portuguesa. Nova Fronteira S.A., Rio de Janeiro, RJ. Diversos (2005). Material Didático das Disciplinas de Estruturas de Dados I e II — Unesp e USP. Knuth, D. E. (1997). The art of computer programming, volume 1 (3rd ed.): fundamental algorithms. Addison Wesley Longman Publishing Co., Inc., Redwood City, CA. Introdução Conceitos Tipos de Dados Estruturas de Dados Tipo Abstrato de Dados Ziviani, N. (2004). Projeto de Algoritmos. Thomson Learning, São Paulo, SP, 2 edition. Referências