Cap VIII, ESTRUCTURAS LINEALES.pdf
-
Upload
pamela-vasquez-costales -
Category
Documents
-
view
1.002 -
download
2
Transcript of Cap VIII, ESTRUCTURAS LINEALES.pdf
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA EN SISTEMAS Y COMPUTACIÓN
ESTRUCTURA DE DATOS
Pamela Vásquez Costales
ESTRUCTURAS DE DATOS LINEALES
Objetivos
O Comprender el concepto de búsqueda y su importancia en múltiples aplicaciones computacionales.
O Describir el algoritmo de la búsqueda secuencial.
Objetivos
O Describir el algoritmo de la búsqueda binaria, distinguiendo claramente sus ventajas.
O Implantar los algoritmos de búsqueda en estructuras lineales que utilizan los dos tipos de representación (por posiciones y por ligas).
Objetivos
O Entender las ventajas y desventajas de los algoritmos de búsqueda, según la representación de la estructura y en conjunto con las operaciones de inserción y eliminación de elementos.
¿Por qué es importante la búsqueda de información?
Uno de los propósitos de la computadora es que sirva de medio para el almacenamiento de grandes volúmenes de información, lo que
implica la existencia de mecanismos para accesar eficientemente a esta
última.
Los mecanismos de acceso mas comunes requieren realizar una
búsqueda, de ahí que este concepto, aunado al de almacenar la información en una estructura de datos eficiente, es
de suma importancia en el ámbito computacional.
¿Cómo realizar eficientemente una búsqueda?
Imagine que tiene que buscar un teléfono en el directorio. ¿Qué pasaría
si el directorio no tuviera la información ordenada? Lo más seguro es que tardaría días, semanas o meses
buscando.
Podemos deducir que un requisito importante para que el proceso de
búsqueda se realice en forma eficiente es que la información esté ordenada, por lo que se requiere plantear una
representación y un método de acceso para que la información se almacene
ordenadamente y se facilite el proceso de búsqueda.
Para ordenar la información es necesario realizar el ordenamiento según uno (o varios) de los campos que conforman cada registro de in-
formación. El campo que determina el ordenamiento se denomina llave, ya que distingue de manera única a cada
registro.
La llave puede ser simple, si se forma con un solo campo (como la matrícula
de un alumno en la universidad ) o compuesta, si se forma por varios
campos (nombre, apellido y dirección de una persona), por lo que en una
estructura de datos para la búsqueda de información no se guardará
información repetida.
¿Qué opciones de representación en memoria existen para una estructura de datos para la búsqueda de información?
Si se desea utilizar una estructura temporal y limitada, para obtener
accesos rápidos, se deberá pensar en memoria principal.
Si se desea utilizar una estructura permanente e ilimitada para almacenar grandes volúmenes de información, se deberá pensar en memoria secundaria. Esto lleva a ligar el concepto con lo que en realidad, es la implementación de
un sistema de base de datos.
Posibles representaciones lineales en memoria principal
En memoria estática se puede utilizar un arreglo que guarde la información
en forma ordenada. Esta representación, típicamente, se conoce
con el nombre de tabla.
En memoria dinámica se puede utilizar una lista encadenada que guarde
ordenadamente la información. Esta representación, generalmente, se llama
lista ordenada.
En ambos casos, y analizando estas representaciones como un TDA, las
operaciones básicas necesarias para la estructura serían: inserción,
eliminación, actualización y consulta de un elemento. Se puede observar que estas operaciones requieren realizar búsquedas para ubicar la información
en la que se va a trabajar, por lo que la búsqueda se vuelve un proceso
fundamental en estos TDA.
En ambos casos, y analizando estas representaciones como un TDA, las
operaciones básicas necesarias para la estructura serían: inserción,
eliminación, actualización y consulta de un elemento. Se puede observar que estas operaciones requieren realizar búsquedas para ubicar la información
en la que se va a trabajar, por lo que la búsqueda se vuelve un proceso
fundamental en estos TDA.
¿Cómo se puede implementar el proceso de búsqueda en una
estructura lineal?
Hay dos algoritmos básicos para implementar este proceso:
La búsqueda secuencial es el algoritmo más obvio y el que tiene una
implantación intuitiva. Consiste en comparar a partir del primer elemento
de la estructura, secuencialmente, hasta que el elemento buscado se encuentra, o un elemento mayor al
buscado (en cuyo caso se puede dejar de buscar, pues los elementos restantes son mayores al estar
ordenada la información, y es evidente que el elemento por buscar no existe).
Este algoritmo no es apropiado cuando se tiene una tabla con mucha
información, ya que, en el peor caso, este algoritmo requiere realizar n
comparaciones (donde n es la cantidad de elementos).
La búsqueda binaria consiste en dividir sucesivamente la estructura en mitades, descartando del proceso de
búsqueda la mitad en que no se puede encontrar el elemento que se busca. El proceso parte la estructura en mitades
cada vez más pequeñas, lo que asegura que tarde o temprano se
encuentre el elemento buscado o bien, se decide que el elemento no se
encontró.
Este algoritmo tiene un comportamiento eficiente si lo comparamos con la búsqueda secuencial. Está comprobado
matemáticamente que, para este algoritmo, el peor caso requiere
realizar log2 n + 1 comparaciones (donde n es la cantidad de elementos
en la estructura).
Por lo tanto, para grandes cantidades de información, este algoritmo es más
apropiado.
Algoritmo de búsqueda binaria
O Encontrar el elemento de la mitad de la tabla.
O Si su valor es igual a la llave buscada: se termina y se reporta que 9 hubo éxito en la búsqueda.
O Si no, se toma la mitad de la tabla apropiada según el valor buscado y se repite este proceso hasta llegar a un segmento de tabla que contenga sólo un elemento.
O Si el último elemento verificado en la tabla no es igual al valor buscado, se termina y se reporta el fracaso en la búsqueda.
¿Qué ventajas y desventajas ofrece la representación de una tabla en
memoria estática?
La principal ventaja es que el algoritmo de la búsqueda binaria se puede
implementar fácilmente, considerando que las mitades se pueden calcular con base en los índices de un arreglo, por lo tanto, el proceso de búsqueda es
eficiente.
Sin embargo, ya que los algoritmos de búsqueda presuponen que la
información está compactada (no hay huecos en el arreglo), el proceso para
insertar y borrar información en la tabla se vuelve ineficiente.
Analizando la implementación bajo estas consideraciones, la inserción de
un elemento implica hacer un hueco en el arreglo, recorriendo todos los
elementos que se encuentren, a partir de esa posición, una posición hacia
abajo.
Por otro lado, la eliminación de un elemento, de la misma manera, para
no dejar un hueco al borrar el elemento, implica recorrer todos los elementos una posición hacia arriba
como indica la siguiente figura:
¿Qué ventajas y desventajas ofrece la representación de una lista
ordenada en memoria dinámica?
Definitivamente, el problema de los corrimientos de información, que
apareció como una desventaja en una tabla, no es una característica propia
de una estructura que utiliza encadenamientos,
por lo que, comparativamente, la eficiencia en las operaciones de
inserción y eliminación de elementos es una ventaja de esta representación.
Sin embargo, la única estrategia de búsqueda que se puede aplicar sobre esta representación es la búsqueda
secuencial, debido a que la información está almacenada en forma dispersa.
El algoritmo de la búsqueda binaria, aunque se puede implantar en esta
representación, se volvería ineficiente, pues el cálculo de las mitades en una lista implicaría recorrer sus elementos
desde el inicio.
El algoritmo de la búsqueda binaria, aunque se puede implantar en esta
representación, se volvería ineficiente, pues el cálculo de las mitades en una lista implicaría recorrer sus elementos
desde el inicio.
Por lo tanto, se puede concluir que ninguna de las dos propuestas de representación lineal cumplen, al
mismo tiempo, con las condiciones de eficiencia (inserción, eliminación y
búsqueda). Esto nos lleva a suponer que se necesita una estructura de
datos diferente que cumpla con ambas características, como se estudiará en el
siguiente capítulo.