• Nenhum resultado encontrado

Linguagem Haskell. Maria Adriana Vidigal de Lima

N/A
N/A
Protected

Academic year: 2021

Share "Linguagem Haskell. Maria Adriana Vidigal de Lima"

Copied!
18
0
0

Texto

(1)

Ordenac¸ ˜ao

Linguagem Haskell

Maria Adriana Vidigal de Lima

Faculdade de Computac¸ ˜ao - UFU

(2)

1

Ordenac¸ ˜ao de Valores em Haskell

T ´ecnicas de Ordenac¸ ˜ao

Ordenac¸ ˜ao por Selec¸ ˜ao

Ordenac¸ ˜ao por Inserc¸ ˜ao

Ordenac¸ ˜ao R ´apida

Ordenac¸ ˜ao por Bolha

(3)

Fundamentos

Ordenac¸ ˜ao por Selec¸ ˜ao (Selection Sort)

Ordenac¸ ˜ao por Inserc¸ ˜ao (Insertion Sort)

Ordenac¸ ˜ao R ´apida (Quick Sort)

(4)

Ordenac¸ ˜ao por Selec¸ ˜ao

Estrat ´egia de ordenac¸ ˜ao

Encontrar o menor elemento da lista.

Inserir o elemento encontrado numa nova lista, e remov ˆe-lo da

lista de origem.

Repetir as ac¸ ˜oes acima at ´e que a lista original seja vazia.

(5)

Ordenac¸ ˜ao por Selec¸ ˜ao

Exemplo:

Lista Inicial:

[3,4,5,1,2]

Menor Elemento: 1

[1]

--

[3,4,5,2]

Menor Elemento: 2

[1,2] -- [3,4,5]

Menor Elemento: 3

[1,2,3] -- [4,5]

Menor Elemento:

4

[1,2,3,4] -- [5]

Menor Elemento: 5

[1,2,3,4,5]

-- []

(6)

Ordenac¸ ˜ao por Selec¸ ˜ao em Haskell

selecao:: (Ord a) => [a]->[a]

selecao [] = []

selecao xs = [x] ++ selecao (remove x xs)

where x = minimo xs

remove:: (Ord a) => a->[a]->[a]

remove a [] = []

remove a (x:xs)

| a==x = xs

| otherwise = x:(remove a xs)

minimo::(Ord a) => [a]->a

minimo [] = undefined

minimo [x] = x

minimo (x:xs)

| x <= (minimo xs) = x

| otherwise = minimo xs

(7)

Ordenac¸ ˜ao por Inserc¸ ˜ao

Estrat ´egia de ordenac¸ ˜ao:

Percorrer a lista da esquerda para a direita, e para cada novo

elemento encontrado, inseri-lo

de forma ordenada

numa nova

lista.

O processo termina quando a lista de origem for vazia.

Este tipo de ordenac¸ ˜ao ´e r ´apido para pequenas listas.

(8)

Ordenac¸ ˜ao por Inserc¸ ˜ao

Exemplo:

Lista Inicial: [3,4,2,5,1]

Inser¸

c~

ao Ordenada

Lista Original

--- Lista Ordenada

[3,4,2,5,1]

--- []

[4,2,5,1]

--- [3]

[2,5,1]

--- [3,4]

[5,1]

--- [2,3,4]

[1]

--- [2,3,4,5]

[]

--- [1,2,3,4,5]

(9)

Ordenac¸ ˜ao por Inserc¸ ˜ao em Haskell

Implementac¸ ˜ao usando recursividade simples:

insercao ::(Ord a) => [a] -> [a]

insercao

[]

= []

insercao

(x:xs) = insereOrd x (insercao xs)

insereOrd ::(Ord a) => a -> [a] -> [a]

insereOrd x [] = [x]

insereOrd x (y:ys)

| x <= y = (x:y:ys)

(10)

Ordenac¸ ˜ao por Inserc¸ ˜ao em Haskell

Implementac¸ ˜ao usando a func¸ ˜ao gen ´erica (foldr ):

insercao2 :: Ord a => [a] -> [a]

insercao2 = foldr insereOrd []

insereOrd ::(Ord a) => a -> [a] -> [a]

insereOrd x [] = [x]

insereOrd x (y:ys)

| x <= y = (x:y:ys)

| otherwise = y: (insereOrd x ys)

(11)

Ordenac¸ ˜ao por Inserc¸ ˜ao em Haskell

Execuc¸ ˜ao de um exemplo usando a func¸ ˜ao insercao2:

foldr f z []

= z

foldr f z (x:xs) = f x (foldr f z xs)

>insercao2 [3,1,5,2]

foldr insereOrd [] [3,1,5,2]

insereOrd 3 (foldr insereOrd [] [1,5,2])

insereOrd 1 (foldr insereOrd [] [5,2])

insereOrd 5 (foldr insereOrd [] [2])

insereOrd 2 (foldr insereOrd [] [])

insereOrd 2 []

insereOrd 5 [2]

insereOrd 1 [2,5]

insereOrd 3 [1,2,5]

[1,2,3,5]

(12)

Ordenac¸ ˜ao R ´apida

Estrat ´egia de ordenac¸ ˜ao:

Considere o primeiro elemento da lista como um elemento piv ˆo

da ordenac¸ ˜ao.

Particione a lista inicial em duas novas listas: a primeira deve

conter os elementos menores que o elemento piv ˆo, e a segunda

contendo os maiores.

Concatene a lista com os menores, seguida do elemento piv ˆo,

seguida dos elementos maiores.

Repetir as ac¸ ˜oes acima at ´e que toda a lista esteja particionada.

(13)

Ordenac¸ ˜ao R ´apida

Exemplo:

Lista Inicial: [3,7,2,6,1,4]

Inser¸

c~

ao Ordenada

Lista Menores

-- Piv^

o -- Lista Maiores

[2,1]

--

3

--

[7,6,4]

|

|

|

|

|

|

Particiona

Particiona

Sub-lista

3

Sub-lista

[2,1]

[7,6,4]

|

|

LMen

P

LMai

[1]

2

[]

...

(14)

Ordenac¸ ˜ao R ´apida em Haskell

quicksort::(Ord a) => [a] -> [a]

quicksort [] = []

quicksort (s:xs) = quicksort [x|x <- xs,x < s]

++ [s] ++

quicksort [x|x <- xs,x >= s]

(15)

Ordenac¸ ˜ao por Bolha

Estrat ´egia de ordenac¸ ˜ao:

S ˜ao feitas trocas sucessivas entre elementos consecutivos: Se

o elemento na posic¸ ˜ao n for maior que o da posic¸ ˜ao n+1, ent ˜ao

trocamos os dois elementos de posic¸ ˜ao.

Efetuar o procedimento de troca acima i-1 vezes, sendo i o

tamanho da lista.

(16)

Ordenac¸ ˜ao por Bolha

Exemplo:

Lista Inicial: [3,7,2,6,1,4]

1

a

Troca: [3,2,6,1,4,7]

2

a

Troca: [2,3,1,4,6,7]

3

a

Troca: [2,1,3,4,6,7]

4

a

Troca: [1,2,3,4,6,7]

5

a

Troca: [1,2,3,4,6,7]

(17)

Ordenac¸ ˜ao por Bolha em Haskell

bolha [] = []

bolha lista = bolhaOrd lista (length lista)

bolhaOrd lista 0 = lista

bolhaOrd lista n = bolhaOrd (troca lista) (n-1)

troca [x] = [x]

troca (x:y:zs)

| x > y

= y : troca (x:zs)

| otherwise = x : troca (y:zs)

(18)

Bibliografia

1.

Haskell - Uma abordagem pr ´atica. Cl ´audio C ´esar de S ´a e

M ´arcio Ferreira da Silva. Novatec, 2006.

2.

Haskell - The craft of functional programming. Simon

Thompson. Pearson, Addison-Wesley, 1999.

Referências

Documentos relacionados

No entanto, a cultura predominante na gestão das unidades produtivas sucroalcooleiras, influenciada pelas altas taxas de rentabilidade dos mercados de etanol e de açúcar,

Videotoracoscopia e, em outro estudo, sobre Simpatectomia Cervicotorácica por Videotoracoscopia, de forma que o nível a ser abordado cirurgicamente no

Os testes de desequilíbrio de resistência DC dentro de um par e de desequilíbrio de resistência DC entre pares se tornarão uma preocupação ainda maior à medida que mais

comunicação da Paróquia Coração Eucarístico de Jesus O catolicismo no Brasil utiliza os sistemas tradicionais para se comunicar e enfatizar sua doutrina entre os

Projetil encamisado por uma camisa pré-sulcada de latão endurecido, contendo chumbo não endurecido no seu interior, dotado de uma ponta oca. HYDRA SHOCK centro, que

15, estão representados os teores médios de safrol contido em óleo essencial obtido, no decorrer do progresso de extração, da biomassa aérea de pimenta longa procedente de cultivos

General: Knowing the conceptual and methodological foundations of the main projective methods; Identify and understand the operational concepts of projection and distress; Identify

Evolução conceitual em atividade física, exercício e esporte. Meios e métodos de treino,