informe de programacion

26
Pimentel – Chiclayo FACULTAD DE ARQUITECTURA, INGENIERIA Y URBANISMO ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS ASIGNATURA : Fundamentos de Programación DOCENTE : Rosa América ALUMNO : MUÑOZ SEGURA Luis Enrique CICLO : I Aula : Lab Nª 20

Upload: luis-e-munoz-segura

Post on 02-Dec-2015

213 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Informe de Programacion

Pimentel – Chiclayo

FACULTAD DE ARQUITECTURA, INGENIERIA Y URBANISMO

ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

ASIGNATURA :

Fundamentos de Programación

DOCENTE :

Rosa América

ALUMNO :

MUÑOZ SEGURA Luis Enrique

CICLO :

I

Aula :

Lab Nª 20

Turno :

Mañana

Pimentel 23 de octubre del 2015

Page 2: Informe de Programacion

ContenidoI.

MARCO TEORICO:..................................................................................................................4

MÉTODOS DE BÚSQUEDA:...............................................................................................4

Tipos de métodos de búsqueda:.....................................................................................4

Método de búsqueda secuencial:....................................................................................4

Método de búsqueda binaria:..........................................................................................4

Métodos de ordenamiento:...............................................................................................5

Tipos de ordenamiento:....................................................................................................6

1.2 ORDENAMIENTO INTERNO:.......................................................................................6

1.2.1 Ordenamiento por intercambio (burbuja):.............................................................7

1.2.2 Algoritmo de burbuja mejorado:.............................................................................7

1.3 MÉTODO DE SELECCIÓN:..........................................................................................8

1.4 MÉTODO DE INSERCIÓN:...........................................................................................8

1.5 ORDENACIÓN SHELL:.................................................................................................9

1.6 ORDENAMIENTO POR MEZCLA (MERGE SORT)................................................10

1.7 Ordenación por partición e intercambio (Quick Sort):..............................................11

1.7 Ordenación basada en comparaciones (Heap Sort):...............................................13

ORDENAMIENTO EXTERNO:..........................................................................................13

1.2.1 Ordenación por mezcla directa:...........................................................................14

1.2.2 Ordenación por mezcla equilibrada:...................................................................14

2. EJEMPLOS:.........................................................................................................................15

3. CONCLUSIONES...............................................................................................................16

Bibliografía:..............................................................................................................................17

Page 3: Informe de Programacion

Resumen:

La operación de ordenar consisten seleccionar de un conjunto de datos y

ordenarlos bajo algún determinado criterio. Por ejemplo, cada elemento del

conjunto de datos de una guía telefónica tiene un nombre, una dirección y un

número de teléfono; la guía telefónica está dispuesta en orden alfabético de

nombres; los elementos numéricos se pueden ordenar en orden creciente o

decreciente de acuerdo al valor numérico del elemento. En terminología de

ordenación, el elemento por el cual esta ordenado un conjunto de datos (o se

está buscando) se denomina clave.

Una colección de datos (estructura) puede ser almacenada por ejemplo en un

array (vector o tabla). Una estructura se dice que esta ordenada por la clave k

si la lista está en orden ascendente o descendente con respecto a esta clave.

La colección de datos se dice que está en orden ascendente si: i <

jimplicaquek[i] <=k[j]. En cambio, está en orden descendente si: i >

jimplicaquek[i] <= k[j] para todos los elementos de la colección.

Page 4: Informe de Programacion

MARCO TEORICO:

MÉTODOS DE BÚSQUEDA:

Los métodos de búsqueda nos permiten recuperar información de un

vector o un archivo, que contenga una lista de datos. Por ejemplo se

puede obtener el nombre y el número telefónico de nuestra agenda de

contactos o la nota obtenida por un alumno en la lista de un curso.

Cuando se realizan búsquedas sobre vectores, se desea es encontrar la

posición que ocupa el elemento buscado dentro de la lista de elementos

que contiene el vector. Para la búsqueda de información en archivos es

necesario realizar la búsqueda a partir de un campo clave dentro del

archivo. Existen diferentes métodos de búsqueda y se puede determinar

con cual método trabajar dependiendo de la cantidad de elementos que

existan en el vector o la organización de dichos elementos.

Tipos de métodos de búsqueda:

Método de búsqueda secuencial:

Este método se usa para buscar un elemento de un vector, es

explorar secuencialmente el vector, es decir; recorrer el vector desde

el prior elemento hasta el último. Si se encuentra el elemento

buscado se debe visualizar un mensaje similar a “Fin de Búsqueda”

o “Elemento encontrado” y otro que diga “posición=” en caso

contrario, visualizar un mensaje similar a “Elemento no existe en la

Lista”.

Este tipo de búsqueda compara cada elemento del vector con el

valor a encontrar hasta que este se consiga o se termine de leer el

vector completo.

Método de búsqueda binaria:

Es un método que se basa en la división sucesiva del espacio

ocupado por el vector en sucesivas mitades, hasta encontrar el

elemento buscado.

Page 5: Informe de Programacion

Esta búsqueda utiliza un método de “divide y vencerás” para

localizar el valor deseado. Con este método se examina primero el

elemento central de la lista; si este es el elemento buscado entonces

la búsqueda ha terminado. En caso contrario se determina si el

elemento buscado está en la primera o segunda mitad de la lista y a

continuación se repite el proceso anterior, utilizando el elemento

central de esta sublista. Este tipo de búsqueda se utiliza en vectores

ordenados.

Métodos de ordenamiento:

Debido a que las estructuras de datos son utilizadas para almacenar

información, para poder recuperar esa información de manera eficiente es

deseable que aquella esté ordenada. Existen varios métodos para ordenar

las diferentes estructuras de datos básicas.

En general los métodos de ordenamiento no son utilizados con frecuencia,

en algunos casos sólo una vez. Hay métodos muy simples de implementar

que son útiles en los casos en dónde el número de elementos a ordenar no

es muy grande (ej, menos de 500 elementos). Por otro lado hay métodos

sofisticados, más difíciles de implementar pero que son más eficientes en

cuestión de tiempo de ejecución.

Los métodos sencillos por lo general requieren de aproximadamente n x n

pasos para ordenar n elementos.

Los métodos simples son: insertion sort (o por inserción directa) selection

sort, bubble sort, y shellsort, en dónde el último es una extensión al

insertion sort, siendo más rápido. Los métodos más complejos son el quick-

sort, el heap sort, radix y address-calculation sort. 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.

Page 6: Informe de Programacion

Se ha dicho que el ordenamiento puede efectuarse moviendo los registros

con las claves. El mover un registro completo implica un costo, el cual se

incrementa conforme sea mayor el tamaño del registro. Es por ello que es

deseable evitar al máximo el movimiento de los registros. Una alternativa

es el crear una tabla de referencias a los registros y mover las referencias y

no los datos. A continuación se mostrarán los métodos de ordenamiento

empezando por el más sencillo y avanzando hacia los más sofisticados

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 a ordenar y se dice que un algoritmo realiza

O(n2) comparaciones cuando compara n veces los n elementos, n x n = n2.

Tipos de ordenamiento:

La ordenación o clasificación de datos consiste en la disposición de

los mismos de acuerdo con algún valor o característica. Por ejemplo,

cada elemento de una agenda telefónica tiene un campo nombre, un

campo dirección y un campo número telefónico. Por lo regular los

datos en la agenda se encuentran organizados en un orden de la A

la Z. De la misma forma un lista ó vector de datos se dice que esta

ordenado de manera ascendente, si X [ i ] <= X [ i +1] y, por otro

lado, se dice que esta ordenado de manera descendente sí X [ i ] >=

X [ i +1].

El proceso de ordenación es uno de los mecanismos más

interesantes cuando llega el momento de mostrar que existen

múltiples soluciones para un mismo problema, y que cada solución

algorítmica tiene sus propias ventajas y desventajas.

Una forma de medir la eficiencia de un algoritmo de esta clase, es

verificar el número de comparaciones entre valores clave, además

del número de movimientos que se tengan que realizar entre

elementos (intercambios) de la lista.

Page 7: Informe de Programacion

Los métodos de ordenamiento que trabajan con estructuras de datos

residentes en memoria principal se denominan Ordenamientos

Internos, mientras que las implementaciones que utilizan estructuras

de datos residentes en archivos se conocen como Ordenamientos

externos.

1.2 ORDENAMIENTO INTERNO:

Los métodos de ordenamiento interno trabajan en memoria principal y

sus implementaciones son muy variadas, de manera que la elección del

algoritmo adecuado debe realizarse con criterios de eficiencia (tiempo y

ejecución) y en función de la memoria disponible. Dividiremos los

métodos en dos grandes grupos:

• Directos (burbuja, selección e inserción).

• Logarítmicos (Shell sort, Merge sort, Heap sort, Quick sort, Radix).

En el caso de listas pequeñas, los métodos directos se desempeñan de

manera relativamente eficientes, ya que la codificación del algoritmo

correspondiente no es compleja. Su uso es muy frecuente. Sin embargo,

en arreglos grandes las ordenaciones directas resultan ineficientes y se

necesitara un método logarítmico para su solución.

1.2.1 Ordenamiento por intercambio (burbuja):

Es uno de los métodos relativamente más sencillo e intuitivo, pero

también resulta ser muy ineficiente. Se basa en la ordenación por

cambio, y recibe su nombre de la semejanza con las burbujas de

un depósito de agua donde cada burbuja busca su propio nivel.

1.2.2 Algoritmo de burbuja mejorado:

Existe una versión mejorada de dicho algoritmo en donde se

integra una variable que funge como switch (bandera) que permite

detectar el momento en que ya no se presenten más intercambios

Page 8: Informe de Programacion

aunque su mejora no suele ser tan importante pues el algoritmo

sigue comportándose como una ordenación cuadrática O(n2).

void burbuja(int *v, int n) /*** código en C++ ***/{bool sw = true;int li = 0;do {li++;sw = true;for (int i = 0; i < n - li; i++) {if ( v[i] > v[i+1] ) { // compara los valores// intercambia los datosint tem = v[i];v[i] = v[i+1];v[i+1] = tem;sw = false;}}} while(!sw);

}

1.3 MÉTODO DE SELECCIÓN:

La idea básica es encontrar el elemento más pequeño (grande), en

orden ascendente de la lista, e intercambiarlo con el elemento que ocupa

la primera posición en la lista, a continuación se busca el siguiente

elemento más pequeño y se transfiere a la segunda posición. Se repite

el proceso hasta que el último elemento ha sido transferido a su posición

correcta.

El algoritmo de ordenación depende a su vez del algoritmo necesario

para localizar el componente mayor (menor) de un array. Es un proceso

muy similar al método de la burbuja pero haciendo más eficiente la

búsqueda y evitando intercambios innecesarios.

void seleccion( int * v, int n) /*** código en C++ ***/{/* ordenamiento de seleccion */for (int i = 0, j = 0, k = 0; i < n-1; i++) {k = i;for (j = i+1; j < n; j++)if ( v[k] > v[j] )k = j;int tem = v[i];v[i] = v[k];v[k] = tem;

Page 9: Informe de Programacion

}}

1.4 MÉTODO DE INSERCIÓN:

Este método también se denomina “método del jugador de cartas”, por la

semejanza con la forma de clasificar las cartas de una baraja, insertando

cada carta en el lugar adecuado.

El algoritmo ordena los dos primeros elementos de la lista, a

continuación el tercer elemento se inserta en la posición que

corresponda, el cuarto se inserta en la lista de tres elementos, y así

sucesivamente. Este proceso continua hasta que la lista este totalmente

ordenada.

void insercion( int * v, int n) /*** código en C++ ***/{/* ordenamiento de insercion */for (int i = 1, j = 0; i < n; i++) {int tem = v[i];j = i - 1;while ( j >= 0 && tem < v[j]) {v[j+1] = v[j];j--;}v[j+1] = tem;}

}

1.5 ORDENACIÓN SHELL:

Shell sort lleva este nombre en honor a su inventor, Donald Shell, que lo

publicó en 1959. La idea básica de este método es distribuir el arreglo de

manera que se genere una matriz de valores donde cada elemento es

comparado de manera adyacente empleando un mecanismo de

inserción directa simple, dicho rango que genera grupos de manera

matricial que es reducido gradualmente hasta estabilizarse en un valor

uniforme de 1.

Page 10: Informe de Programacion

En el método de ordenación por inserción directa es empleado en cada

sub grupo de manera que cada elemento se compara para su ubicación

correcta en el arreglo con los elementos que se encuentran en su parte

izquierda. Si el elemento a insertar es más pequeño que el grupo de

elementos que se encuentran a su izquierda, será necesario efectuar

varias comparaciones antes de su ubicación. Shell propone que las

comparaciones entre elementos se efectúen con saltos de mayor

tamaño, pero con incrementos decrecientes; así, los elementos

quedaran ordenados más rápidamente.

El algoritmo para Shell sort sería el siguiente. Algunos autores suponen

una secuencia geométrica de decremento (2.2) que permite una

distribución presumiblemente más razonable para el acomodo de los

grupos de elementos a comparar. El algoritmo emplea un arreglo a de 0

a n-1:

inc = round(n/2)mientras inc > 0 {para i = inc hasta n – 1 {temp = a[i]j = imientras j = inc && a[j - inc] > temp {a[j] = a[j - inc]j = j – inc}a[j] = temp}inc = round(inc / 2.2)}

1.6 ORDENAMIENTO POR MEZCLA (MERGE SORT)

Fue desarrollado en 1945 por John Von Neumann. Conceptualmente, el

ordenamiento por mezcla funciona de la siguiente manera:

1. Si la longitud de la lista es 0 ó 1, entonces ya está ordenada. En otro

caso:

Page 11: Informe de Programacion

2. Dividir la lista desordenada en dos sublistas de aproximadamente la

mitad del tamaño.

3. Ordenar cada sablista recursivamente aplicando el ordenamiento por

mezcla.

4. Mezclar las dos sublistas en una sola lista ordenada.

El ordenamiento por mezcla incorpora dos ideas principales para mejorar

su tiempo de ejecución:

Una lista pequeña necesitará menos pasos para ordenarse que

una lista grande.

Se necesitan menos pasos para construir una lista ordenada a

partir de dos listas también ordenadas, que a partir de dos listas

desordenadas. Por ejemplo, sólo será necesario entrelazar cada

lista una vez que están ordenadas.

1.7 Ordenación por partición e intercambio (Quick Sort):

Es un algoritmo relativamente eficiente y representa una mejora

sustancial al método de intercambio directo.

El algoritmo es el siguiente:

1. Elegir un elemento de la lista de elementos a ordenar (pivote).

2. Resituar los demás elementos de la lista a cada lado del pivote, de

manera que a un lado queden todos los menores que él, y al otro los

mayores.

Los elementos iguales al pivote pueden ser colocados tanto a su

derecha como a su izquierda, dependiendo de la implementación

deseada. En este momento, el pivote ocupa exactamente el lugar que le

corresponderá en la lista ordenada.

Page 12: Informe de Programacion

2. La lista queda separada en dos sub-listas, una formada por los

elementos a la izquierda del pivote, y otra por los elementos a su

derecha.

3. Repetir este proceso de forma recursiva para cada sub-lista mientras

éstas contengan más de un elemento. Una vez terminado este

proceso todos los elementos estarán ordenados.

Como se puede suponer, la eficiencia del algoritmo depende de la

posición en la que termine el pivote elegido. En el mejor caso, el pivote

termina en el centro de la lista, dividiéndola en dos sublistas de igual

tamaño. En este caso, el orden de complejidad del algoritmo es O(n log

n).

En el peor caso, el pivote termina en un extremo de la lista. El orden de

complejidad del algoritmo es entonces de O (n²). El peor caso dependerá

de la implementación del algoritmo, aunque habitualmente ocurre en

listas que se encuentran ordenadas, o casi ordenadas. Pero

principalmente depende del pivote, por ejemplo el algoritmo

implementado toma como pivote siempre el primer elemento del arreglo,

y el arreglo que le pasamos está ordenado, siempre va a generar a su

izquierda un arreglo vacío, lo que es ineficiente.

Ordenación basada en comparaciones (Heap Sort).

Es una variante del algoritmo de selección, El ordenamiento por

montículos (Heap sort) es un algoritmo de ordenación no recursivo, no

estable, con complejidad computacional O(n log n).

Este algoritmo consiste en almacenar todos los elementos del vector a

ordenar en un montículo (heap), y luego extraer el nodo que queda como

nodo raíz del montículo (cima) en sucesivas iteraciones obteniendo el

conjunto ordenado. Basa su funcionamiento en una propiedad de los

montículos, por la cual, la cima contiene siempre el menor elemento (o el

Page 13: Informe de Programacion

mayor, según se haya definido el montículo) de todos los almacenados

en él.

El significado de heap en computación es el de una cola de prioridades

(priority queue). Tiene las siguientes características:

Un heap es un arreglo de n posiciones ocupado por los elementos

de la cola.

Se mapea un árbol binario de tal manera en el arreglo que el nodo

en la posición i es el padre de los nodos en las posiciones (2*i) y

(2*i+1).

El valor en un nodo es mayor o igual a los valores de sus hijos. Por

consiguiente, el nodo padre tiene el mayor valor de todo su

subárbol.

1.7 Ordenación basada en comparaciones (Heap Sort):

Es una variante del algoritmo de selección, El ordenamiento por

montículos (Heap sort) es un algoritmo de ordenación no recursivo, no

estable, con complejidad computacional O(n log n).

Este algoritmo consiste en almacenar todos los elementos del vector a

ordenar en un montículo (heap), y luego extraer el nodo que queda como

nodo raíz del montículo (cima) en sucesivas iteraciones obteniendo el

conjunto ordenado. Basa su funcionamiento en una propiedad de los

montículos, por la cual, la cima contiene siempre el menor elemento (o el

mayor, según se haya definido el montículo) de todos los almacenados

en él.

El significado de heap en computación es el de una cola de prioridades

(priority queue). Tiene las siguientes características:

Page 14: Informe de Programacion

Un heap es un arreglo de n posiciones ocupado por los elementos de

cola.

Se mapea un árbol binario de tal manera en el arreglo que el nodo en

la posición i es el padre de los nodos en las posiciones (2*i) y (2*i+1).

El valor en un nodo es mayor o igual a los valores de sus hijos. Por

consiguiente, el nodo padre tiene el mayor valor de todo su subárbol.

ORDENAMIENTO EXTERNO:

La ordenación de archivos se lleva a cabo cuando el volumen de los

datos a tratar es demasiado grande y los mismos no caben en la

memoria principal de la computadora.

Al ocurrir esta situación no pueden aplicarse los métodos de ordenación

interna, de modo que debe pensarse en otro tipo de algoritmos para

ordenar datos almacenados en archivos.

Por ordenación de archivos se entiende, entonces, la ordenación o

clasificación de éstos, ascendente o descendentemente, de acuerdo con

un campo determinado al que se denominará campo clave. La principal

desventaja de esta ordenación es el tiempo de ejecución, debido a las

sucesivas operaciones de entrada y salida.

Los dos métodos de ordenación externa más importantes son los

basados en la mezcla directa y en la mezcla equilibrada.

1.2.1 Ordenación por mezcla directa:

El método de ordenación por mezcla directa es probablemente el

más utilizado por su fácil comprensión.

La idea central de este algoritmo consiste en la realización sucesiva

de una partición y una fusión que produce secuencias ordenadas de

longitud cada vez mayor. En la primera pasada la participación es de

longitud 1 y la fusión o mezcla produce secuencias ordenadas de

longitud 4.

Page 15: Informe de Programacion

Este proceso se repite hasta que la longitud de la secuencia para la

partición sea mayor o igual que la longitud de la secuencia para la

partición sea mayor o igual que el número de elementos del archivo

original.

Supóngase que se desean ordenar las claves del archivo F. Para

realizar tal actividad se utilizan dos archivos auxiliares a los que se

les denominará F1 y F2.

1.2.2 Ordenación por mezcla equilibrada:

El método de ordenación por mezcla equilibrada, conocido

también con el nombre de mezcla natural, es una optimización del

método de mezcla directa.

La idea central de este método consiste en realizar las particiones

tomando secuencias ordenadas de máxima longitud en lugar de

secuencias de tamaño fijo previamente determinadas. Luego

realiza la fusión de las secuencias ordenadas, alternativamente

sobre dos archivos aplicando estas acciones en forma repetida se

lograra que el archivo original quede ordenado. Para la realización

de este proceso de ordenación se necesitaran cuatro archivos. El

archivo original F y tres archivos auxiliares a los que se

denominaran F1, F2 y F3. De estos archivos, dos serán

considerados de entrada y dos de salida; esto, alternativamente,

con el objeto de realizar la fusión-partición. El proceso termina

cuando en la realización de una fusión-partición el segundo

archivo quede vacío.

Page 16: Informe de Programacion

2. EJEMPLOS:

Método de búsqueda secuencial:

Método de búsqueda binaria

Page 17: Informe de Programacion

Método de selección:

Método de inserción:

Page 18: Informe de Programacion

3. CONCLUSIONES:

Al realizar esta investigación nos ayuda a conocer cada una de los tipos

de métodos de búsqueda ya que al momento de hacer un programa

extenso podríamos utilizar algunos de estos métodos y así encontrar la

información más rápida y no perder tanto tiempo.

Al comparar con las demás definiciones y funciones de cada de los

métodos de búsqueda puede notar que este método es más eficiente y

entendible que los demás. Es el algoritmo conocido como quicksort

(ordenación rápida) recibe el nombre de su autor, Tony Hoare.

La idea del algoritmo es simple, se basa en la división en particiones de la

lista a ordenar, por lo que se puede considerar que aplica la técnica divide

y vencerás. El método es, posiblemente, el más pequeño de código, más

rápido, más elegante y eficiente de los algoritmos de ordenación

conocidos.

Page 19: Informe de Programacion

Bibliografía:

Y. Langsam, M. J. Augenstein, A. Tenenbaum. Data Structures using C and C++.

Prentice Hall,

Second edition. ISBN 0-13-036997-7.

http://en.wikipedia.org/wiki/Sorting_algorithm.