miércoles, 19 de noviembre de 2014

INICIO

Hola! Este es un blog acerca de las estructuras de datos, materia que curso actualmente en el tercer semestre de mi carrera. Este blog aparte de servir como fuente de información, será el portafolio de evidencias de la materia antes mencionada.
Espero sea de su agrado, aquí podrán encontrar información acerca de este tema, el cual es muy interesante y útil a la hora de programar. En las diferentes entradas que iré creando, les hablaré acerca de las estructuras de datos, desde su definición, su clasificación, sus aplicaciones, su implementación en java.... y demás.

martes, 18 de noviembre de 2014

Objetivo general del curso

Aplicar estructuras de datos en la elaboración de programas.
Utilizar listas enlazadas para la solución de problemas computacionales.
Manipular diversos tipos de árboles para clasificar datos.
Comparar los diversos algoritmos de ordenamiento.
Comparar los diversos algoritmos de búsqueda.
Aplicar la recursividad como estrategia de solución de problemas.
Analizar las estrategias de recuperación de información perdida o dañada en dispositivos de almacenamiento secundario.

sábado, 15 de noviembre de 2014

Evaluación diagnóstica

La siguiente imagen corresponde a la evaluación diagnóstica realizada en el salón de clases.



jueves, 13 de noviembre de 2014

I UNIDAD. FUNDAMENTOS DE ESTRUCTURAS DE DATOS

Objetivo:
Identificar los conceptos básicos de las estructuras de datos.
Identificar las diferentes estructuras de datos, respecto a su implementación.

Subtemas:
1.1. Definición.
1.2. Clasificación.
1.3. Estructuras lineales y no lineales.
1.4. Estructuras dinámicas y estáticas.

martes, 11 de noviembre de 2014

Definición de estructuras de datos

Una estructura de datos es una colección de datos que pueden ser caracterizados por su organización y las operaciones que se definen en ella. Es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se tiene en un sistema.
Una estructura de datos define la organización e interrelación de estos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones básicas son:
Alta, adicionar un nuevo valor a la estructura.
Baja, borrar un valor de la estructura.
Búsqueda, encontrar un determinado valor en la estructura para realizar una operación con este valor, en forma secuencial o binario (siempre y cuando los datos estén ordenados).

domingo, 9 de noviembre de 2014

Investigación: Definición y tipos de estructuras de datos

En el siguiente enlace se muestra la investigación referente a los conceptos básicos de las estructuras de datos y su respectiva clasificación.

clic aqui

sábado, 8 de noviembre de 2014

Actividad: Operaciones en una estructura de datos

La siguiente imagen corresponde a las características que poseen las estructuras de datos, de forma general:


viernes, 7 de noviembre de 2014

Actividad: clasificación de las estructuras de datos

La siguiente imagen muestra el mapa conceptual realizado en clase, en el cual representamos los tipos de estructuras existentes.


jueves, 6 de noviembre de 2014

Presentación: Tipos de datos

La siguiente presentación contiene información acerca de los distintos tipos de datos, y su finalidad es comprenderlos y diferenciarlos, en especial los tipos de datos simples y los estructurados.

clic aquí

miércoles, 5 de noviembre de 2014

Ejercicios

En el siguiente enlace pueden encontrar algunos ejercicios introductorios de la materia.

Clic aqui

martes, 4 de noviembre de 2014

Actividad: Declaración, construcción y utilización de arreglos

La siguiente actividad corresponde al tema de arreglos. En dicha actividad pusimos en práctica la declaración, creación y utilización de arreglos de distintos tipos en java.




lunes, 3 de noviembre de 2014

Práctica 1

Realizar un programa en java que permita:

a) En base a 50 calificaciones de alumnos.
b) Determinar cuáles de ellos tiene una calificación aprobatoria.
c) Determinar cuáles de ellos tienen un calificación superior a la media del grupo.

clic aqui

domingo, 2 de noviembre de 2014

Práctica 2-3

Realizar un programa en java que realice:

a) Ingresar los meses del año.
b) Seleccionar alguno de esos meses y visualizarlo.
c) Imprimir el total de los meses.

clic aqui

viernes, 31 de octubre de 2014

Práctica 4

Elaborar un algoritmo o programa que realice al menos 3 operaciones con arreglos:

a) Ordenar los datos de mayor a menor o menor a mayor.

clic aqui

miércoles, 29 de octubre de 2014

Práctica 5

Realizar un programa con arreglos que lleve a cabo las siguientes operaciones:

a) Lectura de los datos.
b) Cálculo de la suma de sus elementos.
c) Cálculo del promedio de sus elementos.
d) Cálculo de la suma del valor n a sus elementos.
e) Cálculo de la multiplicación del valor n a sus elementos.

clic aqui

martes, 28 de octubre de 2014

Práctica 6

Realice las siguientes actividades:

a) Programe el código de ejemplo que aparece en la página 71 del libro  “Estructuras de datos en java” de Joyanes Aguilar.
b) Documente la implementación y el funcionamiento del arreglo multidimensional que aparece en el ejemplo.

clic aqui

domingo, 26 de octubre de 2014

II UNIDAD. ESTRUCTURAS LINEALES

Objetivo:
Aplicar las principales estructuras de datos lineales.

Subtemas:
2.1. Listas.
2.2. Pilas estáticas y dinámicas.
2.3. Colas estáticas y dinámicas.
2.4. Aplicaciones.

sábado, 25 de octubre de 2014

Introducción



En algunas ocasiones no se conoce por adelantado cuánta memoria se requerirá para un programa. En esos casos es conveniente disponer de un método para adquirir posiciones adicionales de memoria a medida que se necesiten durante la ejecución del programa y liberarlas cuando no se necesitan. Las variables que se crean y están disponibles durante la ejecución de un programa se llaman variables dinámicas. Estas variables se representan con un tipo de datos conocido como puntero. Las variables dinámicas se utilizan para crear estructuras dinámicas de datos que se puede ampliar y comprimir a medida que se requieran durante la ejecución del programa. Una estructura de datos dinámica es una colección de elementos denominados nodos de la estructura (normalmente de tipo registro) que son enlazados juntos. Las estructuras dinámicas de datos se clasifican en lineales y no lineales.

Terminología

LISTA LINEAL
Una lista lineal es un conjunto de elementos de un tipo dado que pueden variar en número y donde cada elemento tiene un único predecesor y  un único sucesor o siguiente, excepto el primero y el último de la lista.
Los elementos de una lista lineal se almacenan normalmente contiguos (un elemento detrás de otro) en posiciones consecutivas de la memoria.

Las operaciones que se pueden realizar con listas lineales contiguas son:
1. insertar, eliminar o localizar un elemento
2. Determinar el tamaño (número de elementos) de la lista
3. Recorrer la lista para localizar un determinado elemento
4. Clasificar los elementos de la lista en orden ascendente o descendente
5. Unir dos o más listas en una sola
6. Dividir una lista en varias sublistas
7. Copiar la lista
8. Borrar la lista

Las operaciones directas de añadir y eliminar se efectúan únicamente en los extremos de la lista. Esta limitación es una de las razones por las  que esta estructura es poco utilizada.

LISTAS ENLAZADAS
Los inconvenientes de las listas contiguas se eliminan con las listas enlazadas.
Una lista enlazada o encadenada es un conjunto de elementos en los que cada uno de ellos contiene la posición (o dirección) del siguiente  elemento de la lista. Cada elemento de la lista enlazada debe tener al menos dos campos: un campo que tiene el valor del elemento y un campo  enlace (link) que contiene la posición del siguiente elemento, es decir, su conexión, enlace o encadenamiento. Los elementos de una lista son  enlazados por medio de los campos enlaces.

PILAS
Una pila (stack) es una colección ordenada de elementos a los cuales sólo se puede acceder por un único lugar o extremo de la pila. Los elementos se añaden o se quitan (borran) de la pila sólo por su parte superior (cima). Este es el caso de una pila de platos, una pila de libros, etc.

Cuando se dice que la pila está ordenada, lo que se quiere decir es que hay un elemento al que se puede acceder primero (el que está encima de la pila), otro elemento al que se puede acceder en segundo lugar (justo el elemento que está debajo de la cima), un tercero, etc. No se requiere que las entradas se puedan comparar utilizando el operador “menor que” (<) y pueden ser de cualquier tipo.
Las entradas de la pila deben ser eliminadas en el orden inverso al que se situaron en la misma. Por ejemplo, se puede crear una pila de libros, situando primero un diccionario, encima de él una enciclopedia y encima de ambos una novela, de modo que la pila tendrá la novela en la parte superior.

Debido a su propiedad específica último en entrar, primero en salir se conoce a las pilas como estructuras de datos LIFO (last-in, first-out)
Las operaciones usuales en la pila son Insertar y Quitar. La operación Insertar (push) añade un elemento en la cima de la pila, y la operación Quitar (pop) elimina o saca un elemento de la pila.

Tipo de dato: Dato que se almacena en la pila.

Operaciones:
Crear. Pila Inicia.
Insertar (push). Pone un dato en la pila.
Quitar (pop). Retira (saca) un dato de la pila.
Pila vacía. Comprueba si la pila no tiene elementos.
Pila llena. Comprueba si la pila está llena de elementos.
Limpiar pila. Quita todos sus elementos y deja la pila vacía.
Cima Pila. Obtiene el elemento cima de la pila.
Tamaño de la pila. Número de elementos máximo que puede contener la pila.

Aplicaciones: Las pilas se utilizan en compiladores, sistemas operativos y programas de aplicaciones. Una aplicación interesante es la evaluación de expresiones aritméticas, también la organización de la memoria.

COLAS
Una cola es una estructura de datos que almacena elementos en una lista y permite acceder a los datos por uno de los dos extremos de la lista. Un elemento se inserta en la cola (parte final) de la lista y se suprime o elimina por el frente (parte inicial, frente) de la lista. Las aplicaciones utilizan una cola para almacenar elementos en su orden de aparición o concurrencia.
Los elementos se eliminan (se quitan) de la cola en el mismo orden en que se almacenan y, por consiguiente, una cola es una estructura de tipo FIFO (first-in, firs-out, primero en entrar-primero en salir o bien primero en llegar-primero en ser servido). El servicio de atención a clientes en un almacén es un ejemplo típico de cola. La acción de gestión de memoria intermedia (buffering) de trabajos o tareas de impresora en un distribuidor de impresoras (spooler) es otro ejemplo típico de cola.

Las operaciones que sirven para definir una cola y poder manipular su contenido son las siguientes:

Tipo de dato: Elemento que se almacena en la cola.

Operaciones:
CrearCola. Inicia la cola como vacía.
Insertar. Añade un elemento por el final de la cola.
Quitar. Retira (extrae) el elemento frente de la cola.
Cola vacía. Comprueba si la cola no tiene elementos.
Cola llena. Comprueba si la cola está llena de elementos.
Frente. Obtiene el elemento frente o primero de la cola.
Tamaño de la cola. Número de elementos máximo que puede contener la cola.

En una cola, al igual que en una pila, los datos se almacenan de un modo lineal y el acceso a los datos sólo está permitido en los extremos de la cola.

Aplicaciones: Las colas tienen numerosas aplicaciones en el mundo de la computación: colas de mensajes, colas de tareas a realizar por una impresora, colas de prioridades, etc.

COLA DE PRIORIDAD
El término cola sugiere la forma en que ciertos objetos esperan la utilización de un determinado servicio. Por otro lado, el término prioridad sugiere que el servicio no se proporciona únicamente aplicando el concepto primero en llegar primero en ser atendido, sino que cada objeto tiene asociada una prioridad basada en un criterio objetivo. Las colas de prioridades son una estructura ordenada que se utiliza para guardar elementos en un orden establecido. El orden para extraer un elemento de la estructura sigue estas reglas:
Se elige la cola no vacía que se corresponde con la mayor prioridad.
En la cola de mayor prioridad, los elementos se procesan según el orden de llegada: primero en entrar-primero en salir.
Una organización formada por colas de prioridades es el sistema de tiempo compartido, necesario para mantener una serie de procesos que esperan ser ejecutados por el procesador; cada proceso lleva asociado una prioridad. También las simulaciones de sucesos que ocurren en un tiempo discreto, como la atención de una fila de clientes en un sistema de n ventanillas de despacho de billetes de transporte, se realizan con una estructura de colas de prioridades.

Implementación:
Una forma simple de implementar una cola de prioridades es con una lista enlazada y ordenada según la prioridad. Otra alternativa consiste en un array o tabla de tantos elementos como prioridades estén previstas; cada elemento de la tabla guarda los objetos con la misma prioridad. Por último, se puede utilizar la estructura del montículo para guardar los componentes. La característica del montículo permite recuperar el elemento de máxima prioridad con una simple operación.

Los elementos de una cola de prioridades son objetos con la propiedad de ordenación, de tal forma que se puedan realizar comparaciones. Esto equivale a que dispongan de un atributo, de tipo ordinal, representando la prioridad del objeto.

viernes, 24 de octubre de 2014

Presentación: Listas

La siguiente presentación corresponde al tema de listas. Comenzamos con la definición, características y operaciones que se pueden realizar en estas estructuras, y después mostramos la clasificación de las mismas.
clic aqui

jueves, 23 de octubre de 2014

Análisis de listas

En el siguiente enlace podrán encontrar un análisis del tema listas.

clic aqui

Mapa conceptual de listas

El siguiente mapa conceptual contiene la definición, los componentes y la clasificación de la estructura lista, y señala las operaciones que se pueden realizar en ella.


miércoles, 22 de octubre de 2014

Tabla comparativa

En el siguiente enlace podrán encontrar una tabla comparativa de las estructuras de datos lineales y las no lineales.

clic aqui

Práctica 1

Realizar un programa que cree una lista de 10 elementos:

a) Declarar la lista como vacía.
b) Agregar nodo por nodo.
c) Visualizar la lista.

clic aqui

martes, 21 de octubre de 2014

Práctica 2

Realizar el programa explicado en el primer video (Listas Simplemente Enlazadas en  Java).

a) Cambiar el tipo de dato

clic aqui


lunes, 20 de octubre de 2014

Práctica 3

Realizar el programa explicado en el segundo video (Lista simple inserción al inicio y  final, impresión, NetBeans (java)).

a) Cambiar el tipo de dato

clic aqui

domingo, 19 de octubre de 2014

Práctica 4

Realizar lo siguiente:

a) Elaborar un programa que agregue y quite nodos, y que cada vez se añada o  elimine un nodo, se muestre el número de elementos que contiene la lista.
b) Elaborar un programa con una lista lineal que agregue y elimine nodos, y que el
valor del último de ellos sea 10.

clic aqui

viernes, 17 de octubre de 2014

Mapa mental de pilas

El siguiente mapa mental corresponde al tema de pilas, esta actividad fue realizada en el salón de clases.

jueves, 16 de octubre de 2014

Práctica 5

Implementar una pila con arreglos:

a) Agregar elementos
b) Eliminar elementos
c) Borrar elementos
d) Mostrar si es vacía o no

clic aqui

miércoles, 15 de octubre de 2014

Práctica 6

A partir de una frase dada, formar varias pilas:

a) Pila de consonantes
b) Pila de vocales
c) Pila de caracteres especiales
clic aqui

lunes, 13 de octubre de 2014

Práctica 7

Implementar un menú con las diferentes formas de implementar una cola.

a) Estática
b) Dinámica

clic aqui

domingo, 12 de octubre de 2014

Práctica 8

Crear un menú que implemente las cuatro estructuras lineales vistas:

a) Arreglos
b) Listas
c) Pilas
d) Colas

clic aqui

sábado, 11 de octubre de 2014

III UNIDAD. ESTRUCTURAS NO LINEALES

Objetivo: Aplicar las principales estructuras de datos no lineales.

Subtemas:

3.1. Recursividad.
3.2. Árboles.
3.3. Grafos.

viernes, 10 de octubre de 2014

Introducción

Las estructuras dinámicas lineales de datos tienen grandes ventajas de flexibilidad sobre las representaciones contiguas; sin embargo, tienen un punto débil: son listas secuenciales, es decir, están dispuestas de modo que es necesario moverse a través de ellas una posición a la vez (cada elemento tiene un siguiente elemento). Esta linealidad es típica de cadenas, de elementos que pertenecen a una sola dimensión: campos en un registro, entradas en una pila, entradas en una cola y de nodos en una lista enlazada simple. Las estructuras de datos no lineales resuelven los problemas que plantean las listas lineales y en las que cada elemento puede tener diferentes siguientes elementos.

Terminología

RECURSIVIDAD

La recursividad (recursión) es aquella propiedad que posee un método por la cual puede llamarse a sí mismo. Aunque se puede utilizar la recursividad como una alternativa a la iteración, una solución recursiva es, normalmente, menos eficiente en términos de tiempo de computadora que una solución iterativa, debido a las operaciones auxiliares que llevan consigo las invocaciones suplementarias a los métodos; sin embargo, en muchas circunstancias, el uso de la recursión permite a los programadores especificar soluciones naturales, sencillas, que serían, en caso contrario, difíciles de resolver. Por esta causa, la recursión es una herramienta poderosa e importante en la resolución de problemas y en la programación. Diversas técnicas algorítmicas utilizan la recursión, como los algoritmos divide y vence y los algoritmos de vuelta atrás.

ÁRBOLES

Intuitivamente, el concepto de árbol implica una estructura en la que los datos se organizan de modo que los elementos de información están relacionados entre sí a través de ramas. El árbol genealógico es el ejemplo típico más representativo del concepto de árbol general.
Un árbol consta de un conjunto finito de elementos, denominados nodos y de un conjunto finito de líneas dirigidas, denominadas ramas, que conectan los nodos. El número de ramas asociado con un nodo es el grado del nodo.
Un árbol es un conjunto de uno o más nodos tales que:
1. Hay un nodo diseñado especialmente llamado raíz.
2. Los nodos restantes se dividen en n ≥ 0 conjuntos disjuntos, T1 ... Tn, tal que cada uno de estos conjuntos es un árbol. A T1 ... Tn se les denomina subárboles del raíz.

Si un árbol no está vacío, entonces el primer nodo se llama raíz.

Además del nodo raíz, existen muchos términos utilizados en la descripción de los atributos de un árbol. En la Figura 13.3, el nodo A es el raíz. Utilizando el concepto de árboles genealógicos, un nodo puede ser considerado como padre si tiene nodos sucesores.
Estos nodos sucesores se llaman hijos. Por ejemplo, el nodo B es el padre de los hijos E y F. El padre de H es el nodo D. Un árbol puede representar diversas generaciones en la familia. Los hijos de un nodo y los hijos de estos hijos se llaman descendientes, y el padre y los abuelos de un nodo son sus ascendientes. Por ejemplo, los nodos E, F, I y J son descendientes de B. Cada nodo no raíz tiene un único padre y cada padre tiene cero o más nodos hijos. Dos o más nodos con el mismo padre se llaman hermanos. Un nodo sin hijos, tal como E, I, J, G y H se llama nodo hoja.
El nivel de un nodo es su distancia al nodo raíz. La raíz tiene una distancia cero de sí misma, por ello se dice que está en el nivel 0. Los hijos del nodo raíz están en el nivel 1, sus hijos están en el nivel 2, y así sucesivamente. Una cosa importante que se aprecia entre los niveles de nodos es la relación entre niveles y hermanos. Los hermanos están siempre al mismo nivel, pero no todos los nodos de un mismo nivel son necesariamente hermanos.

Los árboles se utilizan para representar fórmulas algebraicas, para organizar objetos en orden de tal forma que las búsquedas sean muy eficientes y en aplicaciones diversas tales como inteligencia artificial o algoritmos de cifrado. Casi todos los sistemas operativos almacenan sus archivos en árboles o estructuras similares a árboles. Además de las aplicaciones citadas, los árboles se utilizan en diseño de compiladores, procesado de texto y algoritmos de búsqueda.

GRAFOS

Un grafo es un conjunto de puntos (una estructura de datos) y un conjunto de líneas, cada una de las cuales une un punto a otro. Los puntos se llaman nodos o vértices y las líneas se llaman aristas o arcos.  Se representa con el par G = (V, A).
Un arco o arista representa una relación entre dos nodos, se representa por (u, v) siendo u, v el par de nodos.

§  Lazo: arista que une a un nodo(vértice) consigo mismo.
§  camino: secuencia de uno o mas aristas que conectan dos nodos.
§  La longitud de un camino es el número de aristas que comprende.
§  Se dice que dos vértices son adyacentes si hay una arista que los une.

Un grafo permite modelar relaciones arbitrarias entre objetos. Un grafo G = (V,A) es un par formado por un conjunto de vértices o nodos, V, y un conjunto de arcos o aristas, A.

Cada arco es el par (u,w), siendo u, w dos vértices relacionados.

jueves, 9 de octubre de 2014

Mapa conceptual de recursividad

El siguiente mapa conceptual corresponde al tema de recursividad, esta actividad fue realizada en equipo y en el salón de clases.



miércoles, 8 de octubre de 2014

Reporte de investigación de recursividad

El siguiente enlace corresponde a la investigación del tema "Recursividad". Contiene la definición, los tipos, las características y ejemplos del tema.

clic aqui

martes, 7 de octubre de 2014

Práctica 1

Crear un programa que calcule el factorial de un número:

a) De forma recursiva
b) De forma iterativa

clic aqui

lunes, 6 de octubre de 2014

Práctica 2

Crear un programa que determine el producto de dos números naturales:

a) De forma recursiva
b) De forma iterativa

domingo, 5 de octubre de 2014

Práctica 3

Crear un programa que implemente la serie de Fibonacci:

a) De forma recursiva
b) De forma iterativa

clic aqui

sábado, 4 de octubre de 2014

Práctica 4

Esta práctica fue realizada en el salón de clases, y consistió en crear un método recursivo para determinar el mínimo común divisor de dos números.


viernes, 3 de octubre de 2014

Práctica 5

Crear un programa que implemente las Torres de Hanoi.

Nota: Las Torres de Hanoi es un juego oriental que consta de tres columnas o  varillas llamadas origen, destino y auxiliar y una serie de discos de distintos tamaños.
Los discos están colocados de mayor a menor tamaño en la columna origen. El juego  consiste en pasar todos los discos a la columna destino y dejarlos como estaban de mayor a menor. (el más grande en la base, el más pequeño arriba)

Las reglas del juego son las siguientes:

 Sólo se puede mover un disco cada vez.
 Para cambiar los discos de lugar se pueden usar las tres columnas.
 Nunca deberá quedar un disco grande sobre un disco pequeño.

clic aqui

jueves, 2 de octubre de 2014

Práctica 6

Crear un programa que implemente las operaciones aritméticas básicas (haciendo uso de la recursividad):

a) Suma
b) Resta
c) Multiplicación
d) División

clic aqui

miércoles, 1 de octubre de 2014

Práctica 7

Crear un programa que implemente un menú con las siguientes opciones:

a) Potencia n de un número x.
b) Factorial de un número.
c) Serie de Fibonacci.
d) Producto de dos números naturales.

clic aqui

martes, 30 de septiembre de 2014

Práctica 8

Crear un programa que implemente el triángulo de Pascal de forma recursiva.

clic aqui

domingo, 28 de septiembre de 2014

Crucigrama de la terminología de árboles

La siguientes imágenes corresponden al crucigrama del tema de árboles, el cual contiene los conceptos básicos del tema.



sábado, 27 de septiembre de 2014

Cuestionario de árboles

Este cuestionario fue realizado en clase, y consistió en contestar un cuestionario de árboles.


viernes, 26 de septiembre de 2014

Actividad de árboles

En esta actividad realizada en el salón de clases, pusimos en práctica los recorridos en un árbol, y un ejercicio acerca de la teoría de conjuntos, la cual es muy utilizada en árboles y grafos.


jueves, 25 de septiembre de 2014

Árbol binario ordenado

Esta actividad consistió en crear un árbol binario ordenado a partir de una lista de números dados.


miércoles, 24 de septiembre de 2014

Práctica 9

Crear un programa en java que cumpla con los siguiente:

a) Crear un árbol binario de letras.
b) Explicar el método implementado

clic aqui

martes, 23 de septiembre de 2014

Práctica 10

Crear un árbol binario a partir de la expresión (a+b)/(c-d), e imprimir cualquiera de los tres recorridos.

clic aqui

lunes, 22 de septiembre de 2014

Práctica 11

Crear un árbol binario:

a) Los datos de cada nodo deben ser números
b) Numeración aleatoria
c) Ordenar los nodos (de forma ascendente o descendente)

clic aqui

sábado, 20 de septiembre de 2014

Presentación de grafos

Esta presentación fue realizada en equipo, y fue expuesta para el grupo. Corresponde al tema de grafos. En las diapositivas se incluyen los conceptos básicos de grafos y otros aspectos mas.

clic aqui

viernes, 19 de septiembre de 2014

Actividad: Características de un grafo

Esta actividad consistió en identificar las características y componentes de dos grafos dados.


jueves, 18 de septiembre de 2014

Actividad: Representación de grafos

Esta actividad consistió en crear la matriz de adyacencia de un grafo y la matriz de incidencia de otro. Dicha actividad fue realizada en el salón de clases.


miércoles, 17 de septiembre de 2014

Actividad: caminos de un grafo

Esta actividad fue realizada en el salón de clases e incluyó los caminos y la representación  de un par de grafos dados.




martes, 16 de septiembre de 2014

Actividad: Tipos de grafos

Esta actividad consistió en crear un cuadro sinóptico de los tipos de grafos, y fue realizada en el salón de clases.


Codificación de un grafo en java

En el siguiente enlace podrán encontrar un proyecto realizado en NetBeans IDE 7.4. Es un código muy sencillo que permite representar grafos mediante su matriz de adyacencia e incidencia. Fue realizado con arreglos así que conforma una estructura estática.

clic aqui

lunes, 15 de septiembre de 2014

IV UNIDAD. MÉTODOS DE ORDENAMIENTO Y BÚSQUEDA

Objetivo:
Clasificar técnicas para recuperación de información en dispositivos de almacenamiento primario y
secundario.
Gestionar datos de forma óptima, para facilitar su procesamiento y la toma de decisiones.

Subtemas:
4.1. Algoritmos de ordenamiento.
4.2. Métodos de búsqueda.
4.3. Recuperación de datos.

domingo, 14 de septiembre de 2014

Introducción

Las computadoras emplean una gran parte de su tiempo en operaciones de búsqueda, clasificación y mezcla de datos. Las operaciones de cálculo numérico  y sobre todo de gestión requieren normalmente operaciones de clasificación de los datos: ordenar fichas de clientes por orden alfabético, por direcciones o por código postal. Existen dos métodos de ordenación: interna (arreglos) y externa (archivos). Los arreglos se almacenan en la memoria interna o central, de acceso aleatorio y directo, y por ello su gestión es rápida. Los archivos se sitúan adecuadamente en dispositivos de almacenamiento externo que son más lentos y basados en dispositivos mecánicos.

Ordenación y, búsqueda y, en menor medida, intercalación son operaciones básicas en el campo de la documentación y en las que, según señalan las estadísticas, las computadoras emplean la mitad de su tiempo.

Métodos de ordenamiento

En las siguientes páginas podrán encontrar información acerca de las ventajas y desventajas de los algoritmos de ordenamiento.

clic aqui

clic aqui

sábado, 13 de septiembre de 2014

Búsqueda

Con mucha frecuencia, los programadores trabajan con grandes cantidades de datos almacenados en arrays y registros, por lo que será necesario determinar si un array contiene un valor que coincida con un cierto valor clave. El proceso de encontrar un elemento específico de un
array se denomina búsqueda. En esta sección se examinarán dos técnicas de búsqueda: lineal o secuencial, la técnica más sencilla, y binaria o dicotómica, la más eficiente.

Búsqueda secuencial
La búsqueda secuencial busca un elemento de una lista utilizando un valor destino llamado clave.
En una búsqueda secuencial (a veces llamada búsqueda lineal), los elementos de una lista o vector se exploran (se examinan) en secuencia, uno después de otro. La búsqueda secuencial es necesaria, por ejemplo, si se desea encontrar a la persona cuyo número de teléfono es 958-220000 en un directorio o listado telefónico de su ciudad. Los directorios de teléfonos están organizados alfabéticamente por el nombre del abonado en lugar de por números de teléfono, de modo que deben explorarse todos los números, uno después de otro, esperando encontrar el número 958-220000.
El algoritmo de búsqueda secuencial compara cada elemento del array con la clave de búsqueda. Dado que el array no está en un orden prefijado, es probable que el elemento a buscar pueda ser el primer elemento, el último elemento o cualquier otro. De promedio, al menos, el programa tendrá que comparar la clave de búsqueda con la mitad de los elementos del array. El método de búsqueda lineal funcionará bien con arrays pequeños o no ordenados.

Búsqueda binaria
La búsqueda secuencial se aplica a cualquier lista. Si la lista está ordenada, la búsqueda binaria proporciona una técnica de búsqueda mejorada. Una búsqueda binaria típica es la búsqueda de una palabra en un diccionario. Dada la palabra, se abre el libro cerca del principio, del centro o del final dependiendo de la primera letra de la palabra que busca. Se puede tener suerte y acertar con la página correcta pero, normalmente, no será así y el lector se mueve a la página anterior o posterior del libro. Por ejemplo, si la palabra comienza con "J" y se está en la "L" se mueve uno hacia atrás. El proceso continúa hasta que se encuentra la página buscada o hasta que se descubre que la palabra no está en la lista.

Una idea similar se aplica en la búsqueda en una lista ordenada. Se sitúa la lectura en el centro de la lista y se comprueba si nuestra clave coincide con el valor del elemento central. Si no se encuentra el valor de la clave, se sitúa uno en la mitad inferior o superior del elemento central de la lista. En general, si los datos de la lista están ordenados, se puede utilizar esa información para acortar el tiempo de búsqueda.

Práctica 1

En esta primera práctica elegimos un método de ordenamiento, lo analizamos y lo implementamos.
En mi caso, elegí el método de ordenación rápida (quicksort), el cual analizo, describo e implemento en java en el siguiente enlace.

clic aqui

viernes, 12 de septiembre de 2014

Práctica 2

Crear un programa que implemente el método de intercambio (Burbuja) con las siguientes características:

a) El tamaño y los elementos del vector a ordenar serán solicitados por teclado.
b) Contar con la opción de orden ascendente y descendente.
c) Implementar métodos para los requerimientos anteriores.

clic aqui

jueves, 11 de septiembre de 2014

Presentación del método de inserción