• Nenhum resultado encontrado

Algoritmos e Estruturas de Dados I LISTAS. Prof. Tiago Eugenio de Melo

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmos e Estruturas de Dados I LISTAS. Prof. Tiago Eugenio de Melo"

Copied!
75
0
0

Texto

(1)

Algoritmos e Estruturas de Dados I

LISTAS

Prof. Tiago Eugenio de Melo

tmelo@uea.edu.br www.tiagodemelo.info

(2)

2/75

Observações

● O conteúdo dessa aula é parcialmente

proveniente do Capítulo 5 do livro “Data

Structures and Algorithms in Python”.

● As palavras com a fonte Courier indicam uma

palavra-reservada da linguagem de programação.

(3)

3/75

Introdução

Python tem os tipos primitivos list, tuple e str. ● Cada um desses tipos é uma sequência que

suporta indexar o acesso a cada elemento de uma sequência, usando uma sintaxe tal como A[i].

● Cada um desses tipos usa um array para

representar a sequência:

– Um array (~vetor) é um conjunto de memória alocada

que pode ser acessada usando índices consecutivos. A

(4)

4/75

Arrays

● Podemos considerar um array como um grupo

de variáveis que podem ser armazenadas em uma porção contínua de memória.

(5)

Arrays

● Exemplo:

– Python representa um caracter com 16 bits (2

bytes).

– Portanto, a string 'SAMPLE' seria representada

assim:

(6)

Array (referências)

(7)

Array (referências)

● Considere que queremos armazenar uma lista

de nomes em Python.

(8)

Array (referências)

● Considere que queremos armazenar uma lista

de nomes em Python.

● Exemplo:

(9)

Array (referências)

● Considere que queremos armazenar uma lista

de nomes em Python.

● Exemplo:

(10)

Array (referências)

● Considere que queremos armazenar uma lista

de nomes em Python.

● Exemplo:

● Cada elemento é uma string, mas naturalmente

cada string terá um tamanho diferente.

(11)

Array (referências)

● Considere que queremos armazenar uma lista de

nomes em Python.

● Exemplo:

● Cada elemento é uma string, mas naturalmente

cada string terá um tamanho diferente.

● Python representa uma lista ou tupla usando um

mecanismo de um array de referências a objetos.

(12)

Array (referências)

(13)

Array (referências)

● Exemplo:

(14)

Array (referências)

● Exemplo:

(15)

Array (referências)

● Exemplo:

● Embora os tamanhos dos nomes possam variar, a

quantidade de bits usados para armazenar o endereço de cada elemento é fixo.

(16)

Array (referências)

● Exemplo:

● Embora os tamanhos dos nomes possam variar, a quantidade

de bits usados para armazenar o endereço de cada elemento é fixo.

● Assim, Python pode realizar o tempo constante de acesso aos

elementos de uma lista e tupla baseado no seu índice.

(17)

Array (referências)

● Considere:

(18)

Array (referências)

● Considere:

– primes = [2, 3, 5, 7, 11, 13, 17, 19]

(19)

Array (referências)

● Considere:

– primes = [2, 3, 5, 7, 11, 13, 17, 19] – temp = primes[3:6]

(20)

Array (referências)

● Considere:

– primes = [2, 3, 5, 7, 11, 13, 17, 19] – temp = primes[3:6]

(21)

Array (referências)

● Considere:

– primes = [2, 3, 5, 7, 11, 13, 17, 19] – temp = primes[3:6]

O que acontece em: temp[2] = 15

(22)

Array (referências)

● Considere:

– primes = [2, 3, 5, 7, 11, 13, 17, 19] – temp = primes[3:6]

O que acontece em: temp[2] = 15

(23)

Array (referências)

● Considere:

(24)

Array (referências)

● Considere:

– counters = [0] * 8

(25)

Array (referências)

● Considere:

– counters = [0] * 8

(26)

Array (referências)

● Considere:

– counters = [0] * 8

O que acontece em: counters[2] += 1

(27)

Array (referências)

● Considere:

– counters = [0] * 8

O que acontece em: counters[2] += 1

(28)

Array (referências)

● E no caso de extend?

(29)

Array (referências)

● E no caso de extend?

(30)

Compact Arrays

(31)

Compact Arrays

● Strings em Python são representadas como um

array de caracteres (e não um array de referências).

(32)

Compact Arrays

● Strings em Python são representadas como um

array de caracteres (e não um array de referências).

● Esse tipo de representação é também

chamada de compact array porque o array está armazenando os bits que representam os

dados primários (caracteres, no caso das strings).

(33)

Compact Arrays

● Strings em Python são representadas como um

array de caracteres (e não um array de referências).

● Esse tipo de representação é também

chamada de compact array porque o array está armazenando os bits que representam os

dados primários (caracteres, no caso das strings).

(34)

Compact Arrays

● Compact arrays têm algumas vantagens sobre

estruturas referenciais em termos de performance computacional:

(35)

Compact Arrays

● Compact arrays têm algumas vantagens sobre

estruturas referenciais em termos de performance computacional:

– Em geral, a quantidade de memória é menor.

(36)

Compact Arrays

● Compact arrays têm algumas vantagens sobre

estruturas referenciais em termos de performance computacional:

– Em geral, a quantidade de memória é menor. – Os dados primários são armazenados

consecutivamente na memória.

(37)

Compact Arrays

(38)

Compact Arrays

● Esse recurso está disponível em um módulo

chamado array.

(39)

Compact Arrays

● Esse recurso está disponível em um módulo

chamado array.

● Este módulo define uma classe, também

chamada de array, fornecendo armazenamento compact para arrays de tipos de dados

primitivos.

(40)

Compact Arrays

● Esse recurso está disponível em um módulo

chamado array.

● Este módulo define uma classe, também

chamada de array, fornecendo armazenamento compact para arrays de tipos de dados

primitivos.

Os inteiros aqui são armazenados compactadamente como elementos

de um array de Python

(41)

Compact Arrays

● Exemplo:

(42)

Compact Arrays

● Exemplo:

(43)

Compact Arrays

● Exemplo:

(44)

Compact Arrays

● Exemplo:

(45)

Compact Arrays

● Exemplo:

(46)

Compact Arrays

● Exemplo:

(47)

Compact Arrays

● Tipos de códigos suportados pelo módulo

array:

(48)

Array Dinâmico

(49)

Array Dinâmico

● Python possui uma classe altamente otimizada

para arrays dinâmicos.

(50)

Array Dinâmico

● Python possui uma classe altamente otimizada

para arrays dinâmicos.

● Porém, a ideia geral é fazer isso nos seguintes

passos:

(51)

Array Dinâmico

● Python possui uma classe altamente otimizada

para arrays dinâmicos.

● Porém, a ideia geral é fazer isso nos seguintes

passos:

– Aloca um novo array B (maior que A).

(52)

Array Dinâmico

● Python possui uma classe altamente otimizada

para arrays dinâmicos.

● Porém, a ideia geral é fazer isso nos seguintes

passos:

– Aloca um novo array B (maior que A).

(53)

Array Dinâmico

● Python possui uma classe altamente otimizada

para arrays dinâmicos.

● Porém, a ideia geral é fazer isso nos seguintes

passos:

– Aloca um novo array B (maior que A). – Armazena os elementos de A em B.

(54)

Array Dinâmico

● Python possui uma classe altamente otimizada

para arrays dinâmicos.

● Porém, a ideia geral é fazer isso nos seguintes

passos:

– Aloca um novo array B (maior que A). – Armazena os elementos de A em B.

(55)

Array Dinâmico

● Python possui uma classe altamente otimizada

para arrays dinâmicos.

● Porém, a ideia geral é fazer isso nos seguintes

passos:

– Aloca um novo array B (maior que A). – Armazena os elementos de A em B. – Muda as referências de A.

(56)

Array Dinâmico

● Python possui uma classe altamente otimizada

para arrays dinâmicos.

● Porém, a ideia geral é fazer isso nos seguintes

passos:

– Aloca um novo array B (maior que A). – Armazena os elementos de A em B. – Muda as referências de A.

(57)

Array Dinâmico

● Python possui uma classe altamente otimizada

para arrays dinâmicos.

● Porém, a ideia geral é fazer isso nos seguintes

passos:

– Aloca um novo array B (maior que A). – Armazena os elementos de A em B. – Muda as referências de A.

garbage collector

(58)

Exemplo Prático

● Estrutura para armazenar jogadores com os

maiores scores.

(59)

Exemplo Prático

● Estrutura para armazenar jogadores com os

maiores scores.

(60)

Exemplo Prático

● Estrutura para armazenar jogadores com os

maiores scores.

nome

(61)

Exemplo Prático

● Estrutura para armazenar jogadores com os

maiores scores.

nome score

(62)

Exemplo Prático

(63)

Exemplo Prático

● Versão inicial

(64)

Exemplo Prático

● Versão inicial

● Adicionando um novo elemento

(65)

Exemplo Prático

● Versão inicial

● Adicionando um novo elemento

(66)

Exemplo Prático

● Classe GameEntry

cria um objeto (name, score) retorna o nome

retorna o score

retorna o par (nome, score)

(67)

Exemplo Prático

● Classe GameEntry

retorna o nome retorna o score

retorna o par (nome, score)

(68)

Exemplo Prático

● Classe GameEntry

retorna o score

retorna o par (nome, score)

(69)

Exemplo Prático

● Classe GameEntry

retorna o par (nome, score)

(70)

Exemplo Prático

● Classe GameEntry

(71)

Exemplo Prático

método construtor

retorna uma entrada

retorna uma string com a representação do maior score

adiciona um objeto

(72)

Exemplo Prático

retorna uma entrada

retorna uma string com a representação do maior score

adiciona um objeto

(73)

Exemplo Prático

retorna uma string com a representação do maior score

adiciona um objeto

(74)

Exemplo Prático

adiciona um objeto

(75)

Exemplo Prático

Referências

Documentos relacionados

Como forma de operacionalizar a organização e o trabalho da rede de atenção aos usuários de drogas, a PAIUAD pressupõe o tratamento e reinserção social dos usuários/dependentes

Os resultados mostram que tanto o Grau de Intangibilidade quanto o Retorno sobre Investimentos das empresas do setor de Consumo Cíclico são superiores aos do de

Objeto: Pregão Eletrônico - Re- gistro de Preços para a eventual aquisição de materiais de audiovisual e tecnologia da informação para atender ao Campus Blumenau da

A incidência de FO no estado de Sergipe obtida através dos dados do SINASC, no mesmo período da pesquisa, foi de 0,54 novos casos de fissura para cada 1000 nascidos vivos..

Entretanto, encontramos evidências neste trabalho de que estas variáveis não satisfazem as condições para serem utilizadas como instrumentos (Cap.2, seção 3.1.).

Assim como a Natureza, a leitura de folhetos de cordel constituiu uma fonte de inspiração para fazer poesia.. Na comunidade em que vivia Patativa, a leitura dos folhetos de

As quinolonas já têm sido relatadas como seguras para o tratamento da otite, sem apresentar sinais de ototoxicidade nos animais (GOTTHELF, 2004), e não foram observados

Observações como esta ganham peso ainda maior quando se leva em conta que, num país desprovido de cultura científica, os veículos de comunicação representam o canal mais