Algoritmos Busqueda y Ordenacion
Algoritmos Busqueda y Ordenacion
Algoritmos Busqueda y Ordenacion
¿Qué es un Ordenamiento?
Es la operación de arreglar los registros de una
tabla en algún orden secuencial de acuerdo a
un criterio de ordenamiento.
El ordenamiento se efectúa con base en
el valor de algún campo en un registro.
El propósito principal de un ordenamiento es el
de facilitar las búsquedas de los miembros del
conjunto ordenado.
Ej. de ordenamientos:
Dir. telefónico, tablas de contenido, bibliotecas y diccionarios, etc.
El ordenar un grupo de datos significa mover los datos o sus referencias para que queden
en una secuencia tal que represente un orden, el cual puede ser numérico, alfabético o
incluso alfanumérico, ascendente o descendente.
¿Cuándo conviene usar un método de ordenamiento?
Cuando se requiere hacer una cantidad considerable de búsquedas y es importante el
factor tiempo.
▪ Tipos de ordenamientos:
Los 2 tipos de ordenamientos que se pueden realizar son: los internos y los externos.
Los internos:
Son aquellos en los que los valores a ordenar están en memoria principal, por lo que se
asume que el tiempo que se requiere para acceder cualquier elemento sea el mismo (a[1],
a[500], etc).
▪ Los externos:
Son aquellos en los que los valores a ordenar están en memoria secundaria (disco, cinta,
cilindro magnético, etc), por lo que se asume que el tiempo que se requiere para acceder a
cualquier elemento depende de la última posición accesada (posición 1, posición 500, etc).
Eficiencia en tiempo de ejecución:
Una medida de eficiencia es:
Contar el # de comparaciones (C)
Contar el # de movimientos de items (M)
Estos están en función de el #(n) de items a ser ordenados.
Un "buen algoritmo" de ordenamiento requiere de un orden nlogn comparaciones.
La eficiencia de los algoritmos se mide por el número de comparaciones e intercambios
que tienen que hacer, es decir, se toma n como el número de elementos que tiene el arreglo
o vector a ordenar y se dice que un algoritmo realiza O(n2) comparaciones cuando compara
n veces los n elementos, n x n = n2
Búsqueda
Datos de entrada:
vec: vector en el que se desea buscar el dato
tam: tamaño del vector. Los subíndices válidos van desde 0 hasta tam-1 inclusive. Puede
representarse así: vec[0...tam) o vec[0...tam-1].
dato: elemento que se quiere buscar.
Variables
pos: posición actual en el vector
pos = 0
while pos < tam:
if vec[pos] == dato:
Retorne verdadero y/o pos,
else:
pos = pos + 1
Fin (while)
Retorne falso,
• C
int i;
return -1;
Datos de entrada:
vec: vector en el que se desea buscar el dato
tam: tamaño del vector. Los subíndices válidos van desde 0 hasta tam-1 inclusive.
dato: elemento que se quiere buscar.
Variables
centro: subíndice central del intervalo
inf: límite inferior del intervalo
sup: límite superior del intervalo
inf = 0
sup = tam-1
• C
• C++
#include <vector>
bool busqueda_dicotomica(const vector<int> &v, int principio, int fin, int &x){
bool res;
if(principio <= fin){
int m = ((fin - principio)/2) + principio;
if(x < v[m]) res = busqueda_dicotomica(v, principio, m-1, x);
else if(x > v[m]) res = busqueda_dicotomica(v, m+1, fin, x);
else res = true;
}else res = false;
return res;
}
/*{Post: Si se encuentra devuelve true, sino false}*/
• Python
• Python
def bin(a,x,low,hi):
ans = -1
if low==hi: ans = -1
else:
mid = (low+((hi-low)//2))
if x < a[mid]: ans = bin(a,x,low,mid)
elif x > a[mid]: ans = bin(a,x,mid+1,hi)
else: ans = mid
return ans
• Python
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.
(A) MEJOR CASO: El algoritmo de búsqueda lineal termina tan pronto como encuentra el
elemento buscado en el array. Si tenemos suerte, puede ser que la primera posición
examinada contenga el elemento que buscamos, en cuyo caso el algoritmo informará que
tuvo éxito después de una sola comparación. Por tanto, la complejidad en este caso será
O(1).
(B) PEOR CASO: Sucede cuando encontramos X en la última posición del array. Como se
requieren n ejecuciones del bucle mientras, la cantidad de tiempo es proporcional a la
longitud del array n, más un cierto tiempo para realizar las instrucciones del bucle mientras
y para la llamada al método. Por lo tanto, la cantidad de tiempo es de la forma an + b
(instrucciones del mientras * tamaño del arreglo + llamada al método) para ciertas
constantes a y b, que representan el coste del bucle mientras y el costo de llamar el método
respectivamente. Representando esto en notación O, O(an+b) = O(n).
(C) CASO MEDIO: Supongamos que cada elemento almacenado en el array es igualmente
probable de ser buscado. La media puede calcularse tomando el tiempo total de encontrar
todos los elementos y dividiéndolo por n:
Es un término genérico para los algoritmos de ordenamiento que pueden manejar grandes
cantidades de información. El ordenamiento externo se requiere cuando la información que
se tiene que ordenar no cabe en la memoria principal de una computadora (típicamente la
RAM) y un tipo de memoria más lenta (típicamente un disco duro) tiene que utilizarse en el
proceso. Existen otros tipos de memoria externa que son los USB de almacenamiento entre
otros.
La Ordenación externa de los datos están en un dispositivo de almacenamiento externo
(Archivos) y su ordenación es más lenta que la interna.
Estudios de Conjunto Complejidades
Un algoritmo será mas eficiente comparado con otro, siempre que consuma
menos recursos, como el tiempo y espacio de memoria necesarios para ejecutarlo.
•
• Este análisis se basa en las Complejidades Temporales, con este fin, para cada
problema determinaremos una medida N, que llamaremos tamaño de la entrada o
número de datos a procesar por el programa, intentaremos hallar respuestas
en función de dicha N.
•
• El concepto exacto que cuantifica N dependerá de la naturaleza del problema, si
hablamos de un array se puede ver a N como el rango del array, para una matriz, el
número de elementos que la componen; para un grafo, podría ser el número de nodos
o arcos que lo arman, no se puede establecer una regla para N, pues cada problema
acarrea su propia lógica y complejidad.
•
Tiempo de Ejecución
•
• El tiempo de Ejecución de un programa se mide en función de N, lo que designaremos
como T(N).
•
• Esta función se puede calcular físicamente ejecutando el programa acompañados de
un reloj, o calcularse directamente sobre el código, contando las instrucciones a ser
ejecutadas y multiplicando por el tiempo requerido por cada instrucción. Así, un trozo
sencillo de código como:
S1;
for(x = 0; x < N; x++)
S2;
Demanda: T(N) = t1 + t2 * N
Donde t1 es el tiempo que lleva ejecutar la serie S1 de sentencias, y t2 es el que lleva la
serie S2.
•
• Habitualmente todos los algoritmos contienen alguna sentencia condicional o selectiva,
haciendo que las sentencias ejecutadas dependan de la condición lógica, esto hace que
aparezca más de un valor para T(N), es por ello que debemos hablar de un rango
de valores:
También conocido como ordenación incremental reducida, es una versión más eficiente y
mejorada del algoritmo de ordenación por inserción directa. La clasificación de colinas es
un algoritmo de clasificación inestable. Este método se debe a DL. Shell lleva el nombre de
su propuesta en 1959. La clasificación de colinas consiste en registrar un cierto incremento
agrupado presionando el objetivo y usar el algoritmo de clasificación de inserción directa
para ordenar cada grupo; a medida que el incremento disminuye gradualmente, cada grupo
contiene más y más palabras clave. Cuando el incremento disminuye a 1, el El archivo se
divide en un grupo y el algoritmo finaliza.
(2) A continuación, clasifique cada grupo de acuerdo con el método de clasificación por
inserción directa.
(3) Clasifique cada grupo según el método de clasificación por inserción directa. En este
punto, la clasificación ha finalizado.
/*
* Tipo de colina
*/
while (true){
grp = grp/ 2;
// Grupo de ciclo
int temp = 0;
temp=a[k-grp];
a[k-grp]=a[k];
a[k]=temp;
}
}
break;
}
Conclusión
Pues en este tema se obtuvo mucho aprendizaje en esta investigación es que conoció sus
tipos y funciones y métodos de búsquedas ya que al momento de ejecutar un programa
extensos podríamos utilizar estos dichos métodos y así encontrar pues dicha información.
Hasta aquí mi tema de asignación por dado espero que sea buen gusto.
Bibliografía
https://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento
http://artemisa.unicauca.edu.co/~nediaz/EDDI/cap02.htm
http://puntocomnoesunlenguaje.blogspot.com/2015/02/ordenamiento-insercion-directa-
java.html
http://es.wikipedia.org/wiki/Algoritmo_/de_/búsqueda
http://estructura-de-datos-itsav.blogspot.com/2012/03/71-algoritmos-ordenacion-
externa.html
https://www.monografias.com/trabajos27/complejidad-algoritmica/complejidad-
algoritmica.shtml#complej
https://programmerclick.com/article/69211836250/