Documente Academic
Documente Profesional
Documente Cultură
Introduc
ao - Aula 0
Fig. 1. Ilustraca
o Torre de Han
oi
Real(float)
N
ao n
umericos:
Booleano(l
ogico): True, False
Caracter(string): a, @, nome
Tipos de operadores:
Relacionais: ==(igual comparativo), / = (diferente), > (maior que), <=
(menor ou igual)
L
ogicos: and, or, not (e, ou, nao)
Aritmeticos: +, -, /, * (multiplicacao), (potenciacao)
Obs.1: Operadores l
ogicos e relacionais resultam em valores booleanos (True
ou False)
Obs.2: O sinal = representa atribuicao. Assim, x = 4 significa x recebe 4.
Portanto, o sinal comparativo de igualdade e, em geral ==. Ou seja, x == 4
resulta em True ou False, dependendo do que existe neste identificador.
Obs.3: Para usar um valor literal e necessario usar aspas (em algumas linguagens n
ao h
a distinc
ao entre aspas simples ou dupla). Portanto x e uma string
e x e um identificador que, caso nao esteja definido, ira resultar em erro.
Obs.4: Os operados podem mudar de acordo com a linguagem.
Estruturas de controle: (Comandos de sele
c
ao) Comandos if then(se
ent
ao) e else(sen
ao). O comando if executa um bloco especfico se, e somente
se, a condic
ao testada for verdadeira. No caso em que a condicao testada e falsa,
o bloco relacionado ao else sera executado. O comando if nao necessariamente
e seguido de else, no entanto, o comando else sempre e precedido por um bloco
relacionado a um if e, sempre e executado no caso de falha do u
ltimo if no mesmo
bloco de hierarquia.
Algoritmo: MostraModulo
read x
if x < 0 then
print x
else
print x
Obs.1: Em geral comandos da forma print sao usados para dados que serao
mostrados na tela e write para dados que serao escritos em arquivos.
Algoritmo: IndicaMultiplo5
read x
if mod(x, 5) == 0 then
print x, e multiplo de 5
A func
ao mod(x, y) retorna o resto da divisao de x por y, pode ser representado pelo operador %, x%y.
No algoritmo IndicaMultiplo5, caso o n
umero nao seja multiplo de 5, o que
ir
a aparecer na tela?
Estruturas aninhadas: s
ao comandos de selecao (if then e else) que possuem
outros comandos de selec
ao.
Obs.: N
ao h
a restric
ao ao tipo ou quantidade de instrucoes que serao inseridas
em um bloco de selec
ao.
Exerccio: Dado o pseudocodigo abaixo, qual sera a sada no monitor para o
caso em que x e A, B, C e D respectivamente?
Algoritmo: Exerccio 2
read x
if x == A then
print azul
x = C
if x/ = B then
print verde
x = B
else
print vermelho
print cinza
Existe alguma cor que sempre sera escrita? E, alguma que nunca sera escrita?
Escreva um algoritmo com estruturas de selecao (if then, else) encadeadas para
obter os mesmos resultados impressos pelo programa Exerccio 2. Escreva o
c
odigo em fluxograma.
Estruturas de repeti
c
ao:
While(Enquanto): repete o bloco enquanto a condicao, a ele associada, for
verdadeira.
Algoritmo: ExemploWhile
x=1
#valor inicial de x e 1
while x/ = 0
read x
print x
Obs.1: No comando while a condicao e verificada antes da execucao do bloco.
Portanto o bloco pode n
ao ser executado, por exemplo se tivessemos x = 0
i=1
# p e um vetor com 4 posicoes
function CalculaMedia(p)
m = (p[1] + p[2] + p[3] + p[4])/4.
return m
function main()
p = p(4)
LerNotas(p)
print CalculaMedia(p)
Algoritmos de ordenac
ao e busca - Aula 1 e 2
subroutine OrdenaSelectionSort(v)
for i = (1, lengh(v) 1)
min = i
for j = (i + 1, lengh(v))
if v[j] < v[i] then
min = j
aux = v[i]
v[i] = v[min]
v[min] = aux
Algoritmo: InsertionSort
subroutine OrdenaInsertionSort(v)
for j = (2, lengh(v))
key = v[j]
i=j1
while (i > 0 and v[i] > key)
v[i + 1] = v[i]
i=i1
v[i + 1] = key
Algoritmo: BubbleSort
subroutine OrdenaBubbleSort(v)
for i = (1, lengh(v))
for j = (i + 1, lengh(v))
if v[j] < v[i] then
aux = v[i]
v[i] = v[j]
v[j] = aux
O Quick Sort e um dos metodo mais rapidos de ordenacao, apesar de `as vezes
partic
oes desequilibradas poderem conduzir a uma ordenacao lenta. Esse metodo
de ordenac
ao utiliza a tecnica divide and conquer (dividir o problema inicial em
dois subproblemas e resolver um problema menor utilizando a recursividade).
Algoritmo: QuickSort
function Particiona(v, p, r)
pivot = v[r]
i=p1
for j = (p, r)
if v[j] <= pivot then
i=i+1
aux = v[i]
v[i] = v[j]
v[j] = aux
return i
subroutine OrdenaQuickSort(v, p, r)
if p < r then
q = P articiona(v, p, r)
OrdenaQuickSort(v, p, q 1)
OrdenaQuickSort(v, q + 1, r)
Exerccio 10: Considere o caso onde todos os pivos do quick sort dividem a
lista numa lista vazia e numa lista que contem todos os elementos maiores que
o piv
o. Este caso degenerado do quick sort e equivalente a outro algoritmo de
ordenac
ao?
Exerccio 11: Pesquise e discuta como o metodo do pivo sofisticado pode ajudar
na eficiencia do algoritmo do quick sort?
Exerccio 12: Explique porque para a Lista = (9, 8, 7, 6, 5, 4, 3, 2, 1) o metodo
de ordenac
ao Quick Sort e pouco eficiente.
Exerccio 13: Em termos de complexidade e eficiencia, compare os metodos de
ordenac
ao Selection Sort, Insertion Sort, Bubble Sort e Quick Sort.
Existem outros metodos de ordenacao mais eficientes, alguns com complexidade linear, no entanto os principais sao os 4 apresentados e Merge Sort.
Introduc
ao a complexidade de algoritmos - Aula 3
compar
a-los e escolher o mais adequado.
usual ignorar o custo de algumas das operacoes e considerar apenas as
E
operac
oes mais significativas.
Por exemplo, em algoritmos de ordenacao considera-se o n
umero de comparac
oes entre os elementos do conjunto a ser ordenado e ignoramos as operacoes
aritmeticas, de atribuic
ao e ma- nipulacoes de ndices, caso existam.
Algoritmo: ExemploComplexidade
function maximo(v)
max = v[1]
for i=(2,lengh(v))
if v[i]>max then
max = v[i]
return max
O Algoritmo ExemploComplexidade sempre faz n 1 comparacoes para retornar o maior elemento do conjunto.
Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto, n
ao vazio, com n elementos faz pelo menos n 1 comparacoes.
O teorema acima nos diz que, se o n
umero de comparacoes for utilizado como
medida de custo, ent
ao a funcao maximo do Algoritmo ExemploComplexidade
anterior e
otima.
Para um algoritmo de ordenacao a complexidade depende de quao ordenados
est
ao os dados de entrada: se os dados de entrada ja estiverem quase ordenados,
ent
ao o algoritmo pode ter que trabalhar menos.
Melhor caso, pior caso e caso m
edio
Melhor caso:
Menor tempo de execuc
ao sobre todas as entradas de tamanho n.
Pior caso:
Maior tempo de execuc
ao sobre todas as entradas de tamanho n.
Se f
e uma fun
c
ao de complexidade baseada na an
alise de pior
caso, o custo de aplicar o algoritmo nunca
e maior do que f (n).
Caso medio (ou caso esperado):
Media dos tempos de execucao de todas as entradas de tamanho n.
Na an
alise do caso esperado, supoe-se uma distribuicao de probabilidades
sobre o conjunto de entradas de tamanho n e o custo medio e obtido com base
nessa distribuic
ao.
A an
alise do caso medio e geralmente muito mais difcil de obter do que as
an
alises do melhor e do pior caso.
comum supor uma distribuicao de probabilidades em que todas as entradas
E
possveis s
ao igualmente provaveis. Na pratica isso nem sempre e verdade.
A qualidade da soluc
ao de um problema depende, entre outros fatores, da forma
como os dados est
ao organizados. Para tanto, desenvolveu-se uma classe de modelos de estrutura de dados (formas genericas de se estruturar informacoes de
modo a serem registradas e processadas pelo computador) que viabilizam o processamento de dados de acordo com o problema. Algumas estruturas de dados
s
ao listas, vetores, matrizes, pilhas, filas, grafos, avores e dicionarios. No entanto, estas estruturas s
o possuem significado quando associadas a um conjunto
de operac
oes de manipulacao das mesmas.
Listas lineares
Lista linear e uma estrutura de dados na qual elementos de um mesmo tipo
de dado est
ao organizados de maneira sequencial. Nao necessariamente, estes
elementos est
ao fisicamente em sequencia, mas a ideia e que exista uma ordem
l
ogica entre eles. Por exemplo quando sao distribudas senhas em um banco,
as pessoas n
ao est
ao em ordem fisicamente mas existe uma sequencia que as
organiza.
Pilha (Stack):
Uma pilha e uma lista linear do tipo LIFO - Last In First Out, o u
ltimo elemento que entrou, e o primeiro a sair. Ela possui apenas uma entrada, chamada
de topo, a partir da qual os dados entram e saem dela. Exemplos de pilhas sao:
pilha de pratos, pilha de livros, pilha de alocacao de variaveis da memoria, etc.
Fila (Queue)
Uma fila e uma lista linear do tipo FIFO - First In First Out, o primeiro
elemento a entrar ser
a o primeiro a sair. Na fila os elementos entram por um
lado (por tr
as) e saem por outro (pela frente). Exemplos de filas sao: a fila
de caixa de banco, a fila do INSS, etc. deques
Deque
Um deque - Double-Ended QUEue) e uma lista linear na qual os elementos
entram e saem tanto pela pela frente quantopor tras. Pode ser considerada
uma generalizac
ao da fila.
Exerccio 23: Discuta as diferencas entre fila, pilha, lista e deque em termos
de implementac
ao e utilizac
ao.
Exerccio 24: Faca uma esquema para mostar o funcionamento da fila, da lista
e da pilha.
Aloca
c
ao Sequencial ou contgua: A insercao de um proximo item pode
ser realizada ap
os o u
ltimo item com custo constante. A insercao de um novo
item no meio da lista, sem que o elemento da posicao seja trocado, requer um
deslocamento de todos os itens localizados apos o ponto de intersecao. (Em
algumas linguagens, retirar um elemento que nao seja o u
ltimo elemento de uma
lista, tambem requer realocar todos os demais afim de preencher o espaco vazio)
Exerccio 25 Escreva um algoritmo que insere um valor x na posicao k de
uma lista linear sequencial com m > k elementos. Ao final a lista tera m + 1
elementos.
Exerccio 26: Utilizando as operacoes elementares da lista, apresentadas nesta
aula, escreva subalgoritimos que implementem funcoes elementares de pilha e
fila a partir de uma lista. Quais seriam estas operacoes elementares?
Exerccio 27 Escreva um algoritmo que dada uma lista sequencial linear, escreve os elementos da lista em ordem inversa.
Exerccio 28 Escreva um algoritmo que verifica se uma string e um palndromo
(uma palavra ou frase e um palndromo se pode ser lida, indiferentemente do
sentido de leitura por exemplo, a palavra REVER). Considere split(string) uma
func
ao que retorna uma lista em sequencia com as letras de uma string.
Exerccio 29 Discuta as vantagens e desvantagens da utilizacao de uma lista
est
atica.
Aloca
c
ao encadeada: Os elementos nao estao necessariamente armazenados
sequencialmente na mem
oria, porem a ordem logica entre os elementos que
comp
oem a lista deve ser mantida.
ponteiro: um tipo u
nico de variavel, uma variavel que utiliza apontamentos na
mem
oria RAM, para otimizacao do programa. Toda variavel, assim que criada,
e alocada na mem
oria RAM, que automaticamente da um endereco para essa
vari
avel, por exemplo, em 1 GB de RAM, pode haver milhares de enderecos de
vari
aveis, ent
ao, essa vari
avel que suponha o endereco 1248. O ponteiro contera
este enderco que aponta para essa variavel, e portanto e possvel manipular tais
informac
oes. Para fims de algoritmo um ponteiro sera declarado precedido de .
Para tomar o endereco de um ponteiro p usaremos &p e para usar o valor p.
Uma lista encadeada linked list e uma representacao de uma sequencia de
objetos, todos do mesmo tipo, na memoria rapida (RAM) do computador.
Exerccios complementares
References
1.
2.
3.
4.