Escolar Documentos
Profissional Documentos
Cultura Documentos
Estruturas de Dados
Lio 1
Conceitos Bsicos e Notaes
JEDITM
Autor Joyce Avestro Equipe Joyce Avestro Florence Balagtas Rommel Feria Reginald Hutcherson Rebecca Ong John Paul Petines Sang Shin Raghavan Srinivas Matthew Thompson
Sistemas Operacionais Suportados NetBeans IDE 5.5 para os seguintes sistemas operacionais: Microsoft Windows XP Profissional SP2 ou superior Mac OS X 10.4.5 ou superior Red Hat Fedora Core 3 Solaris 10 Operating System (SPARC e x86/x64 Platform Edition) NetBeans Enterprise Pack, poder ser executado nas seguintes plataformas: Microsoft Windows 2000 Profissional SP4 Solaris 8 OS (SPARC e x86/x64 Platform Edition) e Solaris 9 OS (SPARC e x86/x64 Platform Edition) Vrias outras distribuies Linux Configurao Mnima de Hardware Nota: IDE NetBeans com resoluo de tela em 1024x768 pixel Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 500 MHz Intel Pentium III workstation ou equivalente 500 MHz Intel Pentium III workstation ou equivalente UltraSPARC II 450 MHz AMD Opteron 100 Srie 1.8 GHz PowerPC G4 Memria 512 MB 512 MB 512 MB 512 MB 512 MB HD Livre 850 MB 450 MB 450 MB 450 MB 450 MB
Configurao Recomendada de Hardware Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 1.4 GHz Intel Pentium III workstation ou equivalente 1.4 GHz Intel Pentium III workstation ou equivalente UltraSPARC IIIi 1 GHz AMD Opteron 100 Series 1.8 GHz PowerPC G5 Memria 1 GB 1 GB 1 GB 1 GB 1 GB HD Livre 1 GB 850 MB 850 MB 850 MB 850 MB
Requerimentos de Software NetBeans Enterprise Pack 5.5 executando sobre Java 2 Platform Standard Edition Development Kit 5.0 ou superior (JDK 5.0, verso 1.5.0_01 ou superior), contemplando a Java Runtime Environment, ferramentas de desenvolvimento para compilar, depurar, e executar aplicaes escritas em linguagem Java. Sun Java System Application Server Platform Edition 9. Para Solaris, Windows, e Linux, os arquivos da JDK podem ser obtidos para sua plataforma em http://java.sun.com/j2se/1.5.0/download.html Para Mac OS X, Java 2 Plataform Standard Edition (J2SE) 5.0 Release 4, pode ser obtida diretamente da Apple's Developer Connection, no endereo: http://developer.apple.com/java ( necessrio registrar o download da JDK). Para mais informaes: http://www.netbeans.org/community/releases/55/relnotes.html
Estruturas de Dados
JEDITM
Auxiliadores especiais
Reviso Geral do texto para os seguintes Pases:
Brasil Tiago Flach Guin Bissau Alfredo C, Bunene Sisse e Buon Olossato Quebi ONG Asas de Socorro
Coordenao do DFJUG
Daniel deOliveira JUGLeader responsvel pelos acordos de parcerias Luci Campos - Idealizadora do DFJUG responsvel pelo apoio social Fernando Anselmo - Coordenador responsvel pelo processo de traduo e reviso, disponibilizao dos materiais e insero de novos mdulos Rodrigo Nunes - Coordenador responsvel pela parte multimdia Srgio Gomes Veloso - Coordenador responsvel pelo ambiente JEDITM (Moodle)
Agradecimento Especial
John Paul Petines Criador da Iniciativa JEDITM Rommel Feria Criador da Iniciativa JEDITM
Estruturas de Dados
JEDITM
1. Objetivos
Na criao de soluo para os processos de resoluo de problemas, existe a necessidade de representao dos dados em nvel mais alto a partir de informaes bsicas e estruturas disponveis em nvel de mquina. Existe tambm a necessidade de se sintetizar o algoritmo a partir das operaes bsicas disponveis em nvel de mquina para manipular as representaes em alto nvel. Estas duas caractersticas so muito importantes para obteno do resultado desejado. Estruturas de dados (Data Structures) so necessrias para a representao dos dados, enquanto que os algoritmos precisam operar no dado para obter a sada correta. Nesta lio iremos discutir os conceitos bsicos por detrs do Processo Resoluo de Problemas (Problem Solving), tipos de dados, tipos de dados abstratos, algoritmos e suas propriedades, mtodos de endereamento, funes matemticas e complexidade dos algoritmos. Ao final desta lio, o estudante ser capaz de: Explicar os processos de resoluo de problemas Definir tipos de dados (data type), tipos de dados abstratos (abstract data type) e estrutura de dados (data structure) Identificar as propriedades de um algoritmo Diferenciar os dois mtodos de endereamento endereamento computado e endereamento por link Utilizar as funes matemticas bsicas para analisar algoritmos Mensurar a complexidade dos algoritmos expressando a eficincia em termos de complexidade de tempo e notao Big-O
Estruturas de Dados
JEDITM
Estruturas de Dados
JEDITM
Tipo de dado abstrato (Abstract Data Type ADT) um modelo matemtico contendo uma coleo de operadores. Ele especifica um tipo de dado armazenado, o que a operao faz, mas no como feito. Um ADT pode ser expresso por uma interface que contm apenas uma lista de mtodos. Por exemplo, esta uma interface para a stack ADT: public interface Stack{ public int size(); // retorna o tamanho da stack public boolean isEmpty(); // verifica se est vazia public Object top() throws StackException; public Object pop() throws StackException; public void push(Object item) throws StackException; } Estrutura de dados a implementao de um TDA em termos de tipos de dados ou outras estruturas de dados. Uma estrutura de dados modelada atravs de classes. Classes especificam como as operaes so executadas. Para implementar um TDA como uma estrutura de dados, uma interface implementada atravs de uma classe. Abstrao e representao ajudam-nos a entender os princpios por detrs dos grandes sistemas de software. Encapsulamento de informao pode ser utilizada junto com abstrao para particionar um sistema grande em subsistemas menores com interfaces simples que so mais fceis de entender e utilizar.
Estruturas de Dados
JEDITM
4. Algoritmo
Algoritmo um conjunto finito de instrues que, se seguidas corretamente, completam uma determinada tarefa. Possui cinco importantes propriedades: finito, definido, entrada, sada e efetivo. Finito quer dizer que um algoritmo sempre ter um fim aps um nmero finito de passos. Definido a garantia de que todos os passos do algoritmo foram precisamente definidos. Por exemplo: dividir por um nmero x no suficiente. O nmero x deve ser precisamente definido, ou seja, x deve ser inteiro e positivo. Entrada o domnio do algoritmo que pode ser nenhum (zero) ou vrios. Sada o conjunto de um ou mais resultados que tambm chamado de alcance do algoritmo. Efetivo a garantia de que todas as operaes do algoritmo so suficientemente simples de maneira que tambm possam, a princpio, ser executadas, em um tempo exato e finito, por uma pessoa utilizando papel e caneta. Considere o seguinte exemplo: public class Minimum { public static void main(String[] args) { int a[] = { 23, 45, 71, 12, 87, 66, 20, 33, 15, 69 }; int min = a[0]; for (int i = 1; i < a.length; i++) { if (a[i] < min) min = a[i]; } System.out.println("The minimun value is: " + min); } } A classe acima obtm o valor mnimo de um array de inteiros. No h entrada de dados por parte do usurio uma vez que o array j est pronto dentro da classe. Para cada propriedade de entrada e sada cada passo da classe precisamente definido; neste ponto esta poder ser definida. A declarao do lao for e suas respectivas sadas tero um nmero finito de execuo. Logo, a propriedade finito satisfeita. E quando executado, a classe retornar o valor mnimo entre os valores do array, e por isso dito efetivo. Todas as propriedades devem ser garantidas na construo de um algoritmo.
Estruturas de Dados
JEDITM
5. Mtodos de Endereamento
Na criao de uma estrutura de dados importante definir como acessar estes dados. Isto determinado pelo mtodo de acesso a dados. Existem dois tipos de mtodos de endereamento mtodo calculado e mtodo de endereamento computado e por link.
Em Java: public class Node { public Object info; public Node link; public info } public info link } } Node(Object o) { = o;
Node(Object o, Node n) { = o; = n;
Estruturas de Dados
A seguir uma classe Java chamada AvailList: public class AvailList { private Node head; public AvailList() { head = null; } public AvailList(Node n){ head = n; }
Criando uma lista disponvel atravs de uma simples declarao: AvailList avail = new AvailList();
enquanto o mtodo a seguir na classe Avail retorna um node para a lista disponvel: public void setNode(Node n) { n.link = head.link; // Adiciona o novo node no incio da lista disponvel head.link = n; }
Estruturas de Dados
JEDITM
Os dois mtodos poderiam ser usados por estruturas de dados que usam alocao de ligao para pegar os nodes e retorn-los para o pool de memria. E como teste final teremos a seguinte classe: public class TestNodes { public static void main(String [] args) { Node n1 = new Node("1"); Node n2 = new Node("2", n1); Node n3 = new Node("3", n2); Node n4 = new Node("4", n3); AvailList avail = new AvailList(n4); System.out.println(avail.getNode().info); System.out.println(avail.getNode().link.info); System.out.println(avail.getNode().link.link.info); System.out.println(avail.getNode().link.link.link.info); } }
Estruturas de Dados
10
JEDITM
6. Funes Matemticas
Funes matemticas so teis na criao e na anlise de algoritmos. Nesta seo, algumas das funes mais bsicas e mais comumente usadas e suas propriedades sero mostradas. Floor de x o maior inteiro menor que ou igual a x, onde x um nmero real qualquer. Notao: x ex. 3.14 = 3 1/2 = 0 -1/2 = - 1
Ceil de x o menor inteiro maior que ou igual a x, onde x um nmero real qualquer. Notao : x ex. 3.14 = 4 1/2 = 1 -1/2 = 0
Mdulo - Dados quaisquer dois nmeros reais x e y, x mod y definido como x mod y ex. =x =x-y* x/y se y = 0 se y <> 0
6.1. Identidades
O que segue so identidades relacionadas s funes matemticas definidas acima: x=x se e somente se x um inteiro x>x se e somente se x no um inteiro - x = - x x + y <= x + y x = x + x mod 1 z ( x mod y ) = zx mod zy
Estruturas de Dados
11
JEDITM
7. Complexidade de Algoritmos
Diversos algoritmos podem ser criados para resolver um nico problema. Estes algoritmos podem variar no modo de obter, processar e dar sada nos dados. Com isso, eles podem ter diferena significativa em termos de performance e utilizao de memria. importante saber como analisar os algoritmos, e saber como medir a eficincia dos algoritmos ajuda bastante no processo de anlise.
T(n), onde T a funo e n o tamanho da entrada. Existem vrios fatores que afetam o tempo de execuo. Eles so: Tamanho da entrada Tipo da instruo Velocidade da mquina Qualidade do cdigo-fonte da implementao do algoritmo Qualidade do cdigo de mquina gerado pelo compilador
Algoritmo Busca Binria Busca Seqencial Heapsort Insero Ordenada Algoritmo de Floyd
Estruturas de Dados
12
JEDITM
Big-O O( 2 )
n
Descrio Exponencial
Algoritmo
Para tornar clara a diferena, vamos efetuar a comparao baseada no tempo de execuo onde n=100000 e a unidade de tempo = 1 mseg: F(n) log2n n n log2n n n
2 3
Tempo de Execuo 19.93 microssegundos 1.00 segundos 19.93 segundos 11.57 dias 317.10 sculos Eternidade
Tabela 3: Tempo de execuo
2n
Sendo assim, T(n) = T1(n) + T2(n) = O( max( f(n), g(n) ) ). Por exemplo, 1. T(n) = 3n3 + 5n2 = O(n3) 2. T(n) = 2n + n4 + nlog2n = O(2n) 2. Regra para Multiplicao Suponha que T1(n) = O( f(n) ) e T2(n) = O( g(n) ). Ento, T(n) = T1(n) * T2(n) = O( f(n) * g(n) ). Por exemplo, considere o algoritmo abaixo: for (int i=1; i < n-1; i++) for (int i=1; i <= n; i++) // as iteraes so executadas O(1) vezes J que as iteraes no lao mais interno so executadas:
Estruturas de Dados
13
JEDITM
Estruturas de Dados
14
JEDITM
J que g(n) <= c f(n) para n >= n0, ento 2n + 4 <= cn 2n + 4 <= c --------n 2 + 4/n <= c Assim c = 4 e n0 = 3. Seguem abaixo as regras gerais para se determinar o tempo de execuo de um algoritmo: Laos FOR Tempo de execuo da declarao dentro do lao FOR vezes o nmero de iteraes.
Laos FOR ANINHADOS A Anlise feita a partir do lao mais interior para fora. O tempo total de execuo de uma declarao dentro de um grupo de lao FOR o tempo de execuo da declarao, multiplicado pelo produto dos tamanhos de todos os laos FOR.
Condicional IF/ELSE Quanto maior o tempo de execuo do teste, maior ser o tempo de execuo do bloco condicional.
Estruturas de Dados
15
JEDITM
8. Exerccios
a) Funes Piso, Teto e Mdulo. Compute para os valores resultantes: a) b) c) d) e) f) g) -5.3 6.14 8 mod 7 3 mod 4 5 mod 2 10 mod 11 (15 mod 9) + 4.3
b) Qual a complexidade de tempo do algoritmo com os seguintes tempos de execuo? a) b) c) d) 3n5 + 2n3 + 3n +1 n3/2+n2/5+n+1 n5+n2+n n3 + lg n + 34
c) Imagine que tenhamos duas partes em um algoritmo, sendo que a primeira parte toma T(n1)=n3+n+1, tempo para executar e a segunda parte toma T(n2) = n5+n2+n. Qual a complexidade do algoritmo, se a parte 1 e a parte 2 forem executadas uma de cada vez? d) Ordene as seguintes complexidades de tempo em ordem ascendente. 0(n log2 n) 0(1) 0(n2) 0(n3) 0(n) 0(nn) 0(log2 n) 0(2n) 0(n2 log2 n) 0(log2 log2 n)
e) Qual o tempo de execuo e a complexidade de tempo do algoritmo abaixo? void warshall(int A[][], int C[][], int n){ for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) A[i][j] = C[i][j]; for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) for (int k=1; k<=n; k++) if (A[i][j] == 0) A[i][j] = A[i][k] & A[k][j]; }
Estruturas de Dados
16
JEDITM
Instituto CTS Patrocinador do DFJUG. Sun Microsystems Fornecimento de servidor de dados para o armazenamento dos vdeo-aulas. Java Research and Development Center da Universidade das Filipinas Criador da Iniciativa JEDITM. DFJUG Detentor dos direitos do JEDITM nos pases de lngua portuguesa. Banco do Brasil Disponibilizao de seus telecentros para abrigar e difundir a Iniciativa JEDITM. Politec Suporte e apoio financeiro e logstico a todo o processo. Borland Apoio internacional para que possamos alcanar os outros pases de lngua portuguesa. Instituto Gaudium/CNBB Fornecimento da sua infra-estrutura de hardware de seus servidores para que os milhares de alunos possam acessar o material do curso simultaneamente.
Estruturas de Dados
17