Diseño y análisis de algoritmos
This presentation is the property of its rightful owner.
Sponsored Links
1 / 14

Diseño y análisis de algoritmos PowerPoint PPT Presentation


  • 73 Views
  • Uploaded on
  • Presentation posted in: General

Diseño y análisis de algoritmos. Temario. Clasificación Arreglos Ej:inserción Ej:Selección Ej:Intercambio Ej:Partición :QuikSort. Clasificación. Arreglos Estructura base. TYPE index = INTEGER ; VAR d :ARRAY[1..N] of item. Estos métodos se conocen como directos

Download Presentation

Diseño y análisis de algoritmos

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Dise o y an lisis de algoritmos

Diseño y análisis de algoritmos


Dise o y an lisis de algoritmos

Temario

  • Clasificación

    • Arreglos

      • Ej:inserción

      • Ej:Selección

      • Ej:Intercambio

      • Ej:Partición :QuikSort


Dise o y an lisis de algoritmos

Clasificación

Arreglos Estructura base

TYPE index = INTEGER ;

VAR d:ARRAY[1..N] of item

  • Estos métodos se conocen como directos

  • Se verán rápidamente porque:

    • Permitien dilucidar los princípos de los problemas de clasificación

    • Algoritmos cortos y fáciles de entender

    • Lós algoritmos más eficientes son más complejos y deben usarse sólo para n

    • Grándes


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg1.1: Inserción directa

  • Pseudocódigo

  • Para i:=2 a n

  • {

  • X:=d[i]:

  • Insertar x en el sitio que corresponde en d1...di

  • }

  • Cond. Término:

  • Se en encuentra un elemento aj que tiene una llave menor que la x

  • El extremo izquierdo de la secuencia de destino se ha alcanzado

  • Se agrega en cada ciclo un centinela por lo tanto el arreglo aumenta [0..n]

Procedure insersión directa;

Var i,j:index;x:item;

BEGIN

For i:=2 TO n DO

BEGIN

x:=d[i];d[0]:=x;j:=i;

WHILE (x<d[j-1]) DO d[j]:=d[j-1];j:=j-1 END;

d[j]:=x

END

END

Análisis: Mejor Caso pert O(n)

Resto pert O(n )

Es dependiente del orden

Inicial de los datos??

2


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg1.1: Inserción directa

  • Ejemplo:

  • Datos iniciales: 44 55 12 42 94 18 06 67

  • i=2 44 55 12 42 94 18 06 67

  • i=3 12 44 55 42 94 18 06 67

  • i=4 12 42 44 55 94 18 06 67

  • i=5 12 42 44 55 94 18 06 67

  • i=6 12 18 42 44 55 94 06 67

  • i=7 06 12 18 42 44 55 94 67

  • i=8 06 12 18 42 44 55 67 94

  • El algoritmo es sensible al orden inicial, y el número de copmaraciones depende de los valores

  • Si los elementos están ordenados no entrará nunca al mientras, por lo tanto hará un

  • Recorrido lo que da un O(n).

  • El peor caso se da cuando los elementos están en orden inverso al deseado

  • Notar que de 1 hasta i se mantiene siempre un orden (relativo). Esto sugiere buscar más

  • rápidmente el punto de inserción que un retroceso secuencial. La idea es agregar una búsquda

  • binaria que prueba la secuencia destino en la mitad, luego reduce la busqueda a la mitad

  • hasta encontrar el punto de inserción. El algoritmo de inserción modificado se llama inserción

  • binaria


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg2.1: Inserción directa, Insersión binaria

Procedure InsBin;

VAR i,j,m,L,R:index;x:item;

BEGIN

FOR i:=2 TO n DO

BEGIN

X:=d[i];L:=1;R:=i;

WHILE L<R DO

m:= (L+R)DIV2;

IF d[m] <= x THEN

L:= m+1

ELSE

R:=m

END;

FOR j:=i DOWNTO R+1 DO d[j]:=d[j-1];

d[R]:=x

END

END;


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg1.2: Inserción directa, Insersión binaria

  • El algoritmo es sensible al orden inicial,

  • La posición de inserción se encuentra si L=R, por lo que el intervalo final de búsqueda debe

  • ser de largo 1, por lo que cada vez se divide el intervalo de búusqueda en la mitad.

  • Por lo tanto se supone dividir a la mitad el intervalo de longitud i vecespor tanto:

  • Esta suma se puede aproximar por la integral

  • Por lo tanto el número de comparaciones pruducto de la búsqueda binaria es del orden

  • , sin embargo aún queda el segundo for que en conjunto con el primero mantien el

  • Algoritmo en un orden El prblema de fondo de este método de ordenamiento es que

  • cada vez que debe reorenar desplaza un segmento completo de los datos. Veremos otras

  • Alternativas, como el ordenamiento por selección directa.


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg2: Selección directa

  • Diseño

  • Seleccionar el elemento que tenga la llave menor.

  • Intercambiarlo con el primer elemento d[1].

  • Repetir 1 y 2 con (n-1) elementos restantes, (n-2) elementos restantes

  • FIN queda un solo elemento --- El más grande

  • Pseudocódigo

  • Para i:=1 a n -1

  • {Asignar el índice del elemento más pequeño entred1...dia k

  • Intercambiar di con dk }

Procedure selecdirecta;

Var i,j,k:index;x:item;

BEGIN

FOR i:=1 TO n-1 DO

BEGIN

k:=i; x=d[i];

FOR j:=i+1 TO n DO

IF (d[j] <x) THEN k:=1; x :=d[j]; END;

d[k]:=d[i]; d[i]:=x

END

END

Arreglo inicial:

44 55 12 42 94 18 06 67

06 55 12 42 94 18 44 67

06 12 55 42 94 18 44 67

06 12 18 42 94 55 44 67

06 12 18 42 94 55 44 67

06 12 18 42 44 55 94 67

06 12 18 42 44 55 94 67

06 12 18 42 44 55 67 94


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg 2: Selección directa

  • El algoritmo es sensible al orden inicial, el número de comparaciones es independiente de

  • los datos, al contrario que la inserción directa. Hay un segundo for fijo. Si es el número de

  • comparaciones necesarias, se puede pensar que, dado que el segundo for se va haciendo cada

  • vez más pequeño en una unidad:

  • El patrón se puede reconocer dándose valores:

Por otro lado en el mejor habrá que ahcer alrdedor de n asignaciones y las comparaciones se

por lo que el algoritmo será del así como en el peor caso. Preferible alanterior


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg3: intercambio directo

  • Diseño

  • Todos los métodos tienen de alguna manera operaciones de intercambio.

  • Este algoritmo es el famoso ordenamiento de burbuja

Procedure burbuja;

Var i,j:index;x:item;

BEGIN

FOR i:=2 TO n DO

FOR j:=n DOWNTO i DO

IF (d[j-1] > d[j]) THEN

x:=d[j-1];

d[j-1]:=d[j];

d[j]:=x

END

END

Arreglo inicial:

44 55 12 42 94 18 06 67

06 44 55 12 42 94 18 67

06 12 44 55 18 42 94 67

06 12 18 44 55 42 67 94

06 12 18 42 44 55 67 94

06 12 18 42 44 55 67 94

06 12 18 42 44 55 67 94

06 12 18 42 44 55 67 94

El núero de comaraciones necesarias

se calcula con la misma lógica que el

Algoritmo anterior por lo que

el orden es A pesar de que no se

Puede mejorar su orden, deteniendo el

algoritmo si el orden seha comletado.


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg 4: Partición:Quiksort

  • El es l más rápido para clasificar. Se basa en intercambiar y particionar. Una primera

  • Aproximación:

  • Seleccionar un elemento al azar del arreglo x

  • Se recorre el arreglo a partir de la izquierda hasta encontrar un elemento i > x

  • Se recorre el arreglo desde la derecha hasta encontrar un elemento j < x

  • A continuación se intercambian ambos elementos y se vuelve a 2 hasta que i y j se

  • Encuentren en algún punto cerca del centro del arreglo. El resultado es que se ha dividido

  • el arreglo la parte a la izquierda del elemento x con elementos menores o iguales a x y la

  • derecha con elementos mayores o iguales.

Procedure particion;

Var i,j:index;w,x:item;

BEGIN

i:=1;j:=n;

(*seleccionar un elemento de d al azar y asignar a x*)

REPEAT

WHILE d[i] < x DO i:=i+1;

WHILE d[j] > x DO j:=j-1;

IF i <=j THEN

BEGIN

w:=a[i];a[i]:=a[j];a[j]:=w;i:=i+1;j:=j-1

END

UNTIL i>j;

END

Arreglo inicial:x=42

44 55 12 42 94 06 18 67

18 55 12 42 94 06 44 67

18 06 12 42 94 55 44 67


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg 4: Partición:Quiksort

  • Se debe recordar que lo que lo que se quiere es ordenar. Sin embargo Una vez que se tiene un

  • algoritmo eficiente de partición, se tiene dividido el arrgelo, por lo que el sigueinte paso

  • es aplicar el mismo procedimiento a la partición izquierda, luego a la derecha y así

  • sucesivamente hasta que cada partición conste de un solo elemento. Claramente esta es una

  • definición recursiva

  • Criterio de parada, establecido cuando las particiones son de un elemento.

  • Convergencia, asegurada porque las particiones siempre son cada vez más pequeñas.

Procedure qsort(L,R:index);

Var i,j:index;w,x:item;

BEGIN i:=L;j:=R;

x:= d[(L+R) DIV 2)]

REPEAT

WHILE d[i] < x DO i:=i+1;

WHILE d[j] > x DO j:=j-1;

IF i <=j THEN

BEGIN

w:=a[i];a[i]:=a[j];a[j]:=w;i:=i+1;j:=j-1

END

UNTIL i>j;

IF L< j THEN qsort(L,j);

IF R> i THEN qsort(i,R);

qsort(1,n);

Arreglo inicial:x=42

44 55 12 42 94 06 18 67

18 55 12 42 94 06 44 67

18 06 12 42 94 55 44 67

qsort(1,3) x=6

18 06 12

06 18 12

06 fin

Qsort(2,3)

18 12

12 18 fin

Qsort(5,8)....


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg3: QuikSORT

  • Análisis:

  • Cómo es el comportamiento del proceso de partición??

  • Tras haber seleccionado un límite x, recorre todo el arreglo.

  • De ahí se efectúan exactamente n comparaciones

  • El número de intercambios puede determinarse con el sguiente método probabilístico:

  • Con un límite fijo x, el número previsto de operaciones de intercambio es igual al de elementos

  • en la parte izquierda de la partición, o sea n – 1 * Prob( elemento haya alcanzado su su lugar mediante un INTERCAMBIO).

  • Habrá tenido lugar un intercambio si el elemento ha sido antes parte de la partición DERECHA;

  • P(de este evento)=(n-(x-1))/n.

  • El número esperado de intercambios es el promedio de esos valores previstos sobre todos los LIMITES posibles x.:

  • Si se eligiera SIEMPRE la mediana como límite , cada proceso divide el arreglo en 2 mitades y el número de pases necesarios sería de log(n). El número ideal de comparaciones será de f=n*log n

  • E intercambio, g=n*log(n)/6 . Pero la probabilidad de esto es apenas de 1/n. El rendimientoMedio de QS es inferior al caso óptimo por 2*ln(2). Por otro lado se puede dar un mal caso y comportarse


Dise o y an lisis de algoritmos

Clasificación

Arreglos Alg3: QuikSORT no recursivo:

Procedure qsort;

CONST M=100;

Var i,j,L,R:index;w,x:item;

s: 0..M; stack: ARRAY[1..M] of RECORD L,R:Index END;

BEGIN s:=1; satack[1].L=1;stack[1].R=n;

REPEAT (*tomar petición encima del stack*)

L:= stack[s].L; R:= stack[s]. R;s:=s-1;

REPEAT (*Particion*)

i:=L;j:=R; x:= d[(L+R) DIV 2)];

REPEAT

WHILE d[i] < x DO i:=i+1;

WHILE d[j] > x DO j:=j-1;

IF i <=j THEN

BEGIN

w:=a[i];a[i]:=a[j];a[j]:=w;i:=i+1;j:=j-1

END

UNTIL i>j;

IF R> i THEN (*apilar petición para ordenar paricion derecha*

s:=s+1; stack[s].L=i; stack[s].R=R;

R:=j;

UNTIL L>=R (*ahora Ly R delelimitan particion izquierda*)

UNTIL s=0

EBD qsort;


  • Login