Professional Documents
Culture Documents
- Muchas de las estructuras de datos y algoritmos descritos en este libro, son a menudo usados
para crear bases de datos.
- Algunas estructuras de datos que son usadas como herramientas para el programador: Ayudan a
ejecutar un algoritmo.
- Otras estructuras de datos modelan situaciones del mundo real, como lneas telefnicas que
corren a travs de las ciudades.
- Una base de datos es una unidad de almacenamiento de datos compuesta por muchos registros
similares.
- Un registro a menudo representa un objeto del mundo real, como un empleado o una parte de
un automvil.
- Un registro es dividido en campos. Cada campo almacena una caracterstica del objeto descrito
por el registro.
- Una llave, es un campo en un registro que es usado para llevar a cabo alguna operacin de la
informacin. Por ejemplo, los registros de personal deberan ser ordenados por el campo Apellido.
- Una base de datos puede ser buscada por todos los registros, cuyas llaves tienen cierto valor.
Este valor es llamada "Llave de bsqueda".
Preguntas
2.- Reordenar el contenido de una estructura de datos, en cierto orden es llamado ordenamiento .
3.- En una base de datos, un campo es:
b) Un objeto especifico.
c) Parte de un registro.
4.- El campo utilizado cuando se busca por un registro en particular es la llave de bsqueda.
a) Es una clase.
c) Es un programa.
a) Crea un objeto.
c) Crea referencias.
9.- En java, para acceder al mtodo de un objeto, se requiere del operador punto.
- Los arreglos desordenados ofrecen una insercin rpida, pero una lenta bsqueda y eliminacin.
- Una interfaz de clase, est compuesta de los mtodos (y ocasionalmente campos) de los que el
usuario clase puede acceder.
- Una interfaz de clase puede ser diseada para hacer las cosas simples para el usuario de clase.
- El logaritmo de base B de un numero A es el nmero de veces que puedes dividir A por B, antes
que el resultado sea menor a 1.
- Las bsquedas binarias requieren tiempo proporcional al logaritmo del numero de tems.
- La notacin Big O provee una conveniente manera de comparar la velocidad de los algoritmos.
- Un algoritmo que corre a O(1) es el mejor, O(log N) es bueno, O(N) es normal, y O(N2) es muy
malo.
Preguntas de arreglos
2.- Verdadero o Falso: Cuando borras un elemento desde un arreglo desordenado, en muchos
casos cambias otros elementos para llenar el espacio. (Verdadero).
7.- Cuando la clase A est usando a la clase B para algo, los mtodos y campos de la clase A
pueden acceder a la clase B, son llamados interfaz de la clase B.
b) Ms rpidos en la insercin.
c) Ms rpidos de crear.
d) Ms rpidos en la bsqueda.
11.- El mximo nmero de elementos que deben ser examinados para completar una bsqueda
binaria en un arreglo de 200 elementos es.
a) 200.
b) 8.
c) 1.
d) 13.
16.- Tanto variables como tipos primitivos u objetos pueden ser puestos en un arreglo.
- Los algoritmos de ordenamiento, en este captulo, estn asumidos en arreglos como estructura
de almacenamiento.
- El ordenamiento involucra comparar las llaves de los elementos en el arreglo y moverlos hasta
que estn ordenados.
- Todos los algoritmos en este captulo, se ejecutan en O(N2). Sin embargo, algunos pueden ser
sustancialmente ms rpidos que otros.
- Una invariante es una condicin que permanece sin cambiar mientras un algoritmo se ejecuta.
1.- Los algoritmos de ordenamiento hechos por computadoras son ms limitados que los de los
humanos porque:
2.- Dos operaciones bsicas del ordenamiento simple son comparar elementos e intercambiarlos
(o algunas veces copiarlos).
3.- Verdadero o Falso: El mtodo de la burbuja siempre termina comparando cada tem con todos
los dems. (Falso).
a) Comparar e intercambiar.
b) Mover y copiar.
c) Mover y comparar.
d) Copiar y comparar.
5.- Verdadero o Falso: Si hay N elementos, el mtodo de la burbuja realiza exactamente N*N
comparaciones. (Falso).
c) Un numero de elementos debe ser cambiado para insertar cada elemento en su posicin
ordenada correspondiente.
7.- Verdadero o Falso: Si, en una situacin de ordenamiento en particular, el intercambio toma
mucho ms tiempo que las comparaciones, el mtodo de seleccin es aproximadamente dos veces
ms rpida que el mtodo de la burbuja. (Falso).
a) In
b) Out
c) temp
d) a[out]
b) Muchos elementos estn en su posicin final de orden, pero unos pocos aun necesitan ser
ordenados.
d) Un grupo de elementos son ordenados entre ellos mismos, pero puede ser necesario insertar
dentro del grupo algunos elementos externos al grupo.
14.- La invariante en el mtodo de insercin es: Elementos con ndices menores que los elementos
parcialmente ordenados.
- Pilas, colas y colas de prioridad son estructuras de datos usualmente utilizadas para simplificar
ciertas operaciones de programacin.
- Las operaciones importantes de las pilas son push (insertar un tem en la cima (top) de la pila) y
pop (quitar el tem que est en la cima (top)).
- Las operaciones importantes de la cola son insertar un tem en la parte trasera de la cola (rear) y
quitar el tem desde la parte frontal de la cola (front).
- Una cola puede ser implementada como cola circular, que est basada en un arreglo cuyos
ndices se envuelven circularmente desde el fin del arreglo hasta el inicio.
- Las operaciones importantes de la cola de prioridad son insertar un elemento en orden y quitar
el elemento de valor ms pequeo.
- Estas estructuras de datos pueden ser implementadas con arreglos o con otro mecanismo como
listas enlazadas.
- Las expresiones aritmticas ordinarias estn escritas en notacin infija, llamadas as porque el
operador est escrito entre dos operandos.
- Una pila es una herramienta til tanto para traducir una expresin in-fija a post-fija como para
evaluar una expresin post-fija.
1.- Suponiendo que ingresamos 10, 20, 30 y 40 en una pila. Luego sacamos tres elementos. Cual
queda en la pila?
R: 10.
2.-Cual de las siguientes es verdadera?
a) La operacin Pop en una pila es considerablemente ms simple que la operacin quitar en una
cola.
b) El contenido de una cola puede envolverse circularmente, mientras que en una pila no.
d) En la pila y en la cola, los elementos removidos en secuencia son quitados desde altos ndices en
el arreglo.
4.- Verdadero o Falso: Una pila o cola a menudo sirve como el mecanismo de trasfondo en el que
se basa un arreglo ADT.(Falso)
5.- Asuma que un arreglo est enumerado con ndice 0 en la izquierda. Una cola representando la
fila para entrar a ver una pelcula, y el primero en llegar, que tiene el numero 1, tiene la ventana
de tickets a su derecha. Entonces:
b) Los nmeros de ndice del arreglo y los nmeros de la fila para entrar incrementan en
direcciones opuestas de izquierda a derecha.
c) Los nmeros de los ndices del arreglo corresponden numricamente a la posicin en la fila para
entrar.
d) La fila para entrar y los elementos del arreglo se mueven en la misma direccin.
6.- Como otros elementos son insertados y removidos, hay un tem que se mueve a lo largo del
arreglo desde ndices bajos a ndices altos? o de ndices altos a bajos?
R: Ninguno se mueve.
7.- Suponga que se insertan 15, 25, 35 y 45 en una cola. Luego se quitan 3 elementos. Cul
queda?
R: 45.
8.- Verdadero o Falso: Ingresando y quitando elementos en una pila e insertando y quitando
elementos en una cola. Todos toman tiempo O(N). (Falso, toman O(1)).
R: O(N)
12.- Verdadero o Falso: Al menos uno de los mtodos en cdigo de cola de prioridad usa una
bsqueda lineal. (Verdadero).
13.- Una diferencia entre una cola de prioridad y un arreglo ordenado es que:
a) El elemento de menor prioridad no puede ser extrado fcilmente del arreglo como lo es en la
cola de prioridad.
b) El arreglo debe estar ordenado, mientras que en la cola de prioridad no lo necesita estar.
c) El elemento de ms alta prioridad puede ser extrado fcilmente desde la cola de prioridad, pero
no desde el arreglo.
14.- Suponga que bas una cola de prioridad como clase en la clase del arreglo ordenado. Esta
comprar la capacidad de la bsqueda binaria. Si quieres el mejor funcionamiento para tu cola de
prioridad, necesitaras modificar la clase del arreglo ordenado? (pregunta ql weviada).
- El objeto LinkedList contiene una referencia, a menudo llamada first (primero), al primer link d la
lista.
- Insertar un elemento en el principio de una lista enlazada involucra cambiar el siguiente campo
de "new link" apuntando al viejo "first link" (primer link) y cambiar el primero apuntando al nuevo
tem.
- Borrar un elemento al comienzo de una lista, involucra poner "first" apuntando a "first.next" (el
siguiente al primero).
- Para recorrer una lista enlazada, se empieza del primer elemento, luego de link en link, usando
cada "prximo link" de cada link para encontrar el prximo link.
- Un link con un valor especifico puede ser encontrado recorriendo la lista. Una vez encontrado, un
tem puede ser mostrado, borrado u operado en otras maneras.
- Un nuevo link pude ser insertado antes o despus de un link con un valor especificado, siguiendo
un recorrido para encontrar este link.
- Una lista doblemente terminada mantiene un puntero al ltimo link en la lista, a menudo
llamado "last" (ultimo) lo mismo con el primero.
- Un tipo de dato abstracto (ADT) es una clase de almacenamiento de datos considerado sin
referencias a su implementacin.
- Las pilas y colas son ADTs. Pueden ser implementadas usando tanto arreglos como listas
enlazadas.
- En una lista enlazada ordenada, los link son puestos en orden ascendente ( o a veces
descendente) segn su valor.
La insercin en las listas enlazadas ordenadas toma de un tiempo O(N) porque el punto de
insercin correcto debe ser encontrado. La eliminacin del link ms pequeo toma tiempo O(1).
- En una lista doblemente enlazada, cada link contiene una referencia al link anterior tambin al
prximo link.
- Una lista doblemente enlazada permite recorridos en reversa y eliminacin desde el fin de la
lista.
- Un iterador es una referencia, encapsulada en un objeto de clase, que apunta a un link en una
lista asociada.
- Los mtodos del iterador permiten al usuario mover el iterador a lo largo de la lista y acceder al
link actualmente apuntado (current).
- Un iterador puede ser usado para recorrer a travs de la lista, realizando algunas operaciones en
los link seleccionados (o en todos los link).
2.- El acceso a los link en una lista enlazada es usualmente a travs del primer link (first).
3.- Cuando creas una referencia a un link en una lista enlazada, este:
4.- Cuantas referencias debes cambiar para insertar un link en medio de una lista enlazada
simple?
R: 2.
5.- Cuantas referencias debes cambiar para insertar un link al final de una lista enlazada simple?
R: 1.
c) El prximo campo del nuevo link ser referido al antiguo first link.
7.- Asumiendo que current (actual) apunta del siguiente al ltimo en una lista enlazada simple,
Que expresin eliminar al ltimo link de la lista?
R: current.next = null;
8.- Cuando todas las referencias (o enlaces) a un link son cambiadas para otro link, que pasa con
el link?
c) Tiene punteros corriendo hacia adelante y hacia atrs entre los links.
10.- Un caso especial ocurre a menudo para la rutina de insercin y eliminacin cuando la lista est
vaca.
11.- Asumiendo que una copia toma ms tiempo que una comparacin, es ms rpido borrar un
tem con cierto valor de una lista enlazada o de un arreglo desordenado?
12.- Cuntas veces necesitaras recorrer una lista enlazada simple para borrar el item con el valor
ms grande?
13.- De lo discutido acerca de listas en este captulo, Cul sera la mejor para implementar una
cola?
14.- Cul de los siguientes no es verdadero? Los iteradores seran tiles si quisieras:
15.- Cual crees que sera la mejor opcin para implementar una pila: Una lista enlazada simple o
un arreglo?
R: Usualmente, la lista. Ambas poseen push y pop en tiempo O(1), pero la lista usa memoria ms
eficientemente.
Resumen Recursin
- Un mtodo recursivo se llama a si mismo repetidamente, con diferentes parmetros cada vez.
- Algunos valores de sus parmetros causan que un mtodo recursivo retorne sin llamarse a si
mismo. Esto es llamado, caso base.
- Un numero triangular es la suma de si mismo y todos los nmeros ms pequeos que el mismo.
Por ejemplo, el numero triangular de 4 es 10 porque 4+3+2+1 = 10.
- El factorial de un numero es el producto de si mismo y todos los nmeros son ms pequeos que
el mismo. Por ejemplo el factorial de 4 es 4*3*2*1 = 24.
- Los nmeros triangulares y los factoriales pueden ser calculados usando mtodos recursivos o
ciclos simples.
- El anagrama de una palabra (todas las combinaciones posibles de sus letras) pueden ser
encontradas recursivamente rotando repetidamente sus letras y haciendo el anagrama el n-1 de
ellos.
- Una bsqueda binaria puede ser llevada a cabo recursivamente revisando en que mitad del rango
ordenado est el valor buscado, y luego haciendo lo mismo con esa mitad.
- El puzle de las torres de hanoi consiste en tres torres y un numero arbitrario de anillos.
- El puzle de las torres de hanoi puede ser resuelto recursivamente moviendo todo menos el disco
del fondo del sub-rbol a una torre intermedia, mover el disco de fondo a la torre destinada, y
finalmente mover el sub-rbol a su destino.
- Mezclar dos arreglos ordenados significa crear un tercer arreglo que contiene todos los
elementos de ambos arreglos de manera ordenada.
- En el mtodo de mezcla (mergesort) 1-elementos sub-arreglos de un arreglo ms largo son
mezclados en 2-elementos sub-arreglos, 2-elementos sub-arreglos son mezclados en 4-elementos
sub-arreglos, y as hasta que el arreglo completo est ordenado.
- Para las torres de hanoi y mtodo de mezcla, el mtodo contiene dos llamadas a si mismo.
- Cualquier operacin que pueda ser llevada a cabo con recursin, puede ser llevada a cabo con
una pila.
- Una ejecucin recursiva puede ser ineficiente, ya que algunas veces puede ser reemplazada por
un ciclo simple o una pila.
Preguntas de recursin
1.- S el usuario ingresa 10 en el programa del numero triangular, cual es el mximo nmero de
copias del mtodo triangulo() (solo copias de su parmetro) que existen?
R: 10.
2.- Donde son almacenadas las copias del parmetro mencionadas en la pregunta 1?
d) En una pila.
3.- Asume que el usuario ingresa 10 como en la pregunta 1. Cul es el valor de n cuando el
mtodo triangulo() primero retorna 1?
R: 2.
4.- Asume la misma situacin de la pregunta 1. Cul es el valor de n cuando el mtodo triangulo()
es retornado al main()?
R: 10.
5.- Verdadero o Falso: En el mtodo triangulo(), los valores retornados son almacenados en una
pila. (Falso).
6.- En el programa del anagrama. En cierta profundidad de la recursin, una versin del mtodo
hacerAnagrama est trabajando con el string "led". Cuando este mtodo llama a una nueva
versin de si mismo, con que letras va a estar trabajando la nueva versin?
R: "ed".
7.- Hemos visto que la recursin puede tomar el lugar de un ciclo, como en el ciclo orientado del
programa del arreglo ordenado y la bsqueda binaria recursiva. Cul de las siguientes no es
verdadera?
b) Si el valor no es encontrado, la versin del ciclo retorna porque se sale del rango, pero la
versin recursiva porque alcanza el fondo del nivel de recursin.
c) Si el valor es encontrado, la versin del ciclo retorna desde el mtodo completo, donde la
versin recursiva regresa solo desde un nivel de recursin.
d) En la versin recursiva el rango a ser buscado debe ser especificado en los argumentos,
mientras que en la versin con ciclo no lo necesita.
8) En el mtodo recFind() (buscar recursivo) de la bsqueda binaria, qu cosa toma el lugar del
ciclo en una versin no recursiva?
9.- El programa de la bsqueda binaria es un ejemplo de "divide y vencers" que se alcanza para
resolver un problema.
10.- Que se vuelve ms pequeo cuando haces llamadas recursivas repetitivas en el mtodo
recFind()?
11.- Que se vuelve ms pequeo con llamadas recursivas repetitivas en el programa de las torres
de hanoi?
R: El numero de discos a transferir.
b) Debe buscar el arreglo objetivo para encontrar donde poner el siguiente elemento.
c) No es recursivo.
a) No es recursivo.
b) Usa ms memoria.
d) Es complicado de implementar.
15.- Adems de un ciclo, una pila puede ser usada a menudo en lugar de una recursin.
- El shellsort aplica la insercin a elementos espaciosos, luego a elementos menos espaciosos y as.
- Particionar un arreglo, es dividirlo en dos sub-arreglos, uno que mantiene a los valores menores
al especificado, mientras que el otro mantiene a los valores mayores o iguales que el valor
especificado.
- El valor del pivote es el valor que determina dentro de que grupo ir un elemento durante el
particionamiento. Los elementos ms pequeos que el pivote irn al grupo de la izquierda, y los
mayores irn al grupo de la derecha.
- Cuando un ndice encuentra un elemento que necesita ser intercambiado, su ciclo while existe.
- Cuando ambos ciclos while terminan, y los ndices se han encontrado o han pasado cada uno del
otro, la particin est completa.
- El algoritmo de particionamiento puede requerir pruebas extra en su ciclo while ms interno para
prevenir que los ndices salgan del trmino del arreglo.
- El quicksort particiona un arreglo y luego se llama a si mismo dos veces recursivamente para
ordenar los dos sub-arreglos resultantes.
- Los sub-arreglos de un elemento ya estn ordenados; esto puede ser un caso base para el
quicksort.
- El valor del pivote para una particin en quicksort es el valor especifico de un elemento, llamado
pivote.
- En una versin simple del quicksort, el pivote siempre puede ser el tem del extremo derecho del
sub-arreglo.
- Ms tarde, el pivote es intercambiado de nuevo, en el espacio entre las dos particiones. Est es
su posicin final de ordenamiento.
- En la versin simple del quicksort, la ejecucin es solo O(N2) para datos ya ordenados (o
inversamente ordenados).
- En una versin ms avanzada del quicksort, el pivote puede ser la media del primero, ultimo y
central elemento en el sub-arreglo. Esto es llamado particionamiento media de tres.
- Este mtodo de ordenamiento elimina la necesidad la prueba en el ciclo while ms interno del
algoritmo de particionamiento.
- Los sub-arreglos ms pequeos que un cierto tamao pueden ser ordenados por otro mtodo
distinto al quicksort.
- El mtodo de insercin tambin puede ser aplicado al arreglo entero, despus de que haya sido
ordenado por un quicksort.
- El mtodo radix es casi tan rpido como el quicksort pero usa el doble de memoria.
a) Particionando el arreglo.
2.- Si un arreglo tiene 100 elementos, entonces el algoritmo de Knuth empezara con un intervalo
de 40.
3.- Para transformar el mtodo de insercin a shellsort, Que no haras?
a) Sustituir h por 1.
4.- Verdadero o Falso: Un buen intervalo de secuencia para el shellsort es creado dividiendo
repetidamente el arreglo a la mitad. (Falso).
5.- En los valores del Big O: La velocidad del shellsort es mayor que O(N*logN), pero menor que
O(N2).
a) Poner todos los elementos mayores a cierto valor en un extremo del arreglo.
7.- Cuando se particiona, cada elemento del arreglo es comparado con el Pivote.
a) Es pasado de largo.
d) Es intercambiado.
9.- Verdadero o Falso: En el quicksort, el pivote puede ser un elemento arbitrario del arreglo.
(Verdadero)
10.- Asumiendo que los valores ms grandes estn a la derecha, la particin es:
11.- El quicksort involucra particionar el arreglo original y luego particionar los sub-arreglos
resultantes.
12.- Despus de una particin en una versin simple del quicksort, el pivote puede ser:
d) Descartado.