Vous êtes sur la page 1sur 4

Algoritmo de búsqueda.

Un algoritmo de búsqueda es aquel que está diseñado para localizar un elemento


concreto dentro de una estructura de datos. Consiste en solucionar un problema de
existencia o no de un elemento determinado en un conjunto finito de elementos, es
decir, si el elemento en cuestión pertenece o no a dicho conjunto, además de su
localización dentro de éste.

Este problema puede reducirse a devolver la existencia de un número en un vector.

Búsqueda secuencial [editar]


Se utiliza cuando el contenido del vector no se encuentra o no puede ser ordenado.
Consiste en buscar el elemento comparándolo secuencialmente (de ahí su nombre) con
cada elemento del array hasta que éste se encuentre, o hasta que se llegue al final del
array. La existencia se puede asegurar desde el momento que el elemento es localizado,
pero no podemos asegurar la no existencia hasta no haber analizado todos los elementos
del array. A continuación se muestra el pseudocódigo del algoritmo:

Datos de Entrada:
vec: vector en el que se desea buscar el elemento
tam: tamaño del vector
dato: elemento que se quiere buscar.

Variables
pos: posición actual en el array

pos = 0
Mientras pos < tam:
Si vec[pos]== dato devolver verdadero y/o pos, de lo contrario:
pos = pos + 1

Fin (Mientras)
Devolver falso

Búsqueda binaria (dicotómica) [editar]


Se utiliza cuando el vector en el que queremos determinar la existencia o no de un
elemento está ordenado, o puede estarlo, este algoritmo reduce el tiempo de búsqueda
considerablemente, ya que disminuye exponencialmente con el número de iteraciones.

Este algoritmo esta altamente recomendado para buscar en arrays enormes: En uno de
50.000.000 elementos, tarda 26 iteraciones en ejecutarse, suponiendo que la búsqueda
falla, sino, siempre tarda menos en buscarlo.

Para implementar este algoritmo se compara el elemento a buscar con un elemento


cualquiera del array (normalmente el elemento central), si el valor de éste es mayor que
el del elemento buscado se repite el procedimiento en la parte del array que va desde el
inicio de éste hasta el elemento tomado, en caso contrario se toma la parte del array que
va desde el elemento tomado hasta el final. De esta manera obtenemos intervalos cada
vez más pequeños, hasta que se obtenga un intervalo indivisible, con el elemento
buscado como elemento central. Si el elemento no se encuentra dentro de este último
entonces se deduce que el elemento buscado no se encuentra en el arreglo.

A continuación se presenta el pseudocódigo del algoritmo, tomando como elemento


inicial el elemento central del array.

Datos de Entrada:
vec: vector en el que se desea buscar el elemento
tam: tamaño del vector
dato: elemento que se quiere buscar.

Variables
centro: elemento central del intervalo
inf: límite inferior del intervalo
sup: límite superior del intervalo

inf = 0
sup = tam-1

Mientras inf <= sup:


centro = ((sup - inf) / 2) + inf //División entera: se trunca la
parte decimal
Si vec[centro] == dato devolver verdadero y/o pos, de lo contrario:
Si dato < vec[centro] entonces:
sup=centro-1
En caso contrario:
inf=centro+1

Fin (Mientras)
Devolver Falso

Teoría de grafos

Un grafo es un conjunto, no vacío, de objetos llamados vértices (o nodos) y una


selección de pares de vértices, llamados aristas (edges en inglés) que pueden ser
orientados o no. Típicamente, un grafo se representa mediante una serie de puntos (los
vértices) conectados por líneas (las aristas).
Estructuras de datos en la representación de grafos
Estructura de lista

• lista de incidencia - Las aristas son representadas con un vector de pares


(ordenados, si el grafo es dirigido), donde cada par representa una de las aristas.
[1]

• lista de adyacencia - Cada vértice tiene una lista de vértices los cuales son
adyacentes a él. Esto causa redundancia en un grafo no dirigido (ya que A existe
en la lista de adyacencia de B y viceversa), pero las búsquedas son más rápidas,
al costo de almacenamiento extra.

En esta estructura de datos la idea es asociar a cada vertice i del grafo una lista que
contenga todos aquellos vértices j que sean adyacentes a él. De esta forma sólo
reservará memoria para los arcos adyacentes a i y no para todos los posibles arcos que
pudieran tener como origen i. El grafo, por tanto, se representa por medio de un vector
de n componentes (si |V|=n) donde cada componente va a ser una lista de adyacencia
correspondiente a cada uno de los vértices del grafo. Cada elemento de la lista consta de
un campo indicando el vértice adyacente. En caso de que el grafo sea etiquetado, habrá
que añadir un segundo campo para mostrar el valor de la etiqueta.

Ejemplo de lista de adyacencia


Estructuras matriciales

• Matriz de incidencia - El grafo está representado por una matriz de A (aristas)


por V (vértices), donde [arista, vértice] contiene la información de la arista (1 -
conectado, 0 - no conectado)

• Matriz de adyacencia - El grafo está representado por una matriz cuadrada M


de tamaño n2, donde n es el número de vértices. Si hay una arista entre un vértice
x y un vértice y, entonces el elemento mx,y es 1, de lo contrario, es 0.

Vous aimerez peut-être aussi