slide1 n.
Download
Skip this Video
Download Presentation
Diseño y análisis de algoritmos

Loading in 2 Seconds...

play fullscreen
1 / 14

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


  • 107 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Diseño y análisis de algoritmos' - breanna-kramer


Download Now 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
slide2

Temario

  • Clasificación
    • Arreglos
      • Ej:inserción
      • Ej:Selección
      • Ej:Intercambio
      • Ej:Partición :QuikSort
slide3

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
slide4

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

slide5

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
slide6

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;

slide7

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.
slide8

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

slide9

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

slide10

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.

slide11

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

slide12

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)....

slide13

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
slide14

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;