martes, 27 de noviembre de 2012

Archivos ejecutables y Ordenamientos


Archivo Ejecutable
 
   En la informática, es un ejecutable o archivo ejecutable, es un archivo binario cuyo contenido se interpreta por la computadora como un programa. Generalmente, contiene instrucciones en código máquina de un procesador en concreto, pero también puede contener bytecode que requiera un intérprete para ejecutarlo. Además, suele contener llamadas a funciones específicas de un sistema operativo "llamada al sistema". Dependiendo del tipo de que se traten las instrucciones, que también se hacen relaciones con el ejecutable de portables en este casa que se puede ejecutar en varias plataformas. 
 
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 de registro. El propósito de un ordenamiento es el de facilitar las búsqueda de los miembros del conjunto ordenados. El ordenar un grupo de datos significa mover los datos o su referencia 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.

 
Ordenamiento por selección

Descripción:
.Buscas el elemento más pequeño de la lista
. Lo intercambias con el elemento ubicado en la primera posición de la lista.
. Buscas el segundo elemento más pequeño de la lista.
. Lo intercambias con el elemento que ocupa la segunda posicion en la lista.
. Repites este proceso hasta que hayas ordenado toda la lista.
 
Análisis del algoritmo:
. Requerimientos de memoria: al igual que el ordenamiento burbuja, este algoritmo solo necesita una variable adicional para realizar los intercambios.
. Tiempo de ejecución  el ciclo externo se ejecutan veces para una lista de elementos. Cada búsqueda requiere comparar todos los elementos no clasificados.
 
Ventajas:
. Fácil implementación.
. No requiere memoria adicional.
. Rendimiento constante: poca diferencia entre el peor y el mejor caso.
 
Desventaja:
. Lento.
. Realiza numerosas comparaciones.


Ordenamiento de inserción 
 
     El algoritmo de ordenación por el método de inserción directa es un algoritmo relativamente sencillo y se comporta razonablemente bien en la gran cantidad de situaciones. Completa la tripleta de los algoritmos de ordenación más básicos y de orden de complejidad cuadrático, junto con selectionSort y bubbleSort.
      Se basa en intentar construir una lista ordenada en el interior del array a ordenar. De estos tres algoritmos es el que mejor resultado de e efectos prácticos  Realiza una cantidad de comparaciones bastante equilibrada con respecto a los intercambio, y tiene un par de características que lo hacen aventajar a los otros dos en la mayor parte de las situaciones. Este algoritmo se basa en hacer comparaciones, así que para que realice su trabajo de ordenación son imprescindibles dos cosas: un array o estructura similar de elementos comprables y uno criterio claro de comparación, tal que dados dos elementos nos diga se están en orden o no.
En cada iteración del ciclo externo los elementos 0 a i forman una lista ordenada.
 
Análisis del algoritmo:
. Estabilidad: este algoritmo nunca intercambia registro con claves iguales. por los tanto es estable.
. Requerimientos de memoria: una variable adicional para realizar los intercambios.
. Tiempo de ejecución  para una lista de n elemento el ciclo se ejecuta n-1 veces. El ciclo interno se ejecuta como máximo una vez en la primera iteracion, 2 veces en la segunda, 3 veces en la tercera, etc.
 
Ventajas:
. Fácil implementación.
. Requerimientos mínimos de memoria.
Desventajas:
. Lento.
. Realiza numerosas comparaciones.
. Este también es un algoritmo lento, peor puede ser de utilidad para listas que están ordenadas o semi-ordenadas, porque en ese caso realiza muy pocos desplazamientos.
 
Búsqueda
 
   
     La búsqueda es una operación que tiene por objeto la localización de un elemento dentro de la estructura de datos. A menudo un programador estará trabajando con grandes cantidades de datos almacenados en arreglos y pudiera resultar necesario determinar si un arreglo contiene un valor que coincide con algún valor clave o buscado.
Siendo el array de una dimensión o lista una estructura de acceso directo y a su vez de acceso secuencial, encontramos dos técnicas que utilizan estos dos métodos de acceso, para encontrar elementos dentro de un array: búsqueda lineal y búsqueda binaria.


Búsqueda Secuencial: 

        La búsqueda secuencial es la técnica más simple para buscar un elemento en un arreglo. Consiste en recorrer el arreglo elemento a elemento e ir comparando con el valor buscado (clave). Se empieza con la primera casilla del arreglo y se observa una casilla tras otra hasta que se encuentra el elemento buscado o se han visto todas las casillas. El resultado de la búsqueda es un solo valor, y será la posición del elemento buscado o cero. Dado que el arreglo no está en ningún orden en particular, existe la misma probabilidad de que el valor se encuentra ya sea en el primer elemento, como en el último. Por lo tanto, en promedio, el programa tendrá que comparar el valor buscado con la mitad de los elementos del arreglo.
     El método de búsqueda lineal funciona bien con arreglos pequeños o para arreglos no ordenados. Si el arreglo está ordenado, se puede utilizar la técnica de alta velocidad de búsqueda binaria, donde se reduce sucesivamente la operación eliminando repetidas veces la mitad de la lista restante.


Búsqueda Binaria:

     La búsqueda binaria es el método más eficiente para encontrar elementos en un arreglo ordenado. El proceso comienza comparando el elemento central del arreglo con el valor buscado. Si ambos coinciden finaliza la búsqueda. Si no ocurre así, el elemento buscado será mayor o menor en sentido estricto que el central del arreglo. Si el elemento buscado es mayor se procede a hacer búsqueda binaria en el subarray superior, si el elemento buscado es menor que el contenido de la casilla central, se debe cambiar el segmento a considerar al segmento que está a la izquierda de tal sitio central.


Burbuja 


     La Ordenación de burbuja es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten más intercambios, lo cual significa que la lista está ordenada. Este algoritmo obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeñas "burbujas". También es conocido como el método del intercambio directo. Dado que solo usa comparaciones para operar elementos, se lo considera un algoritmo de comparación.


Ejercicios resuelto en clases

 

Ordenamiento
#include <iostream.h>
main(){
char a[]="r,e,p,u,b,l,i,c,a";
cin>>"a";
cout<<"a";
}
Búsqueda
#include <iostream.h>
void intercambio(int &x, int &y){
int aux= x;
x=y;
y=aux;}
void ordintercambio(int a[],int n){
int i,j;
for(i=0; i<n-1;i++)
for(j=0; j<n;j++)
if(a[i]>a[j])
intercambio(a[i],a[j]);}
void imprimir (int a[], int n){
for(int i=0;i<n;i++)
cout<<a[i]<<" ";}
void main (void){
int lista [20]={30,2,5,8,4,7,1,3,6,9,2,4,56,32,5,5,5,2,7,22};
int i;
cout<<"lista original\n";
imprimir(lista,20);
ordintercambio(lista,20);
cout<<endl<<"lista ordenado";
imprimir(lista,20);
}


Burbuja
#include <iostream.h>
void ordburbuja(int a[], int n)
{int aux, j, pasado;
int interreptor=TRUE;
for(pasada=0 pasado<n-1&&interruptor==TRUE; pasado++)
{interruptor=false;
for(j=0; j<n-pasodo-1; j++)
if(a[j]>a[j+1])
{interruptor=TRUE;
aux=a[j];
a[j]=a[j+1]
a[j+1]=aux;
}
}
}

No hay comentarios:

Publicar un comentario