• No se han encontrado resultados

Algorítmica y Lenguajes de Programación. Ordenación (i)

N/A
N/A
Protected

Academic year: 2021

Share "Algorítmica y Lenguajes de Programación. Ordenación (i)"

Copied!
7
0
0

Texto completo

(1)

Algorítmica y Lenguajes de Programación

Ordenación (i)

2

Ordenación.

Introducción

n

A lo largo del curso hemos visto distintas formas de almacenar

datos:

n

Vectores.

n

Matrices.

n

Ficheros

n

Listas (pilas y colas)

n

Aunque no se han estudiado, existen más estructuras de datos

como árboles y grafos.

n

Todas estas estructuras sirven para

almacenar información de

un modo adecuado que permita su recuperación

(búsqueda) de la forma más eficiente posible

.

n

Por ello,

los algoritmos de ordenación son fundamentales

y,

como ejemplos típicos (y sencillos), estudiaremos algunos de los

algoritmos de ordenación de vectores

más comunes.

(2)

3

Ordenación.

Características de los vectores

n

Las dos

características principales de

los vectores

son las siguientes:

1.

Se

accede a sus componentes de forma

directa

; por ejemplo:

a(3)

permite acceder

(para leer o escribir) la tercera componente de

un vector denominado

a

.

2.

Los vectores tienen un

tamaño fijo

que queda

determinado en el momento de su declaración;

por ejemplo, la declaración

coordenadas

vector (3) de real

limita el tamaño del vector

coordenadas

a 3

componentes.

4

Ordenación.

Algoritmos de tratamiento de

vectores

n

Los algoritmos de

tratamiento de vectores

responden a tres esquemas básicos:

1.

Recorrido:

procesar todos los elementos del vector.

2.

Búsqueda:

recorrer el vector hasta encontrar una

componente que cumple una propiedad determinada.

3.

Ordenación:

recolocar los elementos del vector para que

mantengan una determinada relación de orden.

n

El primer esquema es muy sencillo, en esta lección

nos centraremos en la ordenación dejando

para su posterior estudio los algoritmos de

búsqueda

.

(3)

5

Ordenación.

Algoritmos de ordenación

n

Los

algoritmos de ordenación

(ya sean de

vectores o de otro tipo de estructura de datos) deben

obtener una

permutación ordenada de los

elementos presentes en la estructura

.

n

La mayoría de

algoritmos de ordenación de

vectores

se basan en realizar

intercambios entre

las componentes

del mismo.

n

Existen

múltiples algoritmos de ordenación

de

vectores diferenciándose por su eficiencia; nosotros

estudiaremos los siguientes:

n

Método de la burbuja.

n

Método de la burbuja con señal.

n

Ordenación por sacudida.

n

Ordenación rápida (

quicksort

).

6

Ordenación.

Método de la burbuja (i)

n

La idea básica de este algoritmo consiste en considerar todos los

intercambios posibles hasta deshacer todas las inversiones existentes

en el vector.

n

En todos los ejemplos que se presenten se utilizará un tipo ficticio

elemento

para el que se supone que existe una relación de orden.

subrutina burbuja (v

vector(MAX) de elemento)

variables

i,j

entero

temp

elemento

inicio

desde i

ß

ß

1 hasta MAX-1 hacer

desde j

ß

ß

MAX hasta i+1 con paso –1 hacer

si v(j)<v(j-1) entonces

temp

ß

ß

v(j)

v(j)

ß

ß

v(j-1)

v(j-1)

ß

ß

temp

fin si

fin desde

fin desde

fin

(4)

7

Ordenación.

Método de la burbuja (ii)

i j ↓ ↓ 3 2 1 v(j)<v(j-1)? ≡ v(3)<v(2)? ≡ 1<2? ≡ verdadero temp: 1 i j ↓ ↓ 3 2 2 v(j)<v(j-1)? ≡ v(3)<v(2)? ≡ 1<2? ≡ verdadero temp: 1 i j ↓ ↓ 3 1 2 v(j)<v(j-1)? ≡ v(3)<v(2)? ≡ 1<2? ≡ verdadero temp: 1 i j ↓ ↓ 3 1 2 v(j)<v(j-1)? ≡ v(2)<v(1)? ≡ 1<3? ≡ verdadero temp: 1 i j ↓ ↓ 3 3 2 v(j)<v(j-1)? ≡ v(2)<v(1)? ≡ 1<3? ≡ verdadero temp: 1 i j ↓ ↓ 1 3 2 v(j)<v(j-1)? ≡ v(2)<v(1)? ≡ 1<3? ≡ verdadero temp: 1 i j ↓ ↓ 1 3 2 v(j)<v(j-1)? ≡ v(3)<v(2)? ≡ 2<3? ≡ verdadero temp: 2 i j ↓ ↓ 1 3 3 v(j)<v(j-1)? ≡ v(3)<v(2)? ≡ 2<3? ≡ verdadero temp: 2 i j ↓ ↓ 1 2 3 v(j)<v(j-1)? ≡ v(3)<v(2)? ≡ 2<3? ≡ verdadero temp: 2 8

Ordenación.

Método de la burbuja (iii)

n

Eficiencia del método de la burbuja

La parte más internadel algoritmo tiene una complejidad O(1).

La complejidad de la estructura alternativatambién es O(1)puesto que la expresión lógica a evaluar tiene un coste unitario.

El bucle jse ejecuta entre 1 y MAX-1 veces así que

tomaremos un valor máximo y supondremos que se ejecutará MAX-1 veces; así la complejidad del mismo sería O((MAX-1)·1) o lo que es lo mismo O(MAX). El bucle ise ejecuta MAX-1 veces por lo que la

complejidad final del algoritmo sería O((MAX-1)·MAX) o lo que es lo mismo O(MAX2), puesto que MAX es el

tamaño máximo del vector, es decir, el tamaño del problema la complejidad del método de la burbuja es O(n2).

El problema de este algoritmo radica en que ejecuta siempre el mismo número de pasos independientemente de si el vector está ordenado o no.

desde ißß1 hasta MAX-1 hacer

desde jßßMAX hasta i+1 con paso –1 hacer si v(j)<v(j-1) entonces tempßßv(j) v(j)ßßv(j-1) v(j-1)ßßtemp fin si fin desde fin desde

Asíntota para el tiempo de ejecución

0 20 40 60 80 100 120 140 10 20 30 40 50 Tamaño del problema

(5)

9

Ordenación.

Método de la burbuja (iv)

subroutine burbuja (vector)

implicit none integer vector(max) integer i,j do i=1,max-1 do j=max,i+1,-1 if (vector(j)<vector(j-1)) then temp=vector(j) vector(j)=vector(j-1) vector(j-1)=temp end if end do end do end subroutine 10

Ordenación.

Burbuja con señal (i)

subrutina burbuja (v ∈∈ vector(MAX) de elemento) variables i,j ∈∈ entero temp ∈∈ elemento bandera ∈∈ logico inicio ißß1 banderaßßfalso

mientras i<MAX y no bandera hacer jßßMAX

banderaßßverdadero mientras j>i hacer

si v(j)<v(j-1) entonces tempßßv(j) v(j)ßßv(j-1) v(j-1)ßßtemp banderaßßfalso fin si jßßj-1 fin mientras ißßi+1 fin mientras fin

Se modifica el algoritmo de la burbuja

para disponer de un indicador que

señale si se ha producido algún

intercambio.

En el momento en que no hay

ningún intercambio el vector ya

está totalmente ordenado y se

puede parar

.

Este algoritmo también tiene una

complejidad O(n

2

) salvo para el

caso de un vector ordenado

, en

esa situación la complejidad es

O(n)

frente a la burbuja tradicional que

también sería O(n

2

) en ese caso.

(6)

11 bandera:falso i j ↓ ↓ 1 2 3 v(j)<v(j-1)? ≡ v(3)<v(2)? ≡ 3<2? ≡ falso temp: ¿? bandera:verdadero i j ↓ ↓ 1 2 3 v(j)<v(j-1)? ≡ v(2)<v(1)? ≡ 2<1? ≡ falso temp: ¿? bandera:verdadero FIN DE LA EJECUCIÓN

Ordenación.

Burbuja con señal (ii)

n

Como se puede apreciar, en caso de que el

vector esté inicialmente ordenado, el método

de la burbuja con señal ejecuta el bucle más

interno de forma completa una sola vez; de

ahí que la complejidad de este algoritmo para

el caso mejor sea O(n).

Pasos ejecutados para ordenar un vector ya ordenado 0 5 10 15 20 25 30 35 40 45 50 1 2 3 4 5 6 7 8 9 10

Tamaño del vector

Pasos ejecutados

Burbuja Burbuja señal

12

Ordenación.

Burbuja con señal (iii)

subroutine burbujaSenal (vector) implicit none integer vector(max) integer i,j logical bandera i=1 bandera=.false. do while ((i<max).and.(.not.(bandera))) j=max bandera=.true. do while (j>i) if (vector(j)<vector(j-1)) then temp=vector(j) vector(j)=vector(j-1) vector(j-1)=temp bandera=.false. end if j=j-1 end do i=i+1 end do end subroutine

(7)

13

Ordenación.

Resumen

n

Los algoritmos de ordenación son fundamentales

, un ejemplo típico

y muy sencillo de los mismos son los

algoritmos de ordenación de

vectores

.

n

Las dos

características principales de los vectores

son las siguientes:

1.

Se

accede a sus componentes de forma directa

.

2.

Los vectores tienen un

tamaño fijo

determinado en el momento de su

declaración.

n

Los algoritmos de

tratamiento de vectores

responden a tres esquemas

básicos:

recorrido

,

búsqueda

y

ordenación

.

n

Los

algoritmos de ordenación

deben obtener una

permutación

ordenada de los elementos presentes en la estructura

.

n

La mayoría de

algoritmos de ordenación de vectores

se basan en

realizar

intercambios entre las componentes

del mismo.

n

En la lección de hoy se han estudiado los métodos de la

burbuja

y la

burbuja con señal

; ambos tienen una complejidad

O(n

2

)

salvo para el

caso mejor (un vector ya ordenado)

, en esa situación la

burbuja con

señal tiene complejidad O(n)

.

Referencias

Documento similar

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

No había pasado un día desde mi solemne entrada cuando, para que el recuerdo me sirviera de advertencia, alguien se encargó de decirme que sobre aquellas losas habían rodado

De acuerdo con Harold Bloom en The Anxiety of Influence (1973), el Libro de buen amor reescribe (y modifica) el Pamphihis, pero el Pamphilus era también una reescritura y

Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

De hecho, este sometimiento periódico al voto, esta decisión periódica de los electores sobre la gestión ha sido uno de los componentes teóricos más interesantes de la

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)

Package Item (Container) Type : Vial (100000073563) Quantity Operator: equal to (100000000049) Package Item (Container) Quantity : 1 Material : Glass type I (200000003204)