Documente Academic
Documente Profesional
Documente Cultură
BASE DE DATOS Conjunto de datos clasificados, por ejemplo, tendremos una estructura que almacena los apellidos en una sola columna, los nombres en otra, los telfonos en otro, etc CAMPO Parte de la datos que identifica a un tipo de informacin que se almacenara en esa parte, por ejemplo en el campo telfono, solo se almacenaran nmeros telefnicos, Ud. no encontrara en ese campo los apellidos o nombres u otro dato distinto al telfono, adems ser de un tipo determinado, por ejemplo, numrico, carcter o lgico. Adems si se quiere ordenar una base de datos se tiene que escoger un campo, y en base a ese campo se procede a ordenar, no se puede escoger dos campos para ordenar, por ejemplo si se ordena por apellidos se proceder hacerlo alfabticamente, pero no se podr ordenar en el mismo instante por nmero de telfono. El campo seleccionado para proceder se llama ndice otros lo llaman clave. REGISTRO Es un conjunto de campos agrupandos, normalmente pertenecen a un solo elemento, en nuestro ejemplo a una sola persona, normalmente en un registro no se repiten los campos, no podremos tener un registro con dos campos de nombre telfono, lo que si podemos tener es un campo con nombre telfono y el otro telefono2. CRITERIO DE ORDENAMIENTO Es el algoritmo que usaremos para ordenar, por ejemplo podramos escoger ordenar por nmero de DNI pero en forma ascendente TIEMPO DE EJECUCION Es el tiempo que demora en ordenar, encontrar o mezclar los datos, cuando se tiene pocos registros no se ve mucho la diferencia, pero cuando se tiene miles de registros el tiempo de duracin es importarte, porque ser decisivo para decidir que algoritmo escoger, en nuestro caso diramos, el que haga menor cantidad de
comparaciones y/o interacciones ser el menos complejo, pero eso no significa que ser el mas rpido. USO DE MEMORIA Normalmente cuando la Base de Datos es pequea todo se hace en la memoria RAM y no se necesita acceder al disco duro, pero cuando tenemos una Base de Datos de miles de Registros en necesario usar el disco duro como memoria complementaria, por lo que la velocidad de procesamiento se ver afectado, por la velocidad de E/S de datos METODOS DE ORDENAMIENTO MS COMUNES Como ejercicios de aprendizaje veremos cuatro tipos de ordenamiento, los ms usados: Ordenamiento por Burbuja Ordenamiento por Seleccin Ordenamiento por Insercin Ordenamiento Rpido No necesariamente significa que el ms rpido es el que nos conviene, sino tenemos que evaluar, varios criterios como es: La cantidad de registros, si son pocas, normalmente no tienes mucho que hacer, no veras la diferencia en tiempos, porque uno frente al otro solo tomara segundos de diferencia Cantidad de memoria que necesita, hay algoritmos de ordenamiento que necesitan buena cantidad de memoria RAM, por lo que si nuestro equipo de cmputo tiene poca memoria, el algoritmo usara al disco duro como apoyo, por lo que se sabe que se har ms lento. Tipo Campo a ordenar, algunos mtodos de ordenamiento funcionan mejor si son numricos o alfabticos mientras que otros no tienen diferencia 1. ORDENAMIENTO POR BURBUJA Se le conoce tambin como ordenamiento por intercambio, es el algoritmo mas sencillo, su principio es comparando elementos adyacentes de dos en dos desde el inicio hasta el final, por lo que diramos que si el elemento actual es mayor que el que est en la siguiente posicin se intercambian.
Diagrama de Flujo
inicio
5
si lista[j] > temp = lista[j] lista[j] = lista[j+1] lista[j+1] = temp
Fin
Pseudocdigo
for (i=1; i<TAM; i++) for (j=0 ; j<TAM - 1; j++) if (lista[j] > lista[j+1]) { temp = lista[j]; lista[j] = lista[j+1]; lista[j+1] = temp; }
Donde TAM i,j lista temp : : : : es la cantidad de elementos Contador tipo entero Es el arreglo a ordenar Variable temporal del mismo tipo de lo que se declaro lista
2. Ordenamiento por Seleccin. Este algoritmo consiste en buscar en toda el arreglo, el valor el registro que contenga el campo menor, luego intercambia con el elemento ubicado en la primera posicin de la lista, luego se busca el segundo elemento menor y se intercambia en la segunda posicin, y as sucesivamente se repite hasta que se haya ordenado toda la lista. Diagrama de Flujo:
inicio
si lista[pos_men]>lista [j]
Pos_men=j
Fin
pos_men=0; for (i=0; i<TAM - 1; i++) {for (j=i;j<TAM;j++) If (lista[pos_men]>lista[j]) { pos_men =j: temp = lista[i]; } lista[i] = lista [pos_men]; lista [pos_men] = temp; pos_men=i+1; }
Donde TAM : i,j : lista : temp : pos_men : Es la cantidad de elementos Contador tipo entero Es el arreglo a ordenar Variable temporal del mismo tipo de lo que se declaro lista Posicin de la variable menor del arreglo lista
3.
Ordenamiento por Insercin Este algoritmo es al igual que los anteriores sencillo, el algoritmo es considerar una parte de la lista o del arreglo ya ordenada y luego se va colocando cada uno de los elementos que quedan en el lugar que le corresponde, este mtodo de ordenacin tambin se conoce como mtodo de la baraja, porque es como si estaramos jugando a las cartas, por ejemplo: como se hace para ordenar las cartas, si imaginamos que nos van dando las cartas de uno en uno, lo que hacemos es comparar luego lo ubicamos de acuerdo al valor, si es menor a la izquierda y si es mayor a la derecha, y as sucesivamente, voy insertando en el lugar donde corresponde
Temp=list[i] J=i-1
Lista[j+1]=lista[j] j-lista[j+1]=temp
Fin
Donde: TAM i,j lista temp : : : : Es la cantidad de elementos Contador tipo entero Es el arreglo a ordenar Variable temporal del mismo tipo de lo que se declar lista
for (i=1; i<TAM; i++) { temp = lista[i]; j = i - 1; while ( (lista[j] > temp) && (j >= 0) ) { lista[j+1] = lista[j]; j--; } lista[j+1] = temp; }
4. Ordenamiento Rpido (Quicksort) Es uno de los mtodos ms rpidos en lo que concierne a ordenamiento, desarrollada en los aos 1960 1970 por C.A.R. Hoare, el principio con que enmarca este mtodo es por el principio de que es ms fcil ordenar dos listas pequeas que una lista grande (divide y vencers), lo que se hace es dividir la lista en dos listas, una con valores menores o iguales a un valor y la otra con valores mayores al valor en referencia (el valor es a tomar es cualquiera, por lo que se le denomina pivote). Diagrama de flujo
inicio
10
Izq++
Der--
inf<der
Asignar P,inf,der
inf<sup
Asignar P,izq,sup
Fin
Es la cantidad de elementos valores que estn a los costados valor superior e inferior Es el arreglo a ordenar Variable temporal del mismo tipo de lo que se declar lista funcin de ordenamiento
Pseudocodigo
void qs(int p[], int inf, int sup) { register izq, der; int mitad, x, aux; izq=inf; der=sup; mitad=p[(izq+der)/2]; do{ while(p[izq]<mitad && izq<sup) while(mitad<p[der] && der>inf) if(izq<=der) { aux=p[izq]; p[izq]=p[der]; p[der]=aux; izq++; der--; } } while(izq<=der); if(inf<der) qs(p,inf,der); if(inf<sup) qs(p,izq,sup); }
11
izq++; der--;
METODOS DE BUSQUEDA
BUSQUEDA SECUENCIAL O LINEAL Este mtodo de bsqueda es el ms sencillo y el ms lento, no necesita que el arreglo este ordenado, se desarrolla realizando comparaciones sucesivas con cada uno de los elementos del arreglo, hasta que se encuentre el registro que estamos buscando. Diagrama de Flujo
inicio
12
si lista[i]=DATO
Fin
Es la cantidad de elementos Contador tipo entero Es el arreglo a ordenar Variable que se necesita encontrar en la lista.
Pseudocodigo:
For(i=0;i<TAM-1;i++) { If(lista[i]=dato) {Cout<< el dato que busca se encuentra en la posicin << i; salir(); } Cout<< el dato que busca no se encuentra en el arreglo; }
13
BUSQUEDA BINARIA Este mtodo de bsqueda es aplicable solo en arreglos ordenados, este mtodo es sencillo, lo que se hace es seleccionar la posicin central del arreglo y comparar el contenido en esta posicin con el valor que estamos buscando, si es menor entonces escogemos la mitad de la izquierda, caso contrario escogemos la mitad que esta hacia la derecha, encontramos un nuevo intervalo de clculo en este caso tomamos la posicin central del bloque de la derecha y/o izquierda, volvemos a comparar con el valor que estamos buscando y si es menor o mayor escogeremos el de la derecha o izquierda, hasta encontrar el valor que estamos buscando.
Mitad=(inf=sup)/2 el dato que busca no se encuentra en el arreglo P[mitad] == el dato que busca se encuentra en la posicin mitad
14
Fin
DONDE: TAM : Es la cantidad de elementos Izq,der: valores que estn a los costados Inf,sup: valor superior e inferior p : Es el arreglo a ordenar aux : Variable temporal del mismo tipo de lo que se declar lista busqueda_bin: funcin de bsqueda binaria. Pseudocodigo:
int busqueda_bin(int p[],int aux,int inf,int sup) { int mitad; if ((inf>=sup) && 9p[inf] != aux) { cout<< no existe el dato en la tabla; exit; } mitad=(inf+sup)/2; if(p[mitad] == aux) { cout<< el dato se encuentra en la posicin : <<mitad; exit; } else if (aux>p[mitad]) busqueda_bin(p,aux,mitad+1,sup); else busqueda_bin(p,aux,inf,mitad-1); }
EJEMPLO: El siguiente programa es una aplicacin de todos los procedimientos que se ha analizado tanto de ordenamiento como de bsqueda:
15
void qs(int p[ ],int inf,int sup); int BusquedaBinaria(int p[ ], int aux,int inf, int sup); main() { int i,j,temp,n,pos_men; float med;
// definicion de variables locales tipo entero // definicion de variable local tipo flotante
Mtodos de Ordenamiento y Bsqueda int lista[m]; int tam; int k; int op;
// define una variable local tipo array entero // define la cantidad de elementos // define la variable contador // define variable tipo entero
do {clrscr(); gotoxy(38,10);cout<<"MENU"; gotoxy(28,11);cout<<"=================================================="; gotoxy(28,12);cout<<"1.- GENERAR NUMEROS ALEATORIOS PARA EL ARREGLO"; gotoxy(28,13);cout<<"2.- INGRESAR NUMEROS PARA EL ARREGLO"; gotoxy(28,14);cout<<"3.- ORDENAR POR METODO BURBUJA"; gotoxy(28,15);cout<<"4.- ORDENAR POR EL METODO SELECCION"; gotoxy(28,16);cout<<"5.- ORDENAR POR EL METODO INSERCION"; gotoxy(28,17);cout<<"6.- ORDENAR POR EL METODO RAPIDO"; gotoxy(28,18);cout<<"7.- BUSQUEDA SECUENCIAL"; gotoxy(28,19);cout<<"8.- BUSQUEDA BINARIA"; gotoxy(28,20);cout<<"9.- REPORTE DE LA LISTA"; gotoxy(28,21);cout<<"0.- SALIR"; gotoxy(28,22);cout<<"=================================================="; gotoxy(28,24);cout<<"=================================================="; gotoxy(28,23);cout<<"INGRESE UN NUMERO DEL 0 AL 8 PARA EJECUTAR : "; cin>>op; switch(op) { /**********************************/ /* GENERA CIEN NUMEROS ALEATORIOS */ /**********************************/ case 1 : randomize(); clrscr(); cout<<"<< PRESIONE UNA TECLA PARA GENERAR NUMEROS ALEATORIOS >>\n"; getch(); cout<<"Generando numeros aleatorios \n"; for (k=0;k<100;k++) { lista[k]=random(100); cout<<lista[k]<<" "; } cout<<"\n\n 100 numeros generados \n << presione una tecla para continuar>> ";
16
/**********************************/ /* INGRESA NUMEROS AL ARREGLO */ /**********************************/ case 2 : clrscr(); cout << "Cuantos numeros desea ingresar (Max 100 Numeros) ? : "; cin >> tam; for (k=0;k<tam;k++) { cout << "ingrese el elemento nro "<<k+1<<" : "; cin>>lista[k]; } cout<<"\n\n a ingresado "<<tam <<" numeros \n\n << presione una tecla para continuar>> "; getch(); break; /**********************************/ /* ORDENA POR EL METODO BURBUJA */ /**********************************/ case 3 : clrscr(); cout<<"<< PRESIONE UNA TECLA PARA ORDENAR POR EL METODO BURBUJA >>\n"; getch(); cout<<"Ordenando \n"; for (i=1; i<tam; i++) for (j=0 ; j<tam - 1; j++) if (lista[j] > lista[j+1]) { temp = lista[j]; lista[j] = lista[j+1]; lista[j+1] = temp; cout<<"."; } cout<<"\n Lista Ordenada ..."; cout<<"\n <<Presione una tecla para continuar>> "; getch();
17
/**********************************/ /* ORDENA POR EL METODO SELECCION */ /**********************************/ case 4 : clrscr(); cout<<"<< PRESIONE UNA TECLA PARA ORDENAR POR EL METODO SELECCION >>\n"; getch(); cout<<"Ordenando \n"; pos_men=0; for (i=0; i<tam - 1; i++) {for (j=i;j<tam;j++) if (lista[pos_men]>lista[j]) { pos_men =j; temp = lista[i]; cout<<"."; } lista[i] = lista [pos_men]; lista [pos_men] = temp; pos_men=i+1; } cout<<"\n Lista Ordenada ..."; cout<<"\n <<Presione una tecla para continuar>> "; getch(); break; /**********************************/ /* ORDENA POR EL METODO INSERCION */ /**********************************/ case 5 : clrscr(); cout<<"<< PRESIONE UNA TECLA PARA ORDENAR POR EL METODO INSERCION >>\n"; getch(); cout<<"Ordenando \n"; for (i=1; i<tam; i++) { temp = lista[i]; j = i - 1;
18
Mtodos de Ordenamiento y Bsqueda while ( (lista[j] > temp) && (j >= 0) ) { lista[j+1] = lista[j]; j--; cout<<"."; } lista[j+1] = temp; } cout<<"\n Lista Ordenada ..."; cout<<"\n <<Presione una tecla para continuar>> "; getch(); break; /**********************************/ /* ORDENA POR EL METODO RAPIDO */ /**********************************/
19
case 6: clrscr(); cout<<"<< PRESIONE UNA TECLA PARA ORDENAR POR EL METODO RAPIDO >>\n"; getch(); cout<<"Ordenando \n"; qs(lista,0,tam-1); cout<<"\n Lista Ordenada ..."; cout<<"\n <<Presione una tecla para continuar>> "; getch(); break; /**********************************/ /* BUSQUEDA SECUENCIA /**********************************/
*/
case 7: clrscr(); j=-1;i=-1; cout<<"<< BUSQUEDA SECUENCIAL >>\n"; cout<<"Ingrese el Numero a buscar : "; cin>>temp; do { i++; cout<<"."; if (lista[i]==temp)
} while ((i<tam) && (lista[i]!=temp)); if (j==-1) cout<<"<< NUMERO INGRESADO NO EXISTE EN LA TABLA >>\n"; else {cout <<"<< NUMERO INGRESADO SI EXISTE EN LA TABLA >>\n"; cout<< "Esta en la posicion "<<j+1; } getch(); break; /**********************************/ /* BUSQUEDA BINARIA /**********************************/
*/
20
case 8: clrscr(); cout<<"<< BUSQUEDA BINARIA >>\n"; cout<<"Ingrese el Numero a buscar : "; cin>>temp; j=-1; j=BusquedaBinaria(lista,temp,0,tam); if(j==-1) cout<<"<< NUMERO INGRESADO NO EXISTE EN LA TABLA >>\n"; else {cout <<"\n<< NUMERO INGRESADO SI EXISTE EN LA TABLA >>\n"; cout<< "Esta en la posicion "<<j+1; } getch(); break; /**********************************/ /* REPORTE DE TODA LA MATRIZ /**********************************/
*/
case 9 : clrscr(); cout<<"<< PRESIONE UNA TECLA PARA REPORTAR >>\n"; getch(); for (i=0; i<tam; i++) cout<<lista[i]<<" ";
Mtodos de Ordenamiento y Bsqueda cout<<"\n <<Presione una tecla para continuar>> "; getch(); break; } } while(op!=0); }
/**********************************/ /* ORDENA POR EL METODO RAPIDO */ /**********************************/ void qs(int p[], int inf, int sup) { register izq, der; int mitad, x, aux; izq=inf; der=sup; mitad=p[(izq+der)/2]; do{ while(p[izq]<mitad && izq<sup) izq++; while(mitad<p[der] && der>inf) der--; if(izq<=der) { aux=p[izq]; p[izq]=p[der]; p[der]=aux; izq++; der--; } cout<<"."; } while(izq<=der); if(inf<der) qs(p,inf,der); if(inf<sup) qs(p,izq,sup); } /**********************************/
21
int BusquedaBinaria(int p[], int aux,int inf, int sup) { int mitad; if((inf>=sup) && (p[inf])!=aux) return -1; mitad=(inf+sup)/2; cout<<"."; if(p[mitad]==aux) return mitad; else if(aux>p[mitad]) BusquedaBinaria(p, aux, mitad+1, sup); else BusquedaBinaria(p, aux, inf, mitad-1); }
22