2.2 CLASIFICACIÓN DE ARREGLOS POR INSERCIÓN DIRECTA
|
|
- Ricardo Ramón Soler Crespo
- hace 5 años
- Vistas:
Transcripción
1 2. CLASIFICACIÓN 2.1 CLASIFICACIÓN es el proceso de rearreglar un conjunto de objetos en un orden específico. Su finalidad es facilitar la búsqueda posterior. Un método de clasificación se llama estable si el orden relativo de elementos con iguales llaves permanece inalterado en el proceso de clasificación 2.2 CLASIFICACIÓN DE ARREGLOS POR INSERCIÓN DIRECTA - Método con centinela: consiste en recorrer el arreglo, en cada paso, comenzando con la posición i = 2 e ir aumentando la posición i en una unidad, el i-ésimo elemento de la secuencia desordenada se toma y se transfiere a la secuencia destino (ya ordenada), insertándolo en el lugar correspondiente. Ejem: - inicio: se clasifica de menor a mayor, la posición 0 es el centinela cadena=?? posicion= recorrido del elemento 18: la cadena está dividida en dos partes cuyo eje es el elemento 18 (negrita), a su izquierda los elementos ordenados (subrayados) y el centinela, a su derecha los desordenados (incluido el 18). cadena=?? ElementoInsertado=18 - se carga el elemento (18 ) en el centinela cadena= ElementoInsertado=18 - se va comparando el elemento (18) con el anterior hasta encontrar su lugar correspondiente en orden: cadena= < 18? NO, intercambia valores cadena= < 18? NO, intercambia valores cadena= < 18? NO, intercambia valores cadena= < 18? NO, intercambia valores cadena= < 18? SÍ, sigue recorriendo el vector con la llave Programa: MODULE ClasificacionDirecta; FROM InOut IMPORT WriteLn,WriteString,Read,WriteCard,Write; CONST N=8; (* longitud de la cadena *) TYPE vector=array [0..N] OF CARDINAL; (* vector[0]= centinela *) VAR cadena:vector; (* cadena para la b squeda *) i,j,f,elementoinsertado:cardinal; (* inicio *) cadena[1]:= 44;cadena[2]:= 55;cadena[3]:= 12;cadena[4]:= 42;cadena[5]:= 94; cadena[6]:= 18;cadena[7]:= 06;cadena[8]:= 67; (* clasificaci n directa *) FOR i:= 2 TO N DO ElementoInsertado:= cadena[i]; cadena[0]:=elementoinsertado;j:=i; WHILE ElementoInsertado < cadena[j-1] DO cadena[j]:=cadena[j-1]; j:=j-1; cadena[j]:= ElementoInsertado;
2 END ClasificacionDirecta._ - Análisis: caso mínimo de comparaciones: si están todos ordenados será 3*(n-1) caso promedio de comparaciones: (n 2 +11n -12)/4 caso máximo de comparaciones: si están en orden inverso al ordenado será de (n 2 +5n -6)/3. POR INSERCIÓN BINARIA - Método: trata de insertar el i-ésimo (negrita) elemento en un subarreglo a j..a i-1 ya ordenado mediante el método similar a la búsqueda binaria. Ejem: - inicio, el nuevo elemento 2 se quiere insertar en la secuencia ya ordenada (subrayados): - Programa: cadena = ElementoInsertado=8 pos i^ = i pos L^ =L pos m^ = m pos R^ = R - se va comparando el elemento apuntado por m hasta cumplir la condición de ordenación: cadena = ElementoInsertado=8 pos i^ = i pos L^ =L pos m^ = m pos R^ = R cadena = ElementoInsertado=8 pos i^ = i pos L^ =L pos m^ =m pos R^ = R - cuando el valor apuntado por m cumple la condición, lo inserta en esta posición (negrita) y desplaza los valores (cursiva) del subarreglo ordenado: cadena = continúa con la siguiente llave (5)... MODULE ClasificacionBinaria; FROM InOut IMPORT WriteLn,WriteString,WriteCard,Write,Read; CONST N=10; (* longitud de la cadena *) TYPE tira= ARRAY [0..N-1] OF CHAR; (* cadena para la b squeda y la SUBselecci n *) VAR cadena:tira; VAR ElementoInsertado:CHAR; VAR L,R,m,i,j:CARDINAL; (* inicio *) cadena:=" "; ElementoInsertado:="0"; (* INSERCIàN binaria *) FOR i:= 1 TO N-1 DO ElementoInsertado:= cadena[i];l:= 0; R:=i; WHILE L < R DO m:= (L+R) DIV 2; IF cadena[m] <= ElementoInsertado THEN L:= m+1; ELSE R:= m
3 FOR j:= i TO R+1 BY -1 DO cadena[j]:= cadena[j-1]; cadena[r]:=elementoinsertado; END ClasificacionBinaria. - Análisis: comportamiento NO natural de un algoritmo de clasificación porque, - caso mínimo de comparaciones, si están en orden inverso al ordenado - caso promedio de comparaciones: n * (log n - log e ± 0.5) - caso máximo de comparaciones, si están ya ordenados. Tarda más que algoritmo de inserción directa Otro coste añadido es la inserción, puesto que al insertarlo habrá que mover todo la información individualmente y esto se encarece en distancias largas POR SELECIÓN DIRECTA - Método: considera todos los elementos del subarreglo fuente (desordenados) para encontrar el que tenga la llave más pequeña que debe depositarse como siguiente elemento en la secuencia destino (ordenado). Ejem: - inicio: funciona con tres índices, elementos ordenados 1..i-1 (subrayados), j para buscar elementos o llaves (negrita) y comparar con el índice k que "memoriza" el elemento (cursiva) más pequeños de i+1..j cadena= ElementoInsertado=12 pos i^= iii pos j^= jjj pos k^= kkk - va recorriendo el arreglo y "memorizando el elemento más pequeño: cadena= pos i^= iii pos j^= jjj pos k^= kkk cadena= pos i^= iii pos j^= jjj pos k^= kkk cadena= pos i^= iii pos j^= jjj pos k^= kkk cadena= pos i^= iii pos j^= jjj pos k^= kkk cadena= pos i^= iii pos j^= jjj pos k^= kkk cadena= pos i^= iii pos j^= jjj pos k^= kkk
4 - una vez localizado el elemento inferior (6) se produce un intercambio entre las posiciones que indican los índices k (44) e i (6) cadena= pos i^= iii pos j^= jjj pos k^= kkk - continúa localizando los menores del arreglo a partir de la siguiente posición i (55)... - Programa: MODULE ClasificacionSeleccionDirecta; FROM InOut IMPORT WriteLn,WriteString,Read,WriteCard,Write; CONST N=8; (* longitud de la cadena *) TYPE vector=array [1..N] OF CARDINAL; VAR cadena:vector; (* cadena para la b squeda *) i,j,k,elementoinsertado:cardinal; (* inicio *) cadena[1]:= 44;cadena[2]:= 55;cadena[3]:= 12;cadena[4]:= 42;cadena[5]:= 94; cadena[6]:= 18;cadena[7]:= 06;cadena[8]:= 67; (* clasificaci n directa *) FOR i:= 1 TO N-1 DO k:= i; ElementoInsertado:=cadena[i]; FOR j:= i+1 TO N DO IF cadena[j]<elementoinsertado THEN k:=j; ElementoInsertado:= cadena[k]; cadena[k]:=cadena[i]; cadena[i]:= ElementoInsertado; END ClasificacionSeleccionDirecta. - Análisis: el número de comparaciones es independiente del orden inicial de las llaves o elementos (a diferencia de los algoritmos anteriores). El nº de movimientos: - mínimo es 3 * (n-1) en llaves iniciales ordenadas - máximo es n 2 /4 + 3 * (n-1) en llaves iniciales en orden inverso - promedio es n * ((ln n) + g) ; g= cte Euler En consecuencia, este algoritmo ha de preferirse a la selección directa, pese a que ésta última es todavía un poco más rápida en los casos en que las llaves se clasifican o casi clasificadas al principio POR INTERCAMBIO DIRECTO (BURBÚJA) - Método, compara e intercambia (negrita) pares de elementos contiguos hasta clasificar todos los elementos. Hace varios pases sobre el arreglo, y en cada recorrido desplaza el elemento más pequeño (cursiva) del conjunto restante hacia el extremo final del subarreglo ya ordenado (subrayado). Ejem: - 18 < 67?; sí, entonces no intercambia cadena = pos i^ = iii pos j^ = jjj pos (j^-1)= j-1-94 < 18?; NO, entonces intercambia cadena = pos i^ = iii pos j^ = jjj pos (j^-1)= j-1
5 - 42 < 18?; NO, entonces intercambia cadena = pos i^ = iii pos j^ = jjj pos (j^-1)= j-1-12 < 18?; si, entonces NO intercambia cadena = pos i^ = iii pos j^ = jjj pos (j^-1)= j-1-55 < 12?; NO, entonces intercambia cadena = pos i^ = iii pos j^ = jjj pos (j^-1)= j-1-44 < 12?; NO, entonces intercambia cadena = pos i^ = iii pos j^ = jjj pos (j^-1)= j-1-44 < 12?; NO, entonces intercambia cadena = pos i^ = iii pos j^ = jjj pos (j^-1)= j-1 - y continúa... - Programa: MODULE ClasificacionBurbuja; FROM InOut IMPORT WriteLn,WriteString,WriteCard,Write,Read; CONST N=8; (* longitud de la cadena *) TYPE tira= ARRAY [0..N-1] OF INTEGER; (* cadena para la b squeda y la SUBselecci n *) VAR cadena:tira; VAR ElementoInsertado:INTEGER; VAR i,j,scroll:cardinal; (* inicio *) cadena[0]:= 44;cadena[1]:= 55;cadena[2]:= 12;cadena[3]:= 42;cadena[4]:= 94; cadena[5]:= 18;cadena[6]:= 06;cadena[7]:= 67; FOR i:= 1 TO N-1 DO FOR j:= N-1 TO i BY -1 DO IF cadena[j-1] > cadena[j] THEN ElementoInsertado:= cadena[j-1]; cadena[j-1]:=cadena[j]; cadena[j]:=elementoinsertado; END ClasificacionBurbuja. - Análisis: el orden es n 2 es poco eficaz VIBRACIÓN ("Mejoramiento del Burbuja") - Método, mejora el algoritmo anterior (burbuja) pues hace un doble pase (de derecha a izquierda y de izquierda a derecha) por el arreglo "memorizando" (índices L y R) la posición de los últimos intercambios, el mejoramiento consiste en comparar las posiciones de intercambio para comprobar si el arreglo ya está ordenado, si es así acabará. Ejem: - inicio: cadena = pos L^ = LLL
6 pos R^ = RRR - doble pasada: - fin primera parte (como el burbuja): cadena = pos L^ = LLL pos R^ = RRR - fin segunda parte (como el burbuja pero al revés): cadena = pos L^ = LLL pos R^ = RRR - arreglo ordenado?, NO porque L < R cadena = pos L^ = LLL pos R^ = RRR - va haciendo dobles pasadas hasta encontrar: cadena = pos L^ = LLL pos R^ = RRR - arreglo ordenado?, SÍ porque L < R - Programa: MODULE ClasificacionVibracion; FROM InOut IMPORT WriteLn,WriteString,WriteCard,Write,Read; CONST N=8; (* longitud de la cadena *) TYPE tira= ARRAY [0..N-1] OF INTEGER; (* cadena para la b squeda y la SUBselecci n *) VAR cadena:tira; VAR ElementoInsertado:INTEGER; VAR L,R,j,k:CARDINAL; (* inicio *) cadena[0]:= 44;cadena[1]:= 55;cadena[2]:= 12;cadena[3]:= 42;cadena[4]:= 94; cadena[5]:= 18;cadena[6]:= 06;cadena[7]:= 67; L:= 1; R:=N-1; k:=n-1; REPEAT FOR j:= R TO L BY -1 DO IF cadena[j-1] > cadena[j] THEN ElementoInsertado:= cadena[j-1]; cadena[j-1]:=cadena[j]; cadena[j]:=elementoinsertado; k:=j; L:=k+1; FOR j:= L TO R BY +1 DO IF cadena[j-1] > cadena[j] THEN ElementoInsertado:= cadena[j-1]; cadena[j-1]:=cadena[j]; cadena[j]:=elementoinsertado; k:=j; R:=k-1; UNTIL L > R; END ClasificacionVibracion. - Análisis: el orden es n 2 es poco eficaz, pero mejora su rendimiento si el arreglo está casi en orden 2.3 MÉTODOS DE CLASIFICACIÓN AVANZADOS INSERCIÓN POR INCREMENTO DECRECIENTE ó SHELL
7 - Método es un refinamiento de la inserción directa consiste, en transferir a la secuencia ordenada (subrayado) un elemento (negrita) en el lugar correspondiente según un orden preestablecido y usa un centinela (cursiva) en cada búsqueda pero situado estratégicamente. Ejemplo: - inicio (** = posición del centinela): ** ** ** ** clasificación-4 (k = 4), similar a la inserción directa: la subcadena ordenada a la izquierda, un centinela y un elemento a transferir a la subcadena ordenada, pero los elementos distan 4 posiciones: - cadena ordenada [44], elemento a insertar (94) y centinela (94): 94 ** ** ** cadena resultante ordenada [44,94], continúa con otra - cadena ordenada [55], elemento a insertar (18) y centinela (18): ** 18 ** ** < 18?. NO, intercambia valores de la cadena ordenada hasta encontrar su lugar correspondiente en orden: ** 18 ** ** ** >> ** ** cadena resultante ordenada [44,94], continúa con otra - cadena ordenada [12], elemento a insertar (06) y centinela (06): ** ** 06 ** < 06? NO, intercambia valores de la cadena ordenada hasta encontrar su lugar correspondiente en orden: ** ** 06 ** ** ** >> ** cadena resultante ordenada [06,12], continúa con otra - cadena ordenada [42], elemento a insertar (67) y centinela (67): ** ** ** < 67?, Sí, cadena ordenada [42,67], continúa con otra - NO hay más elementos a la derecha, entonces siguiente clasificación Resumen de la clasificación - 4: subcadenas ordenadas [44,94],[18,55], [06,12], [42,67] - clasificación-2 (k = 2), similar a la inserción directa: la subcadena ordenada a la izquierda, un centinela y un elemento a transferir a la subcadena ordenada, pero los elementos distan 2 posiciones: - cadena ordenada [44], elemento a insertar (06) y centinela (06): ** ** 06 ** < 06? NO, intercambia valores de la cadena ordenada hasta encontrar su lugar correspondiente en orden: ** ** 06 ** ** ** >> ** cadena resultante ordenada [06,44], continúa con otra - cadena ordenada [18], elemento a insertar (42) y centinela (42): ** ** ** cadena resultante ordenada [18,42], continúa con otra
8 - cadena ordenada [06,44], elemento a insertar (94) y centinela (94): ** ** 94 ** cadena resultante ordenada [06,44,94], continúa con otra - cadena ordenada [18,42], elemento a insertar (55) y centinela (55): ** ** ** cadena resultante ordenada [18,42,55], continúa con otra - cadena ordenada [06,44,94], elemento a insertar (12) y centinela (12): ** ** 12 ** < 12? NO, intercambia valores de la cadena ordenada hasta encontrar su lugar correspondiente en orden: ** ** 12 ** ** ** 12 ** ** ** 12 ** cadena resultante ordenada [06,12,44,94], continúa con otra - cadena ordenada [18,42,44,55] elemento a insertar (67) y centi. (67): ** ** ** cadena resultante ordenada [18,42,44,55,67], continúa con otra Resumen de la clasificación - 2: subcadenas ordenadas [06,12,44,94], [18,42,55,67] - clasificación-1 (k = 1), idéntico a la inserción directa pues ahora la distancia entre elementos es 1: - cadena ordenada [06], elemento a insertar (18) y centinela (18): ** ** ** cadena resultante ordenada [06,18], continúa con otra - cadena ordenada [06,18], elemento a insertar (12) y centinela (12): ** ** ** < 12? NO, intercambia valores de la cadena ordenada hasta encontrar su lugar correspondiente en orden: ** ** ** ** ** ** cadena ordenada [06,12,18], elemento a insertar (42) y centinela (42): ** ** ** cadena ordenada [06,12,18,42], elemento a insertar (44) y centinela (44): ** ** ** cadena resultante ordenada [06,18,18,42,44], continúa con otra - cadena ordenada [06,12,18,42,44], elemento a insertar (55) y centinela (55): ** ** ** cadena resultante ordenada [06,18,18,42,44,55], continúa con otra - cadena ordenada [06,12,18,42,44,55], elemento a insertar (94)
9 y centinela (94): ** ** ** cadena resultante ordenada [06,18,18,42,44,55,94]continúa con otra - cadena ordenada [06,12,18,42,44,55,94], elemento a insertar (97) y centinela (97): ** ** ** < 94? NO, intercambia valores de la cadena ordenada hasta encontrar su lugar correspondiente en orden: ** ** ** ** ** ** >> Resumen de la clasificación - 1: cadena ordenada[06,12,18,42,44,55,67,97] - fin: ** ** ** ** Programa MODULE ClasificacionIncDecreciente; FROM InOut IMPORT WriteLn,WriteString,WriteCard,Write,Read,WriteInt; CONST N=8; (* longitud de la cadena *) CONST t=4; (* longitud de la cadena *) TYPE tipom = [1..t]; TYPE tipoh = ARRAY tipom OF INTEGER; TYPE tipoaindice = [-9..N]; TYPE tipoa = ARRAY tipoaindice OF INTEGER;(* -9 viene de h[1]:=9 *) VAR a:tipoa; m:tipom; h:tipoh; i,j,k,s,x:integer; (* inicio *) a[1]:= 44;a[2]:= 55;a[3]:= 12;a[4]:= 42;a[5]:= 94; a[6]:= 18;a[7]:= 06;a[8]:= 67; h[1]:= 8; h[2]:=4; h[3]:=2; h[4]:=1; FOR m:= 1 TO t DO k:= h[m]; s:=-1 * k; FOR i:=k+1 TO N DO x:= a[i]; j:= i-k; IF s = 0 THEN s:=-k s:= s + 1; a[s]:= x;(* centinela *) WHILE x < a[j] DO a[j+k]:= a[j]; j:=j-k; a[j+k]:= x; END ClasificacionIncDecreciente. - Análisis: plantea algunos problemas matemáticos no resueltos porque no se sabe la elección de incrementos con resultados más eficientes, aunque se recomiendan las secuencias: 1,4,13,40,121,... ó 1,3,7,15,31,... (colocadas en orden inverso); produciendo un rendimiento próximo a n CLASIFICACIÓN POR MONTÓN es un mejoramiento de la clasificación por árbol pues este último presenta muchas comparaciones superfluas y para n unidades hay que crear 2*n -1 unidades. Se define montón a la secuencia de llaves [h L,h L+1,..., h R ] tales que
10 h i <= h 2*1 y h i <= h 2*i+1 para L...R/2, esto es, dado el arreglo: [h 1,h 2,h 3,h 4,h 5,h 6,h 7,h 8 ] estará ordenado parcialmente y en montón si: h 1 (la llave mínima porque se opera con "<=") h 1 <= h 2 y h 1 <= h 3 h 2 <= h 4 y h 2 <= h 5 h 3 <= h 6 y h 3 <= h 7 h 4 <= h 8 - Método, se realiza de dos formas bien diferenciadas, éstas son: - crear montones u ordenamiento parcial del arreglo. Ejemplo: [ h 1, h 2, h 3, h 4, h 5, h 6, h 7, h 8 ] [ ] - el arreglo inicialmente no está ordenado parcialmente o en montón puesto que NO cumple la definición anterior; se procede a ordenarlo (1º bucle WHILE): - inicialmente ordena por montones de abajo hacia arriba según definición, esto es, ordena el montón h 4 <= h está ordenado?. Sí, continuaría en h 8 si existiera en el arreglo h 16 pues no puede comparar h 8 <= h 16 - luego, el montón h 3 <= h 6 y h 3 <= h está ordenado?. NO, intercambia la llave h 3 con la menor llave (subrayado) entre h 6 y h 7 : está ordenado?.sí, continuaría en h 7 (elemento intercambiado) si h 14 existiera pues no puede comparar h 7 <= h 14 - luego, el montón h 2 <= h 4 y h 2 <= h está ordenado?. NO, intercambia la llave h 2 con la menor llave (subrayado) entre h 4 y h 5 : está ordenado?. Sí, continúa pues existe h 4 (elemento intercambiado) con el montón h 4 <= h está ordenado? Sí, continuaría en h 8 si existiera h 16 en el arreglo pues no puede comparar h 8 <= h 16 - luego, ordena el montón h 1 <= h 2 y h 1 <= h está ordenado?. NO, intercambia la llave h 1 con la menor llave (subrayado) entre h 2 y h 3 : está ordenado?. Sí, continúa pues existe h 3 (elemento intercambiado), con h 3 <= h 6 y h 3 <= h está ordenado?. NO, intercambia la llave h 3 con la menor llave (subrayado) con la menor llave entre h 6 y h 7 : está ordenado?. Sí, continuaría en h 7 si h 14 existiera en el arreglo pues no puede comparar h 7 <= h 14
11 - resultando: ordenamiento completo (2º bucle WHILE): en cada paso se intercambian el último componente con el primero (mínima llave del arreglo por definición, en negrita) del arreglo y luego se reordena el nuevo montón (subrayado) hasta alcanzar su posición correspondiente en. Ejemplo: - resultado del anterior bucle: intercambio de valores: resultado del reordenamiento del nuevo montón (subrayado): intercambio de valores: resultado del reordenamiento del nuevo montón (subrayado): Programa: MODULE ClasificacionMonton; FROM InOut IMPORT WriteLn,WriteString,WriteCard,Write,Read,WriteInt; CONST N=8; (* longitud de la cadena *) TYPE tira= ARRAY [1..N] OF INTEGER; VAR cadena:tira;l,r:cardinal; x:integer; PROCEDURE sift(ls,rs:cardinal); VAR i,j:cardinal; x:integer; i:=ls; j:= 2*Ls; x:= cadena[ls]; IF (j < Rs) & (cadena[j+1] < cadena[j]) THEN j:= j+1; WHILE (j <= Rs) & (x > cadena[j]) DO cadena[i]:= cadena[j]; cadena[j]:=x; i:=j; j:=2*j; IF (j < Rs) & (cadena[j+1] < cadena[j]) THEN j:= j+1; END sift; cadena[1]:= 44;cadena[2]:= 55;cadena[3]:= 12;cadena[4]:= 42;cadena[5]:= 94; cadena[6]:= 18;cadena[7]:= 06; cadena[8]:= 67; (* INSERCIàN por montones o rbol *) L:= (N DIV 2)+1; R:= N; WHILE L > 1 DO L:= L-1; sift(l,r); WHILE R > 1 DO x:= cadena[1]; cadena[1]:= cadena[r]; cadena[r]:= x; R:= R-1; sift(l,r); END ClasificacionMonton. - Análisis: - en el peor de los casos, su rendimiento es excelente n * log n - en arreglos clasificados en orden inverso (más o menos) el promedio es n/2 * log(n)
12 2.3.3 CLASIFICACIÓN POR PARTICIÓN ( ó CLASIFICACIÓN RÁPIDA ó QUICKSORT) - Método, se selecciona un elemento al azar (aunque mejora su rendimiento si se produce en la mitad del arreglo), partiéndose en dos mitades. Se quiere conseguir que en la mitad superior estén las llaves mayores que el elemento seleccionado (negrita) al azar y en la parte inferior los menores. Se rastrea el arreglo mediante dos punteros desde afuera hacia dentro y se intercambian (subrayados) pares de elementos que NO cumplan la condición indicada. Produciéndose el intercambio de llaves (aunque no estarán ordenados totalmente). Luego, cada uno de los subarreglos semiordenados resultantes (superior e inferior), se consideraran como un arreglo, iniciando el algoritmo hasta que no se puedan subdividir. Ejemplo: - Inicialmente: selección elemento: intercambios: partición del arreglo: selección elemento: intercambios en subarreglos: partición del arreglo: selección elemento: intercambios en subarreglos: Programa: MODULE ClasificacionRapida; FROM InOut IMPORT WriteLn,WriteString,WriteCard,Write,Read,WriteInt; CONST N=8; (* longitud de la cadena *) TYPE tira= ARRAY [1..N] OF INTEGER; (* cadena para la b squeda y la SUBselecci n *) VAR cadena:tira; PROCEDURE sort(l,r:cardinal); VAR i,j:cardinal; w,x:integer; i:= L;j:=R; x:= cadena[(l+r) DIV 2]; REPEAT WHILE cadena[i] < x DO i:= i+1; WHILE x < cadena[j] DO j:= j-1; IF i <= j THEN w:= cadena[i]; cadena[i]:= cadena[j]; cadena[j]:= w;
13 i:= i+1; j:= j-1; UNTIL i > j; IF L < j THEN sort(l,j); IF i < R THEN sort(i,r); END sort; cadena[1]:= 44;cadena[2]:= 55;cadena[3]:= 12;cadena[4]:= 42;cadena[5]:= 94; cadena[6]:= 6;cadena[7]:= 18; cadena[8]:= 67; sort(1,n); END ClasificacionRapida. - Análisis probabilístico: el número de comparaciones será log n el número de intercambios será 2 * ln2 Su rendimiento es moderado para valores pequeños de n El caso peor (se selecciona la llave más grande de una partición) será de n OBTENCIÓN DE LA MEDIANA. La mediana es el elemento que es menor que la mitad de n elementos y que es mayor que la otra mitad - Método similar a la clasificación rápida pues no llega a clasificar totalmente el arreglo: - se elige la llave a k, dividiendo al arreglo en dos partes iguales. Ejem: produce una partición similar a la clasificación rápida, presentándose que: - el valor a k es demasiado PEQUEÑO, en consecuencia, el índice k no está entre los índices i,j. Repitiéndose otro proceso de partición entre los elementos a i..a R. Ejem: el valor a k es demasiado GRANDE, en consecuencia, el índice k no está entre los índices i,j. Repitiéndose otro proceso de partición entre los elementos a L..a j. Ejem: el valor a k divide al arreglo en dos partes y está el índice k entre los índices i,j. Ejem: Programa: MODULE ObtencionMediana; FROM InOut IMPORT WriteLn,WriteString,WriteCard,Write,Read,WriteInt; CONST N=7; (* longitud de la cadena *) TYPE tira= ARRAY [1..N] OF INTEGER; (* cadena para la b squeda y la SUBselecci n *) VAR cadena:tira; posmediana:cardinal;
14 PROCEDURE Find(k:CARDINAL); VAR L,R,i,j:CARDINAL; w,x:integer; L:= 1;R:= N; WHILE L < R DO x:= cadena[k]; i:= L; j:=r; REPEAT WHILE cadena[i] < x DO i:= i+1; WHILE x < cadena[j] DO j:= j-1; IF i <= j THEN w:= cadena[i]; cadena[i]:= cadena[j]; cadena[j]:= w; i:= i+1; j:= j-1; UNTIL i > j; IF j < k THEN L:= i IF k < i THEN R:= j END Find; (* inicio *) cadena[1]:= 16;cadena[2]:= 12;cadena[3]:= 99;cadena[4]:= 95;cadena[5]:= 18; cadena[6]:= 87;cadena[7]:= 10; posmediana:= (1+N) DIV 2; Find(posMediana); END ObtencionMediana. - Análisis en el mejor caso tiene un rendimiento de n * log n en el peor caso tiene un rendimiento de n UNA COMPARACIÓN DE LOS MÉTODOS DE CLASIFICACIÓN DE ARREGLOS, con una permutación aleatoria de mayor rendimiento a menor, será: Clasificación Rápida Mezcla directa (ver 2.4.1Secuencias de Clasificación) Clasificación por montón Shell (Inserción por incremento decreciente) Inserción Binaria Inserción directa Seleción directa Vibración Burbuja 2.4 SECUENCIAS DE CLASIFICACIÓN. Esta vez se trata de clasificar un archivo dado mediante técnicas que usen poca memoria principal y MUCHO la memoria secundaria (DISCO); su uso viene determinado por el tamaño del fichero a tratar en comparación con la memoria principal que posea el computador. Pero los ejemplos se realizan en arreglos para evitar complejidad MEZCLA DIRECTA. Mezclar significa combinar dos o más secuencias en una sola ordenada por medio de una selección repetida entre los componentes accesibles. Fase se le llama a cada operación que trata todo el conjunto de datos una sola vez.
15 - Método consiste en dividir la secuencia en dos mitades y clasificar inicialmente por parejas que luego se irán aumentando las longitudes de las mezclas por 2, ésto es: - inicio: a : ª Fase: - Distribuye: divide la secuencia a en dos mitades (b,c) b: c: Mezcla cada elemento de b,c combinando en pares ordenados y los resultados los devuelve a la secuencia a: b: a: 44 94' 18 55' 06 12' 42 67' c: ª Fase: - Distribuye: divide la secuencia a en dos mitades (b,c) b: c: Mezcla cada elemento de b,c combinando dos cuáduplos ordenados y los resultados los devuelve a la secuencia a: b: a: ' ' c: ª Fase: - Distribuye: divide la secuencia a en dos mitades (b,c) b: c: Mezcla cada elemento de b,c combinando octetos ordenados y los resultados los devuelve a la secuencia a: b: a: c: Análisis: realiza log n pases, siendo el total de modificaciones de elementos n * log (2*n); la principal desventaja es el tener que guardar 2 * n elementos, ésto hace que no sea utilizada en la clasificación de arreglos MEZCLA NATURAL. Se llama corrida a una subsecuencia ordenada a i..a j (subrayada), esto es:
16 (a i-1 > a i ) & (Ak: i<= k < j : a k <= a k+1 ) & (a j >a j+1 ) Ejem: 12' 06 18' ' 01 - Método, similar a la mezcla directa pero combina corridas, en lugar de secuencias de longitud fija previamente determinada A En cada PASE : C distribuye mezcla C B Ejemplo: El problema empieza cuando inicialmente C tiene las corridas IMpares, y en consecuencia, habrá 1 corrida más en A ó B. La solución será que durante la mezcla llega al final de una secuencia, habrá que copiar la corrida restante (no mezclada) en C para no perder la información Ejemplo: Pero el problema se agrava cuando una de la secuencias distribuidas (A ó B) hayan muchas más corridas que en la otra. Ejem: Ejemplo: (se perdería la información 07 61) La solución estará en copiar en C la secuencia restante (NO mezclada) y no la corrida como antes se afirmaba. Ejem: Ejemplo: Programa: MODULE SecuenciaNatural; FROM Sequences IMPORT item, Sequence, OpenSeq, OpenRandomSeq, StartRead,StartWrite,copy,CloseSeq,ListSeq,Traza; FROM InOut IMPORT Read,WriteString,WriteInt,WriteLn; VAR L:INTEGER; a,b,c:sequence; PROCEDURE copyrun(var x,y:sequence); REPEAT copy(x,y) UNTIL x.eor END copyrun; OpenSeq(a);OpenSeq(b); OpenRandomSeq(c); si se
17 REPEAT (* separa la secuencia en corridas *) StartWrite(a);StartWrite(b);StartRead(c); REPEAT copyrun(c,a); IF NOT(c.eof) THEN copyrun(c,b); UNTIL c.eof; StartRead(a);StartRead(b);StartWrite(c); L:= 0; REPEAT LOOP IF a.first < b.first THEN copy(a,c); IF a.eor THEN copyrun(b,c); EXIT; ELSE copy(b,c); IF b.eor THEN copyrun(a,c); EXIT; L:= L + 1; UNTIL a.eof OR b.eof; WHILE ~a.eof DO copyrun(a,c); L:= L +1; WHILE ~b.eof DO copyrun(b,c); L:= L +1; UNTIL L = 1; ListSeq(c);CloseSeq(a);CloseSeq(b);CloseSeq(c); END SecuenciaNatural. - Análisis: en el peor caso produce n * log n comparaciones MEZCLA BALANCEADA MÚLTIPLE - Método: consiste en distribuir las corridas en más de dos secuencias. Mezclando r corridas que están distribuidas en N secuencias origina una secuencia de r/n corridas primer pase, tras el segundo pase será de r/n 2. en el - Análisis comparaciones en el pero caso será de n * log N n total de pases será de log N n CLASIFICACIÓN POLIFÁSICA - Método: 1 - Se distribuyen las corridas en N-1 secuencias y se deja otra vacía (N) 2 - Se mezclan las corridas de cada secuencia en otra secuencia vacía (N). Si las secuencias fuentes quedan: - LLENAS, significará que no está complemente ordenado y habrá que volver al punto 2, pues siempre quedará una secuencia vacía. - VACÍAS completamente, significará que en la secuencia destino de la mezcla sólo habrá una corrida y estará ordenada
18 Ejem (destino en negrita y subrayado la secuencia con menos corridas): 1 distribución en 6 (=N)secuencias y se distribuye en 5 (=N-1) : secuencias: f1 f2 f3 f4 f5 f6 corridas: mezcla, resultando las secuencias LLENAS secuencias: f1 f2 f3 f4 f5 f6 corridas: mezcla, resultando las secuencias LLENAS secuencias: f1 f2 f3 f4 f5 f6 corridas: mezcla, resultando las secuencias LLENAS secuencias: f1 f2 f3 f4 f5 f6 corridas: mezcla, resultando las secuencias LLENAS secuencias: f1 f2 f3 f4 f5 f6 corridas: mezcla, resultando las secuencias VACÍAS y f2 ordenada secuencias: f1 f2 f3 f4 f5 f6 corridas: El problema está en optimizar la primera distribución en N-1 secuencias iniciales para que haya un mínimo número de pases o mezclas. Para ello, se recurre a los Números de Fibonacci: cada número f i+1 es la suma de sus p predecesores y si no tiene ó son menores que 0 serán 0 los sumandos). Esto es: f i+1 (p) = f i (p) + f i-1 (p) f i-p (p) para i >= p f p (p) = 1 f i (p) = 0 para 0 < = i < p Ejem: - elemento: f 3 (2) = f 2+1 (2) = f 2 (2) + f 1 (2) = = 1 - serie: f (2)= 0(= 0+0),1=(0+1),1(=0+1), 2(=1+1),3(=1+2),(=3+2),... f (6) = 0(=1<6),0(= 2<6),0(= 3<6),0(=4<6),0(= 5<6), 1(=(6=6)),1(= ),2, 4,8,16(= ),... Distribución con números de Fabonacci por niveles (L): 1- se selecciona en la tabla 2.15 (pag129) el número más aproximado de corridas al real por exceso. Niveles/secuencias
19 se rellena la diferencia con corridas ficticias 3 - sabiendo el número de secuencias a aplicar, realizamos la tabla
Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero
Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 4: Ordenación Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Elección de un método Métodos directos
Estructura de datos y Algoritmos. Tema III Clasificación en memoria secundaria
Estructura de datos y Algoritmos Tema III Clasificación en memoria secundaria 3.1. Clasificación externa basada en mezcla 3.1.1. Mezcla directa. 3.1.2. Mezcla natural. 3.1.3. Mezcla balanceada múltiple.
Algorítmica y Complejidad. Tema 3 Ordenación.
Algorítmica y Complejidad Tema . Introducción.. Algoritmo de inserción.. Algoritmo de selección.. Algoritmo de la burbuja.. Algoritmo heapsort.. Algoritmo quicksort. 7. Algoritmo countingsort.. Algoritmo
Algoritmos sobre Listas
TEMA 6 Algoritmos sobre Listas V1.1 Manuel Pereira González Agenda Introducción Algoritmos de Búsqueda Búsqueda Secuencial Búsqueda Binaria Análisis de Eficiencia Algoritmos de Inserción Algoritmos de
Métodos de Ordenamiento. Unidad VI: Estructura de datos
Métodos de Ordenamiento Unidad VI: Estructura de datos Concepto de ordenación La ordenación de los datos consiste en disponer o clasificar un conjunto de datos (o una estructura) en algún determinado orden
Métodos de ordenamiento:
Métodos de ordenamiento: 0) Intercambio: a) Idea: El algoritmo de intercambio aunque es el más sencillo de implementar es uno de los más ineficientes en rendimiento. Se basa en la idea de buscar cada vez
Capítulo 3. Clasificación en Memoria Secundaria
Capítulo 3. Clasificación en Memoria Secundaria INTRODUCCIÓN Las memorias secundarias (cintas magnéticas, discos duros, ) se caracterizan en general porque el acceso es secuencial. Es decir, en un instante
Métodos de ordenamiento:
Métodos de ordenamiento: 0) Intercambio: a) Idea: El algoritmo de intercambio aunque es el más sencillo de implementar es uno de los más ineficientes en rendimiento. Se basa en la idea de buscar cada vez
Algoritmos de Ordenación
Algoritmos de Ordenación Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es Algoritmos comunes - Ordenación Ordenación o clasificación es
TEMA 7. ALGORITMOS DE BÚSQUEDA, ORDENACIÓN
M.P. Sesmero, P. de Toledo, F.J. Ordoñez, J. Gómez-Romero, J.A. Iglesias, J.L. Mira Programación TEMA 7. ALGORITMOS DE BÚSQUEDA, ORDENACIÓN Y MEZCLA Grado en Ingeniería en Tecnologías Industriales Programación
7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico.
86 Capítulo 7. ORDENAMIENTO. 7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico. Si los elementos a ordenar son compuestos
CAPITULO II ORDENAMIENTO Y BUSQUEDA. Ivan Medrano Valencia
CAPITULO II ORDENAMIENTO Y BUSQUEDA Ivan Medrano Valencia ORDENACIÓN La ordenación o clasificación de datos (sort en inglés) es una operación consistente en disponer un conjunto estructura de datos en
Curso de Programación 1
Curso de Programación 1 Plan 97 Búsqueda y Ordenación Métodos de búsqueda Existen aplicaciones en las cuales es necesario consultar si un elemento se encuentra dentro de un array. A continuación veremos
Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot
Algoritmos de ordenación Análisis y Diseño de Algoritmos Algoritmos de ordenación Algoritmos básicos: Θ(n 2 ) Ordenación por inserción Ordenación por selección Ordenación por intercambio directo (burbuja)
11-Ordenar Definiciones 11.2 Selección 11.3 Intercambio 11.4 Inserción 11.5 Shellsort 11.6 Quicksort 11.7 Mergesort.
11-Ordenar 11.1 Definiciones 11.2 Selección 11.3 Intercambio 11.4 Inserción 11.5 Shellsort 11.6 Quicksort 11.7 Mergesort 11: Ordenar 2 Definiciones Se desea ordenar un set de estructuras, que contienen
Parte II: Estructuras de Datos y Algoritmos
Parte II: Estructuras de Datos y Algoritmos 1. Introducción al análisis y diseño de algoritmos. 2. Tipos abstractos de datos. 3. Métodos de ordenación. 4 GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutiérrez,
Ordenamiento y Búsqueda
Ordenamiento y Búsqueda Facultad de Ciencias de la Computación Juan Carlos Conde R. Object-Oriented Programming I Contenido 1 Introducción 2 Intercambio directo 3 Inserción directa 4 Selección directa
Parte II: Estructuras de Datos y Algoritmos
Parte II: Estructuras de Datos y Algoritmos Tema 12. Métodos de ordenación. El modelo de ordenación interna. Esquemas simples de ordenación. Ordenación Rápida. Ordenación por Cajas. Ordenación por Base.
Apunte de cátedra: Ordenación de Arreglos
Facultad de Ciencias Exactas, Ingeniería y Agrimensura (U.N.R.) Escuela de Ciencias Exactas y Naturales Departamento de Matemática Cátedra: Computación (L.M. - P.M.) Prof. responsable: Mgr. María del Carmen
5 Métodos de Ordenamiento. 5.1 Métodos de Ordenamiento Internos Burbuja Quicksort Heapsort Inserción Simple 5.1.
5 Métodos de Ordenamiento 5.1 Métodos de Ordenamiento Internos 5.1.1 Burbuja 5.1.2 Quicksort 5.1.3 Heapsort 5.1.4 Inserción Simple 5.1.5 Shellsort 5 Métodos de Ordenamiento 5.1 Ordenamiento Interno 5.1
Algoritmos de Ordenamiento
Algoritmos de Ordenamiento mat-151 Alonso Ramírez Manzanares Computación y Algoritmos 12.04 Algoritmos de ordenamiento Entrada: secuencia de números. Salida: permutación
Unidad 4. Arreglos y Cadenas
Unidad 4. Arreglos y Cadenas Definición de Arreglo: Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad indexado significa
Decrementa y vencerás
Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 19 de febrero de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás 19 de febrero de 2018 1 / 30 1 Decrementa y vencerás Tipos de algoritmos
Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos
Estructura de Datos y Algoritmos Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos 1. Algorimos de ordenación Discutiremos el problema de ordenar un array de elementos. A los efectos de simplificar
Tema 2.- Ordenación (Parte I)
En la elaboración de estos apuntes han participado los siguientes alumnos: Helena Hernández Obregón (Curso 200/2002), Eduardo Quevedo, Raquel González y Aarón Asencio (Curso 2003/200). Actualizado por
Francisco J. Hernández López
Francisco J. Hernández López fcoj23@cimat.mx Acomodar algo en alguna secuencia especifica Objetos ordenados: Directorio telefónicos Registro de pacientes Libros en una biblioteca Cosas del hogar Se puede
ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES
ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES TEMAS Recorrido de un árbol Máximo y mínimo Búsqueda de un elemento Borrado de un nodo 3 Características ARBOLES - CONCEPTOS Cada elemento del árbol
Ordenamiento (Sorting)
Ordenamiento (Sorting) El problema del ordenamiento Ordenar: arreglo[α] arreglo[α], donde α es un tipo tal que está definida la relación < α Uno de los problemas más clásicos, útiles y estudiados de la
Métodos de ordenamiento y búsqueda para datos en memoria principal
Métodos de ordenamiento y búsqueda para datos en memoria principal Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile fguidi@ucv.cl Ordenamiento
ESTRUCTURA DE DATOS: Tema 5. Ordenamiento y Búsqueda
ESTRUCTURA DE DATOS: Tema 5. Ordenamiento y Búsqueda Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 dtorres@mixteco.utm.mx Contenido 1. Ordenamiento
Departamento de Informática Primer semestre de 2009 Ejercicios resueltos de temas del Certamen n o 3
Universidad Técnica Federico Santa María Fundamentos de Informática I Departamento de Informática Primer semestre de 2009 Ejercicios resueltos de temas del Certamen n o 3 1 Combinatoria 1. Se lanzan cuatro
23. Ordenación de vectores (tablas) Diego Gutiérrez
23. Ordenación de vectores (tablas) 1 O cómo evitar tener que buscar una aguja en un pajar Ordenación 3 Ordenación O cómo evitar tener que buscar una aguja en un pajar Cómo buscamos una palabra en un diccionario?
Métodos de ordenamiento y búsqueda para datos en memoria principal
Ordenamiento Métodos de ordenamiento y búsqueda para datos en memoria principal Dada una colección que contiene un número elementos, el ordenamiento es el proceso de reacomodar un conjunto de elementos
Recursión. Recursión continuación
Recursión Recursión continuación Recursión Temas que veremos hoy Estructuras de control iterativas, repetitivas y la recursión. Ejemplos recursivos Búsqueda lineal Eficiencia y recursión Conclusiones Recursión
Tema 1. ORDENACIÓN, BÚSQUEDA E INTERCALACIÓN INTERNA (Algoritmos)
Tema 1. ORDENACIÓN, BÚSQUEDA E INTERCALACIÓN INTERNA (Algoritmos) 1. Declaraciones previas Para los algoritmos que aparecen a continuación se supone que se han realizado las siguientes declaraciones globales:
Tema 6. Ordenación, búsqueda e intercalación interna
Fundamentos de Programación I Tema 6. Ordenación, búsqueda e intercalación interna Luís Rodríguez Baena (luis.rodriguez@upsam.net) Universidad Pontificia de Salamanca (campus Madrid) Escuela Superior de
Algoritmos de Ordenamiento
Algoritmos de Ordenamiento Fernando A. Lagos B. Copyleft 2007 INDICE 1 Introducción Pág. 3 2 Tipos de Algoritmos Pág. 4 2.1 Algoritmos iterativos Pág. 5 2.2 Algoritmos recursivos Pág. 6 3 Método de la
Métodos de ordenamiento y búsqueda en vectores
Métodos de ordenamiento y búsqueda en vectores Ordenación (clasificación) Es la operación de organizar un conjunto de datos en algún orden o secuencia específica, tal como creciente o decreciente para
EXAMENES RESUELTOS DE PROGRAMACION I
EXAMENES RESUELTOS DE PROGRAMACION I Comentarios por Jose Antonio Vaqué EXAMEN DE septiembre 1994, Reserva Soluciones no oficiales 1.- Determinar los valores reales válidos en Modula-2: a) 56.2F-54 y 2.2
Decrementa y vencerás II
Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 21 de febrero de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 1 / 22 1 Decrementa y vencerás II Dr. Eduardo
<tipo> Tipo de dato de los elementos del vector
Vectores y matrices Declaración Vector (array unidimiensional): []; Tipo de dato de los elementos del vector Identificador de la variable.
NOTAS(1) NOTAS(2)... NOTAS(I)... NOTAS(N)
TRABAJO DE INVESTIGACIÓN ARREGLOS, MATRICES Y ARCHIVOS 1. ARREGLOS Y MATRICES Un array (matriz o vector) es un conjunto finito y ordenado de elementos homogéneos. La propiedad ordenado significa que el
10. Algoritmos de ordenación
10. Algoritmos de ordenación Se describen aquí algunos algoritmos de ordenación. Los comentarios relativos a su eficacia se deben tomar en términos relativos, pues esa eficiencia va a depender del tipo
INDICE. Prólogo de la Segunda Edición
INDICE Prólogo de la Segunda Edición XIII Capitulo 1. Algoritmos y Programas 1 1.1. Los sistemas de procesamiento de la información 2 1.2. Concepto de algoritmo 4 1.2.1. Características de los algoritmos
Estructuras de Datos y Algoritmos
Estructuras de Datos y Algoritmos Prof. Dr. P. Javier Herrera Contenido 1 Conceptos básicos de grafos y su especificación algebraica 2 Algoritmos de ordenación 3 Algoritmos de búsqueda 2 1. Grafos Estructuras
Porque usar Arreglos?
Arreglos Porque usar Arreglos? Se tienen las calificaciones de 100 alumnos, como sacar cuantos alumnos tienen una calificación superior al promedio? Doble lectura: Un ciclo para leer y acumular las calificaciones,
Análisis de algoritmos
Tema 08: Divide y vencerás (DyV) M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom 1 Contenido Introducción Divide y vencerás Observaciones
Algorítmica y Complejidad. Tema 5 Divide y Vencerás.
Algorítmica y Complejidad Tema Divide y Vencerás. . Método.. Un ejemplo sencillo.. Complejidad del método.. Ejemplo: El máximo subarray.. Ejemplo: Multiplicación de enteros. . Método.. Un ejemplo sencillo..
BUSQUEDA SECUENCIAL Y DIRECTA, MARCELA MARQUEZ REBECA NAVARRO FONSECA GUADALUPE RUIZ ANGULO JONATHAN ALEXIS TOPETE ESTRUCTURA Y OPERACIONES
BUSQUEDA SECUENCIAL Y DIRECTA, MARCELA MARQUEZ REBECA NAVARRO FONSECA GUADALUPE RUIZ ANGULO JONATHAN ALEXIS TOPETE ESTRUCTURA Y OPERACIONES BUSQUEDA Cuando se realizan operaciones de búsqueda es preciso
Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas
Tema 9 Algoritmos sobre listas Programación 2015-2016 Programación - Tema 9: Algoritmos sobre listas 1 Tema 9. Algoritmos sobre listas Algoritmos sobre Arrays. Búsqueda. Inserción. Ordenación. Programación
Tema 9. Recursividad
Tema 9. Recursividad http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz@icc.uji.es Estructuras de datos y de la información Universitat
ARBOLES B. Lo que si es cierto es que la letra B no significa "binario", ya que:
ARBOLES B El problema original comienza con la necesidad de mantener índices en almacenamiento externo para acceso a bases de datos, es decir, con el grave problema de la lentitud de estos dispositivos
Esquema de Dividir y Vencer
Esquema de Dividir y Vencer Amalia Duch Barcelona, marzo de 2006 Índice 1. Esquema general 1 2. Búsqueda binaria (binary search) 2 3. Ordenación por fusión (merge sort) 2 4. Ordenación rápida (quick sort)
Estructuras de Datos y Algoritmos. Curso 2009/2010. Tema 3: Divide y Vencerás
Estructuras de Datos y Algoritmos Facultad de Informática Universidad Politécnica de Valencia Curso 2009/2010 Tema 3: Divide y Vencerás FI UPV: Curso 2009/2010 TEMA 3. Divide y Vencerás Objetivos Estudio
ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS
1 ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS Corina Flores Villarroel ORDENAMIENTO EN ARREGLOS Y COLECCIONES Una de las tareas más comunes a la hora de procesar datos es la clasificación u ordenación de los datos.
Tema 7: Árbol Binario
Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el???? Tema 7: Árbol Binario En el árbol binario se combina lo mejor del array (acceso rápido a elementos,
Capítulo. Algoritmos de ordenación y búsqueda. Contenido. Introducción
Capítulo 9 Algoritmos de ordenación y búsqueda Contenido Ordenación Ordenación por burbuja Ordenación por selección Ordenación por inserción Ordenación Shell Ordenación rápida ( quicksort) Búsqueda en
Algorítmica y Lenguajes de Programación. Búsqueda
Algorítmica y Lenguajes de Programación Búsqueda Búsqueda. Introducción Hace dos lecciones se dijo que había tres tratamientos básicos sobre vectores: Recorrido. Ordenación. Búsqueda. Durante las últimas
Divide & Conquer. Herman Schinca. Clase de Junio de 2011
Divide & Conquer Herman Schinca Clase 20 7 de Junio de 2011 Divide y vencerás Idea aplicable a muchas situaciones de la vida. Origen histórico atribuído a Julio César en relación a sus estrategias militares.
Algoritmos y Programación Clase 8
Algoritmos y Programación Ordenamiento y Búsqueda Anexo: Uso de Procedimientos Sub y Procedimientos Function 1 EXAMEN 1. Lunes 16 de abril 4 pm. 2. Tema: Lo visto hasta la clase de hoy. 2 Contenido Ordenamiento
ESTRATEGIAS PARA LA RESOLUCIÓN DE PROBLEMAS CON MATRICES N-DIMENSIONALES
ENUNCIADO ESTRATEGIAS PARA LA RESOLUCIÓN DE PROBLEMAS CON MATRICES N-DIMENSIONALES El Instituto del Servicio Meteorológico Nacional le ha proporcionado la siguiente matriz tridimensional que posee registros
Algoritmos. el algoritmo de ordenación. de ordenación (II) a 18 anales. En la primera parte de este. Introducción
Algoritmos de ordenación (II) Todos sabemos que los ordenadores, entre otras cosas, sirven para ordenar. Pero Cómo lo hacen? Existen distintos modos de hacerlo? Depende de lo que tengamos que ordenar?
PROGRAMACIÓN ESTRUCTURADA
Universidad Nacional de Jujuy PROGRAMACIÓN ESTRUCTURADA Trabajo Práctico Nº 11 Tema: Operaciones sobre Arreglos. Ordenación. Apellido y Nombre: Fecha: / / Conceptos Teóricos ORDENACIÓN DE ARREGLOS Los
Algoritmos y Complejidad
Algoritmos y Complejidad Introducción Pablo R. Fillottrani Depto. Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre 2017 Introducción Algoritmos y Algoritmia Problemas
Ordenamiento en Tiempo Lineal - Medianas y Ordenes sticas
Ordenamiento en Tiempo Lineal - Medianas y Ordenes Estadísticas sticas CLASIFICACIÓN EN TIEMPO LINEAL. 1.- Cota Inferior para Ordenamiento por comparaciones. -árbol de decisión. - limite inferior para
Análisis y Diseño de Algoritmos Tablas de Hash
Análisis y Diseño de Algoritmos Tablas de Hash Guillermo Morales-Luna Arturo Díaz Pérez CONTENIDO 1. Dispersión 2. Funciones de dispersión (a) Método de división (b) Método de multiplicación 3. Direccionamiento
Estructuras de Datos II
Estructuras de Datos II Segundo Parcial Los árboles B+ son estructuras de datos jerárquicas que se utilizan para almacenar y manipular datos ordenados de forma muy eficiente, ya que por su estructura y
Programa de teoría. Algoritmos y Estructuras de Datos II. 2. Divide y vencerás. 1. Análisis de algoritmos
Programa de teoría Algoritmos y Estructuras de Datos II 1. Análisis de algoritmos 2. Divide y vencerás 3. Algoritmos voraces 4. Programación dinámica 5. Backtracking 6. Ramificación y poda A.E.D. II 1
Informática II Fundamentos de Programación Escuela Superior de Ingenieros de San Sebastián - Tecnun
Algoritmos de búsqueda y ordenación con C++. Informática II Fundamentos de Programación 1 Concepto de algoritmo Sentido amplio: : Secuencia de pasos o etapas que conducen a la realización de una tarea.
Programación I (Plan 1999) Algoritmos y Estructuras de Datos II (Plan 2009) Mgter. Oscar Adolfo Vallejos FaCENA - UNNE
Unidad 3: Eficiencia de Algoritmos Tema V: Búsqueda. Búsqueda. Búsqueda Lineal. Búsqueda binaria. Búsqueda Máximos y Mínimos. Análisis de los algoritmos de búsqueda. Programación I (Plan 1999) Algoritmos
6. Estructuras básicas de control 1. Pseudocódigo
6. Estructuras básicas de control 1 Acciones Pseudocódigo Slide 1 Estructuras de control Secuencia Selección simple (si... entonces... ) doble (si... entonces... si no... ) múltiple (según el caso... )
Puede clasificarse en cuatro componentes básicas la eficiencia de un programa:
24. Eficiencia. Complejidad temporal. 24. Introducción. La eficiencia de un programa es una medida de la cantidad de recursos que se requieren para producir resultados correctos. Hace algunos años atrás,
FUNDAMENTOS DE OBJECT PASCAL
FUNDAMENTOS DE OBJECT PASCAL 1. ASPECTOS GENERALES DE LA SINTAXIS Los bloques de código quedan delimitados por y end. Se usa punto y coma como separador de sentencias de código. Comentarios: - ias líneas:
Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero
Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 1: Recursividad Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Ejemplos recursivos Recursividad
Nombre y Apellidos: Especialidad y Grupo:
Nombre y Apellidos: Especialidad y Grupo: FUNDAMENTOS DE INFORMÁTICA 15-septiembre-2003 PROGRAMA de Estructuras repetitivas y alternativas (2 puntos) 1. Dado el módulo EjForAni.bas, modificarlo para visualizar
Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani
Introducción Introducción Pablo R. Fillottrani Depto. Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Algoritmos y Algoritmia Problemas e instancias Primer Cuatrimestre 2014 Algoritmos
Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa
Estructura de Datos y de la Información Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa Laboratorio de Investigación y Desarrollo en Inteligencia Artificial Departamento de Computación
Archivos Indice. Indexación y. Asociación. Conceptos Básicos Indices Ordenados Arboles. Asociación. Docente: Albert A.
Docente: Albert A. Osiris Sofía 1º Cuatrimestre 2002 Conceptos Básicos Indices Ordenados Arboles Asociación Indexación y Asociación Archivos Indice 1 2 3 1 Archivos Indice Ordenados Asociativos Primario
FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 3. Estructuras de Almacenamiento. Básicas. Definición y Manejo.
FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA Tema 3. Estructuras de Almacenamiento Básicas. Definición y Manejo. 1.- Búsqueda de Información. Definición de Clave. 2.- Definición y Manejo
Estructura de datos y de la información Boletín de problemas - Tema 10
Estructura de datos y de la información Boletín de problemas - Tema 10 1. En el caso de que sea posible, dar un ejemplo de los siguientes puntos. Si no, explicar por qué no lo es. Considerar un valor genérico
Hashing (Funciones de Dispersión)
Hashing características Hashing (Funciones de Dispersión) Mauricio Solar Lorna Figueroa No necesita almacenamiento adicional (índice). Facilita la inserción y eliminación rápida de registros. Encuentra
Descubrir los árboles como paradigma de los tipos Recursivos de Datos
TEMA 5 ÁRBOLES(*) Una de las estructuras las datos más importantes y prominentes que existen es el árbol. No es un árbol en el sentido botánico de la palabra, sino uno de naturaleza más abstracta. Todos
Estructuras de datos Listas y árboles
Estructuras de datos Listas y árboles Dra. Elisa Schaeffer elisa.schaeffer@gmail.com PISIS / FIME / UANL Listas y árboles p. 1 Listas Listas son estructuras un poco más avanzadas que puros arreglos, como
Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:
Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades: La prueba es individual y sin material. La duración es 3 horas.
Estructura de datos y de la información Boletín de problemas - Tema 9
Estructura de datos y de la información Boletín de problemas - Tema 9 1. Dada la siguiente función recursiva: void F(char c) { if (( A
Programación de Sistemas
Programación de Sistemas Algoritmos de Ordenación Índice Por qué es importante la ordenación? Un par de ejemplos InsertionSort QuickSort Para cada uno veremos: En qué consisten, Casos extremos Eficiencia
Alonso Ramirez Manzanares Computación y Algoritmos 03.05
Tablas de hash (2) mat-151 Alonso Ramirez Manzanares Computación y Algoritmos 03.05 Tablas de hash: resolviendo colisiones por encadenamiento cuando el número de elementos en total es proporcional al número
Tema 1. Ordenación, búsqueda e intercalación interna
Fundamentos de Programación II Tema 1. Ordenación, búsqueda e intercalación interna Luis Rodríguez Baena (luis.rodriguez@upsam.es) Universidad Pontificia de Salamanca Escuela Superior de Ingeniería y Arquitectura
Colas de prioridad. Capítulo Operaciones Relaciones entre el número de nodos y la altura en árboles binarios.
Capítulo 8 1 Colas de prioridad. Se desea disponer de una estructura de datos y encontrar los algoritmos asociados que sean eficientes para seleccionar un elemento de un grupo. Uno de los valores de la
ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES
ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES Características ARBOLES - CONCEPTOS Cada elemento del árbol se relaciona con cero o más elementos a quienes llama hijos. Si el árbol no
Tablas de Dispersión (Hashing Tables)
Tablas de Dispersión (Hashing Tables) Las tablas de dispersión o hashing tables (en inglés) es una técnica que se utiliza para implementar inserciones, eliminaciones y búsquedas en un tiempo medio constante.
dit UPM Tema 2: Algoritmos /ordenación /java Análisis y diseño de software José A. Mañas
Análisis y diseño de software dit UPM Tema 2: Algoritmos /ordenación /java José A. Mañas http://jungla.dit.upm.es/~pepe/doc/adsw/index.html 23.2.2018 objetivos algoritmos de ordenación conocer nombres
Este método se basa en buscar el elemento menor el vector y colocarlo en la primera
Lectura ORDENACIÓN DE ARREGLOS Con frecuencia se requiere clasificar u ordenar los elementos de un vector (arreglo unidimensional) en algún orden en particular. Por ejemplo, ordenar un conjunto de números
Lecturas 7 y 8. Capítulo Ordenamiento
Capítulo 1 Lecturas 7 y 8 1.1. Ordenamiento Se presenta la especicación de una máquina (programa) que resuelve el problema de ordenar los elementos de un arreglo, se describen, construyen y analizan algunos
Tema 3. Análisis de costes
Tema 3. Análisis de costes http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz}@icc.uji.es Estructuras de datos y de la información
Algorítmica y Lenguajes de Programación. Ordenación (ii) En la lección anterior se vieron dos métodos de ordenación:
Algorítmica y Lenguajes de Programación Ordenación (ii) Ordenación. Introducción En la lección anterior se vieron dos métodos de ordenación: Método de la burbuja. Método de la burbuja con señal. El primero
Programación II Práctica 03: Recursividad Versión del 10/08/2016
Programación II Práctica 03: Recursividad Versión del 10/08/2016 Como vimos en clase un algoritmo recursivo es un algoritmo que expresa la solución de un problema en términos de una llamada a sí mismo.
Guía práctica de estudio 4 Algoritmos de búsqueda parte 1
Guía práctica de estudio 4 Algoritmos de búsqueda parte 1 Elaborado por: Revisión: Ing. Laura Sandoval Montaño Facultad de Ingeniería U.N.A.M. Guía Práctica 4 Estructura de datos y Algoritmos II Algoritmos
Recursividad. 1.1 Concepto de Recursividad. Objetivos. Metodología de la Programación II Entender el concepto de recursividad.
Objetivos Metodología de la Programación II Entender el concepto de recursividad. Conocer los fundamentos del diseño de algoritmos recursivos. Recursividad Comprender la ejecución de algoritmos recursivos.