Vous êtes sur la page 1sur 6

2014

Universidad
Iberoamericana

Luis Adrin Matnez L.

[CONCEPTOS: ALGORITMO]
Anlisis y diseo de algoritmos.
Profesora Rina Familia
1. Definiciones de algoritmos
Wikipedia: un algoritmo (del griego y latn, dixit algorithmus y este a su vez del matemtico persa
Al-Juarismi1) es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas
que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba
realizar dicha actividad.2 Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se
llega a un estado final y se obtiene una solucin.
WordReference: Conjunto ordenado y finito de operaciones que permite hallar la solucin de un
problema.
Ing.unne.edu.ar: Un algoritmo se puede definir como una secuencia de instrucciones que
representan un modelo de solucin para determinado tipo de problemas. O bien como un conjunto
de instrucciones que realizadas en orden conducen a obtener la solucin de un problema.
2. Diferencia entre algoritmo/programa/proceso
* Algoritmo es una secuencia de acciones lgicas necesarias para lograr un objetivo cualquiera que
sea, no especficamente matemtico, un programa en general es una serie de instrucciones en
determinado lenguaje necesarias para que un ordenador cumpla con una tarea, mismas que en
todo caso, son la traduccin de un algoritmo al lenguaje en cuestin.
* El programa es siempre programa ya sea ejecutable o cdigo, estas son solo etapas en la
elaboracin del mismo, es decir en ambos casos son la traduccin del algoritmo al lenguaje de la
mquina, solo que cuando es el cdigo es en la forma que es entendible para las personas y el
ejecutable es en lenguaje que entiende la mquina.
* Un proceso es un conjunto de actividades mutuamente relacionadas o que, al interactuar,
transforman elementos de entrada y los convierten en resultados.
El algoritmo es el procedimiento lgico elemental, necesario para lograr un objetivo, el programa
es la serie de instrucciones necesarias para hacer que un dispositivo ciberntico ejecute ese
procedimiento para, en consecuencia, lograr el objetivo en cuestin y uno es consecuencia del
otro, es decir, primero se elabora el algoritmo para saber cmo lograr lo que se quiere hacer y
despus se codifica el programa segn el dispositivo y el lenguaje que se usen. Mientras que un
proceso ese conjunto de pasos que realiza dentro de un algoritmo para llegar al resultado
buscado.
3. Algoritmos empleados en bsqueda de datos.
Bsqueda secuencial
Se utiliza cuando el contenido del Vector no se encuentra o no puede ser ordenado. Consiste en
buscar el elemento comparndolo secuencialmente (de ah su nombre) con cada elemento del
arreglo o conjunto de datos hasta que se encuentre, o hasta que se llegue al final del arreglo. 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 arreglo. A continuacin
se muestra el pseudocdigo del algoritmo:
Datos de Entrada:
vec: vector en el que se desea buscar el elemento
tam: tamao del vector
dato: elemento que se quiere buscar.
Variables
pos: posicin 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
Bsqueda binaria
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 bsqueda considerablemente, ya
que disminuye exponencialmente con el nmero de iteraciones.
Para implementar este algoritmo se compara el elemento a buscar con un elemento cualquiera del
arreglo o conjunto de datos (habitualmente el elemento en la posicin central del arreglo), si el
valor de ste es mayor que el del elemento buscado se repite el procedimiento en la parte del
arreglo que va desde el inicio de ste hasta el elemento tomado, en caso contrario se toma la
parte del arreglo que va desde el elemento tomado hasta el final. De esta manera obtenemos
intervalos cada vez ms pequeos, 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 continuacin se presenta el pseudocdigo del algoritmo, tomando como elemento inicial el
elemento central del arreglo.
Datos de Entrada:
vec: vector en el que se desea buscar el elemento
tam: tamao del vector
dato: elemento que se quiere buscar.
Variables
centro: elemento central del intervalo
inf: lmite inferior del intervalo
sup: lmite superior del intervalo
inf = 0
sup = tam1
Mientras inf <= sup:
centro = ((sup + inf) / 2) /* divisin entera: se trunca la parte decimal */
Si vec[centro] == dato devolver verdadero y/o pos, de lo contrario:
Si dato < vec[centro] entonces:
sup=centro1
En caso contrario:
inf=centro+1
Fin (Mientras)
Devolver Falso
Algoritmo de Kruskal
Es un algoritmo de la teora de grafos para encontrar un rbol recubridor mnimo en un grafo
conexo y ponderado. Es decir, busca un subconjunto de aristas que, formando un rbol, incluyen
todos los vrtices y donde el valor total de todas las aristas del rbol es el mnimo. Si el grafo no es
conexo, entonces busca un bosque expandido mnimo (un rbol expandido mnimo para cada
componente conexa).
1 function Kruskal(G)
2 for each vertex v in G do
3 Define an elementary cluster C(v) {v}
4 Initialize a priority queue Q to contain all edges in G, using the weights as keys
5 Define a tree T //T will ultimately contain the edges of the MST
6 // n es el nmero total de vrtices
7 while T has fewer than n-1 edges do
8 // edge u, v is the minimum weighted route from/to v
9 (u,v) Q.removeMin()
10 // previene ciclos en T. suma u, v solo si T no contiene una arista que una u y v
11 // Ntese que el cluster contiene ms de un vrtice si una arista une un par de
12 // vrtices que han sido aadidos al rbol
13 Let C(v) be the cluster containing v, and let C(u) be the cluster containing u
14 if C(v) C(u) then
15 Add edge (v,u) to T
16 Merge C(v) and C(u) into one cluster, that is, union C(v) and C(u)
17 return tree T
Bsqueda mediante transformacin de claves (hash)
Hasta ahora las tcnicas de localizacin de registros vistas, emplean un proceso de bsqueda que
implica cierto tiempo y esfuerzo. El mtodo de transformacin de claves nos permite encontrar
directamente el registro buscado en tablas o archivos que no se encuentran necesariamente
ordenados, en un tiempo independiente de la cantidad de datos.
En los prrafos siguientes se har referencia a tablas, en lugar de arreglos, como las estructuras de
almacenamiento de la informacin, pues en general el mtodo de Hashing se aplica en situaciones
que implican el manejo de una considerable cantidad de informacin, organizada .
A diferencia de una bsqueda indexada por claves ordinaria, donde usamos el valor de las claves
como ndices de un arreglo y necesitamos indispensablemente que los mismos sean enteros
distintos dentro de un rango equivalente al rango de la tabla, utilizar el mtodo de Hashing nos
permite manejar aplicaciones de bsqueda donde no tenemos claves con caractersticas tan
limitadas. El resultado es un mtodo de bsqueda completamente diferente a los mtodos
basados en comparaciones, ahora en vez de navegar por las estructuras comparando palabras
clave con las claves en los items, tratamos de referenciar items en una tabla directamente
haciendo operaciones aritmticas para transformar claves en direcciones de la tabla. Esto ltimo
se logra implementando una Funcin Hash, que se va a encargar de dicha transformacin.
Idealmente, todas las claves deberan corresponder con direcciones diferentes, pero es muy
frecuente que dos o ms claves diferentes sean transformadas a la misma direccin, cuando esto
pasa, se dice que se presenta una Colisin. Es por eso que tambin se debe implementar algn
proceso de resolucin de Colisiones, que se va a encargar de tratar tales situaciones. Uno de los
mtodos de resolucin de colisiones que existen usa Listas enlazadas y se lo denomina
encadenamiento directo o Hashing abierto el cual es muy til en situaciones dinmicas, donde
el nmero de elementos es difcil de predecir por adelantado.
El Hashing es un buen ejemplo de balance entre tiempo y espacio. Si no hubiera limitaciones de
memoria, entonces podramos hacer cualquier bsqueda en un solo acceso simplemente
utilizando la clave como una direccin de memoria. Este ideal no puede ser llevado a cabo, porque
la cantidad de memoria requerida es prohibitiva cuando la cantidad de registros es considerable.
De la misma manera, si no hubiese limitacin de tiempo, podramos usar un menor espacio en
memoria usando un mtodo secuencial. Hashing provee una manera de usar una razonable
cantidad de memoria y tiempo y lograr un balance entre los dos extremos mencionados. En
particular, podemos lograr el balance deseado simplemente ajustando el tamao de la tabla, sin
necesidad de re-escribir cdigo o cambiar algoritmos.
En lneas generales podemos decir, que es razonable esperar bsquedas (Search), borrados
(Delete) e inserciones (Insert) en tiempo constante, independientemente del tamao de la tabla. O
sea que es ideal para aplicaciones que realicen mayoritariamente este tipo de operaciones, por el
otro lado, Hashing no provee implementaciones eficientes para otras operaciones como por
ejemplo Ordenamiento (Sort) o Seleccin (Select).
4. Algoritmo ms famoso de la historia de la computacin.
Jack Dongarra y Francis Sullivan publicaron una lista de los 10 algoritmos ms importantes del siglo
XX:
Algoritmo de Metrpolis.
1. El mtodo simplex.
2. Mtodo iterativo de lo subespacio Krylov.
3. La descomposicin de la matriz Householder.
4. El compilador Fortran.
5. El algoritmo de descomposicin para la obtencin de autovalores QR.
6. El algoritmo de quicksort.
7. La transformada rpida de Fourier.
8. Algoritmo de deteccion de relacion entre enteros.
9. Mtodo del multipolo rpido.
Referencia: Wikipedia.org, Ecured.cu, Genbetadev.com, Wordreference.org,
Artemisa.unicauca.edu.co, Wikibooks.org.

Vous aimerez peut-être aussi