2. El método Shell (en honor a su descubridor) mejor método de inserción
simple ordenando subarreglos del arreglo original en forma separada.
Para crear estos nuevos subarreglos, se toman elementos saltados del
arreglo original en relación a incrementos predeterminados.
Por ejemplo suponiendo un arreglo X, y tomando un incremento (salto) igual a
5, se generarían los siguientes subarreglos:
Subarreglo 1:X[0] X[5] X[10]
Subarreglo 2:X[1] X[6] X[11]
Subarreglo 3:X[2] X[7] X[12]
Subarreglo 4:X[3] X[8] X[13]
Con un salto igual a 3 se
obtendrían:
Subarreglo 1:X[0] X[3] X[6]
Subarreglo 2:X[1] X[4] X[7]
Subarreglo 3:X[2] X[5] X[8]
Subarreglo 4:X[3] X[6] X[9]
3. En el método de clasificación por inserción, cada elemento se compara con los elementos contiguos de su
izquierda, uno tras otro. Si el elemento a insertar es más pequeño - por ejemplo -, hay que ejecutar muchas
comparaciones antes de colocarlo en su lugar definitivamente. Shell modifico los saltos contiguos resultantes
de las comparaciones por saltos de mayor tamaño y con eso se conseguía la clasificación más rápida. El
método se basa en fijar el tamaño de los saltos constantes, pero de más de una posición.
Supongamos un vector de elementos
4 12 16 24 36 3
En el método de inserción directa, los saltos se hacen de una posición en una posición y se
necesitaran cinco comparaciones. En el método de Shell, si los saltos son de dos posiciones, se realizaran
comparaciones.
4 12 16 24 36 3
4.
5. 1. Comparar el primer y segundo elemento, intercambiarlos si el primero es
mayor que el segundo; luego se compara el primero con el tercero,
intercambiándose en caso necesario, y el proceso se repite hasta llegar al último
elemento. De este modo, tras la primera iteración la casilla primera conservara el
elemento más pequeño de esa iteración.
2. Se repite el paso anterior, pero ahora con el segundo y tercero, en caso de ser
necesario se intercambian, y así hasta llegar a comparar el segundo con el
ultimo.
Por ejemplo, imaginemos que tenemos los siguientes valores:
5 6 1 0 3
6. Lo que haría una burbuja simple, seria comenzar recorriendo los valores de izq. A derecha,
comenzando por el 5.
Lo compara con el 6, con el 1, con el 0 y con el 3, si es mayor o menor (dependiendo si el
orden es ascendiente o descendente) se intercambian de posición.
Luego continua con el siguiente, con el 6, y lo compara con todos los elementos de la lista,
esperando ver si se cumple o no la misma condición que con el primer elemento. Así,
sucesivamente, hasta el último elemento de la lista.
7. Ordenar un conjunto de números enteros almacenados en un vector, utilizando el
siguiente algoritmo (método de la burbuja): se van recorriendo una a una todas las
posiciones del vector, desde la primera hasta la penúltima. Estando en cada una
de estas posiciones, se recorren, a su vez, todas las posiciones siguientes y se
compara su valor con el de la posición actual. Si se encuentra un valor menor se
intercambia con el de esta posición.
Para implementar este algoritmo son necesarios dos bucles: el primero, bucle i,
recorre el vector desde la posición i=0 hasta i=SIZE-1. El segundo bucle, bucle j,
recorre el vector desde la posición j=i+1 hasta el final. Para que quede más claro,
vamos a ver con un ejemplo como funciona este algoritmo. Supongamos que
queremos ordenar los siguientes cinco números: 7,3,5,1,4. Estos números se
almacenarán en un vector de la siguiente manera:
8. j = 2 {1 5 7 3 4} Se intercambia 5 con 7 j
= 3 {1 3 7 5 4} Se intercambia 3 con 5 j
= 4 {1 3 7 5 4} No se intercambia 3 con
4
i = 2 {1 3 7 5 4}
j = 3 {1 3 5 7 4} Se intercambia 5 con 7 j
= 4 {1 3 4 7 5} Se intercambia 4 con 5
i = 3 {1 3 4 7 5}
j = 4 {1 3 4 5 7} Se intercambia 5 con 7
¡Números ordenados!
Ya se ve que no es necesario que el
bucle i llegue hasta el valor 4.
Vamos a recorrer las posiciones del vector
desde i=0 hasta i=3.
i = 0 {7 3 5 1 4}
Recorremos el vector desde j=1 hasta j=4 y
comparamos vector [0]=7 con vector [j].
Si vector [j]<vector [0] intercambiamos los
valores de posición. Vamos a ver cómo
quedaría el vector inicial una vez que
termina cada bucle j.
j = 1 {3 7 5 1 4} Se intercambia 3 con 7 j =
2 {3 7 5 1 4} No se intercambia 3 con 5 j =
3 {1 7 5 3 4} Se intercambia 1 con 3 j =
4 {1 7 5 3 4} No se intercambia 1 con 4
i = 1 {1 7 5 3 4}
Recorremos el vector desde j=2 hasta j=4 y
comparamos vector [1]=7 con vector [j].
9. El problema de la mochila es definido formalmente
como:
Se tiene una determinada instancia de KP con un
conjunto de objetos N, que consiste de n objetos j
con ganancia pj y peso wj, y una capacidad c.
(Usualmente, los valores toman números enteros
positivos).
El objetivo es seleccionar un subconjunto de N tal
que la ganancia total de esos objetos
seleccionados es maximizado y el total de los
pesos no excede a c.
10. Un avión lleva de equipaje 6 artículos, pero entre todos sobrepasan las 600
libras que considera puede cargar. Para ayudarse en la selección ha asignado
un valor a cada artículo en orden ascendente de importancia.
Planteamiento
Puesto que el modelo es binario, la variable puede tomar solo dos posibles valores:
Xi = 0 no se lleva el articulo i, 1 sí se lleva el articulo i.
Max Z= 1000X1 + 600X2 + 700X3 + 150X4 + 150X5
420X1 + 230X2 + 210X3 + 150X4 + 70X6 <= 600
Xi ∈ {0,1}
Solución
Z = 1450
X1 = 0
X2 = 1
X3 = 1
X4 = 1
X5 = 0
El que alguna variable de el valor de 1, significa que nos llevamos en la mochila el
articulo. En este caso nos llevamos los artículos 2, 3 y 4. El valor de Z nos indica el
beneficio de llevar los tres artículos. Por ultimo, de acuerdo con la restricción, no
sobrepasamos el peso permitido.
11. Este algoritmo consiste básicamente
en dividir en partes iguales la lista de
números y luego mezclarlos
comparándolos, dejándolos
ordenados.
Si se piensa en este algoritmo
recursivamente, podemos imaginar
que dividirá la lista hasta tener un
elemento en cada lista, luego lo
compara con el que está a su lado y
según corresponda, lo sitúa donde
corresponde
12. Se divide el problema en partes más
pequeñas.
Se resuelven recursivamente los
problemas más pequeños.
Los problemas mas pequeños se
combinan para resolver el grande.
Los algoritmos que utilizan este
principio son en la mayoría de los
casos completamente recursivos
como es este caso.