Está en la página 1de 49

1

ALGORITMOS DE
ORDENAMIENTO Y BUSQUEDA
JESUS ANTONIO NEVAREZ ACEVES
Correo Institucional: jnevarez@uadec.edu.mx
ELABORADO POR JESUS A. NEVAREZ ACEVES
ELABORADO POR JESUS A. NEVAREZ ACEVES 2

UNIDAD 1

REPASO DE LAS ESTRUCTURAS DE DATOS


ELABORADO POR JESUS A. NEVAREZ ACEVES 3
UNIDAD 1
INTRODUCCION A LAS ESTRUCTURAS DE DATOS
TEMAS

 TEMARIO, CARTA, DESCRIPTIVA, RUBRICA DE EVALUACION


 ABSTRACCION
 TIPOS DE DATOS
 IMPORTANCIA DE LAS ESTRUCTURAS DE DATOS
 ESTRUCTURA DE DATOS LINEALES Y NO LINEALES
ELABORADO POR JESUS A. NEVAREZ ACEVES 4

REGLAS DE CLASE, TEMARIO, CARTA


DESCRIPTIVA, RUBRICA DE EVALUACIÓN
UNIDAD 1
ELABORADO POR JESUS A. NEVAREZ ACEVES 5
INTRODUCCION A LAS ESTRUCTURAS DE DATOS
TEMAS

 SESIONES DE CLASE 100% PRESENCIALES.


 Contar con conexión con internet para cualquier eventualidad
 Plataforma Block de Notas o Class NoteBook.
 Se compartirán documentos de presentaciones y documentos de trabajo, para que
el alumno pueda estudiarlas o darle seguimiento.
 Los alumnos tendrán su espacio donde pueden subir individualmente sus
anotaciones de clase, investigaciones, tareas, etc. De acuerdo a las fechas
establecidas para cada una de las tareas.
UNIDAD 1
ELABORADO POR JESUS A. NEVAREZ ACEVES 6
INTRODUCCION A LAS ESTRUCTURAS DE DATOS
TEMAS

 SESIONES DE CLASE 100% PRESENCIALES


 Importante contar con la plataforma Office 365 que les permita utilizar mejor las
herramientas de Teams y Class.
 Importante estar atento a clase y participar activamente en la misma, hacer las
tareas y las prácticas es requisito fundamental para comprender los temas y
resolver los exámenes.
 La labor de investigación después de clase también ayuda comprender los temas y
amplia el panorama de todo el potencial que tienen las Estructuras de Datos y los
Algoritmos de Ordenamiento y Búsqueda..
UNIDAD 1
ELABORADO POR JESUS A. NEVAREZ ACEVES 7
INTRODUCCION A LAS ESTRUCTURAS DE DATOS
TEMAS

 SESIONES DE CLASE 100% PRESENCIALES


 Se programan las sesiones de acuerdo al Calendario Escolar y el horario establecido para la materia.
 Se pasará lista por el maestro.
 Los exámenes teóricos y prácticos son en línea resueltos PRESENCIAL de manera
individual.
 Durante la clase levantar su mano preguntas o cualquier duda.
 Para dudas o comentarios también existe la opción del chat de Teams.
ELABORADO POR JESUS A. NEVAREZ ACEVES 8
UNIDAD 1
INTRODUCCION A LAS ESTRUCTURAS DE DATOS
TEMAS

 TEMARIO
UNIDAD 1
ELABORADO POR JESUS A. NEVAREZ ACEVES 9
INTRODUCCION A LAS ESTRUCTURAS DE DATOS
TEMAS
 RUBRICA DE EVALUACION
PRIMER EXAMEN PARCIAL 20%
 EXAMEN TEORICO 50%
 EXAMEN PRACTICO 50%
 
SEGUNDO EXAMEN PARCIAL 20%
 EXAMEN TEORICO 50%
 EXAMEN PRACTICO 50%
 
EXAMEN ORDINARIO 35%
 EXAMEN TEORICO 40%
 EXAMEN PRACTICO 60%
 
PROYECTO FINAL EN EQUIPO 15%
 
TAREAS Y ASISTENCIA 10%

SUMA FINAL 100%


ELABORADO POR JESUS A. NEVAREZ ACEVES 10

ABSTRACCION Y PROGRAMACIÓN ORIENTADA A


OBJETOS.
11

ABSTRACCION
Proceso mental que consiste en realzar
los detalles relevantes, es decir, los que
nos interesan en un momento sobre el
objeto de estudio, mientras se ignoran
los detalles irrelevantes.
Esto nos lleva a una simplificación del
problema, ya que:
 La cantidad de información que es
necesario manejar en un momento
dado disminuye y
 Podemos tratar cosas diferentes
como si fueran la misma

ELABORADO POR JESUS A. NEVAREZ ACEVES


12

ABSTRACCION
Este proceso de la mente humana es fundamental para
comprender y manejar complejos sistemas que
contienen múltiples detalles y relaciones.
Por ello, y dada la complejidad de los programas actuales, la
evolución de los paradigmas y lenguajes de programación
marca un uso creciente de la abstracción.

Cuando es un programa es pequeño (por ej. cientos de líneas de


código), se puede obtener una solución
basada en un único componente, en el que se pueden encontrar
todos los detalles de esta. Sin embargo,
cuando el tamaño del problema aumenta (por ej. miles o cientos
de miles de líneas de código), el ser humano es incapaz de
manejar tal cantidad de detalles y es necesaria una
descomposición en pequeñas partes independientes, que
denominaremos módulos y que unidos constituyen la solución
buscada.

ELABORADO POR JESUS A. NEVAREZ ACEVES


13

ABSTRACCION

Programación modular.
La programación modular constituye una metodología eficaz para
abordar problemas de cualquier tamaño y la abstracción es una forma
de llevarla a cabo.
Sin embargo, es necesario considerar detenidamente
las propiedades que deben cumplir para que la descomposición sea
útil:
1. Las conexiones de cada modulo con el resto del programa deben ser
mínimas, tanto en numero como en complejidad, para obtener
módulos mas independientes.
2. Cada modulo lleva a cabo una tarea bien definida en el nivel de
detalle correspondiente, para facilitar su solución y la independencia
con el resto del programa.

ELABORADO POR JESUS A. NEVAREZ ACEVES


14

ABSTRACCION

Programación modular.
3. La solución de cada subproblema debe ser general, para obtener
módulos que, siendo igualmente
útiles para el problema a resolver, puedan adaptarse a futuras
modificaciones o incluso para otros
problemas.
4. La solución de los subproblemas se puede combinar para resolver el
problema original.

Una correcta aplicación de esta metodología, facilitara en gran medida


la resolución del problema.

ELABORADO POR JESUS A. NEVAREZ ACEVES


15

ABSTRACCION

Programación modular.
 Facilita el desarrollo del programa al tener módulos
independientes en los que varios programadores pueden
trabajar en equipo.
 Facilita el mantenimiento:
 Facilita cambios y mejoras sobre uno o varios módulos
en particular.
 Facilita la prueba y depuración de software, al ser
verificados por módulo.
 Facilita la productividad evitando que un problema se haga
múltiples veces:
 Elimina redundancias.
 Permite reutilizar código.

ELABORADO POR JESUS A. NEVAREZ ACEVES


16

ABSTRACCION

OCULTAMIENTO DE INFORMACION
La abstracción permite estudiar complejos sistemas usando un método
jerárquico de sucesivos niveles. Con módulos con el menor número de
características, que deben exportar la menor cantidad de información,
usando:
 Parte Pública: Todas las partes que son visibles para los demás
módulos, el objetivo es que sean pocos y es la única información
necesaria y disponible para el uso correcto del módulo.
 Parte privada: Todos los detalles que no son visibles para los
demás módulos. Normalmente numerosos, no necesarios para
utilizar el módulo.

 Esto implica que la construcción del sistema a partir de módulos,


utilice el mínimo de características relevantes(parte pública)
ocultando las irrelevantes (parte privada).
 Entre mayor sea el ocultamiento disminuye la complejidad de los
módulos.
ELABORADO POR JESUS A. NEVAREZ ACEVES
17

ABSTRACCION

DOCUMENTACION
La naturaleza abstracta de una eficiente construcción de módulos
implica que el programador debe crear dos documentos diferentes:

 Especificación: Documento que presenta las características


sintácticas y semánticas que describen la parte pública. Unica y
necesaria para utilizar el módulo.
 Implementación: Presenta las características internas del
módulo, es necesario que siempre esté actualizado.

ELABORADO POR JESUS A. NEVAREZ ACEVES


18

ABSTRACCION
int IndiceMaximo (const int vector[], const int nelem)
{
ABSTRACCION FUNCIONAL int i,max;
max=0;
El primer tipo de abstracción que aparece en la historia es la for (i=1;i<nelem;i++)
FUNCIONAL o PROCEDIMENTAL que separa el propósito de una if (vector[max]<vector[i])
función de su implementación. Considera el QUE obviando el COMO max= i;
de la función. return max;
La función (ó método) de OPERACIÓN INDICEMAXIMO muestra que }
para usarlo solo requiero de saber un arreglo de n números enteros y la
cantidad de números del arreglo y el resultado que se obtiene, eso es Operación IndiceMaximo
PARTE PUBLICA en la PARTE PRIVADA corresponde al analista
programador detallar como lo hace.

ELABORADO POR JESUS A. NEVAREZ ACEVES


19

ABSTRACCION
int IndiceMaximo (const int vector[], const int nelem)
{
ABSTRACCION FUNCIONAL int i,max;
max=0;
Especificación for (i=1;i<nelem;i++)
if (vector[max]<vector[i])
Son los aspectos sintácticos y semánticos necesarios para usar la max= i;
función, procedimiento (ahora métodos), sin conocer los detalles (parte return max;
privada), como son: }
 La parte sintáctica es la forma correcta de hacer el llamado :
x=Indicemaximo(vector,nelem) Operación IndiceMaximo
 La parte semántica se refiere a las condiciones que son necesarias Precondiciones:
antes y después de haber realizado una llama a la función, esto se - Nelem >0
- Vector arreglo con nelementos
refiere a:
 Precondiciones: Condiciones que se deben dar antes de la
Postcondiciones:
ejecución de la función. - Devuelve la posición del primer maximo elemento del vector (
 Postcondiciones: Condiciones que serán ciertas después de i tal que v[i]<=v[j] para 0<=j<=nelem)
la ejecución de la función.

ELABORADO POR JESUS A. NEVAREZ ACEVES


20

ABSTRACCION int IndiceMaximo (const int vector[], const int


nelem)
{
int i,max;
ABSTRACCION FUNCIONAL max=0;
for (i=1;i<nelem;i++)
Especificación if (vector[max]<vector[i])
max= i;
return max;
 Parámetros: Explica el significado de cada parámetro de la función.
}
 Valor de retorno: Si existe, se incluye esta cláusula que describe el
valor que se devuelve en la función. int IndiceMaximo (const int vec[], const int nelem)
/
 Precondiciones: Requisitos para llamar a la función. Argumentos:
 Efecto: Describe el resultado que produce cuando se hace una vec: array 1-D que contiene los elementos donde
correcta llamada. encontrar
el valor de la posición del máximo valor.
 Excepciones: Si es necesario se puede incluir una sección que nelem: numero de elementos en el vector 'vec'.
describe el comportamiento de la función cuando se da una Devuelve:
circunstancia que no permite una exitosa ejecución. indice en el vector 'vec'
Precondiciones:
nelem>0
vec tiene al menos 'nelem' elementos
Efecto:
Busca el elemento mas grande en el vector 'vec' y
devuelve la
posicion de este, es decir, el valor i tal que v[i]<=v[j]
ELABORADO POR JESUS A. NEVAREZ ACEVES para 0<=j<nelem
/
21

ABSTRACCION
PARADIGMA

ELABORADO POR JESUS A. NEVAREZ ACEVES


ABSTRACCION
PROGRAMACION ORIENTADA A OBJETOS (POO)
El paradigma de la POO:
Definiciones de Paradigma
 “Un conjunto de conocimientos y creencias que forman una visión del mundo
(cosmovisión)”
 “Es una forma de representar y manipular el conocimiento. Dando un enfoque particular o
filosofía para la construcción de software”
 Un modelo, ejemplo a seguir o molde.

https://youtu.be/oBO01Cx_YwQ

ELABORADO POR JESUS A. NEVAREZ ACEVES


ABSTRACCION
PROGRAMACION ORIENTADA A OBJETOS (POO)
La tendencia de crear programas cada vez más grandes y complejos llevó a
los desarrolladores a crear una nueva forma de programar que les permita
crear sistemas de niveles empresariales y con reglas de negocios muy
complejas.
Para estas necesidades ya no bastaba la programación estructurada ni mucho
menos la programación lineal. Es así como aparece la programación orientada
a objetos (POO).
La POO viene de la evolución de la programación estructurada; básicamente la
POO simplifica la programación con la nueva filosofía y nuevos conceptos que
tiene. La POO se basa en la dividir el programa en pequeñas unidades lógicas
de código. A estas pequeñas unidades lógicas de código se les llama objetos.
Los objetos son unidades independientes que se comunican entre ellos
mediante mensajes.
ELABORADO POR JESUS A. NEVAREZ ACEVES
ABSTRACCION
PROGRAMACION ORIENTADA A OBJETOS (POO)
¿Cuáles son las ventajas de un lenguaje orientado a objetos?
 Fomenta la reutilización y extensión del código.
 Permite crear sistemas más complejos.
 Relacionar el sistema al mundo real.
 Facilita la creación de programas visuales.
 Construcción de prototipos
 Agiliza el desarrollo de software
 Facilita el trabajo en equipo
 Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales


se modela y representa el mundo real tan fielmente como sea posible.

ELABORADO POR JESUS A. NEVAREZ ACEVES


ABSTRACCION
PROGRAMACION ORIENTADA A OBJETOS (POO)
El modelo Orientado a Objetos
Para entender este modelo vamos a revisar 4 conceptos básicos:
 Objeto: Representa cualquier objeto del mundo real por lo cual todo objeto tiene dos
componentes: características y comportamiento. En software características es una o
mas variables y comportamiento son los métodos donde se aplican.
 

ELABORADO POR JESUS A. NEVAREZ ACEVES


ABSTRACCION
PROGRAMACION ORIENTADA A OBJETOS (POO)
El modelo Orientado a Objetos
Para entender este modelo vamos a revisar 4 conceptos básicos:
 Clases: La clase es un modelo o prototipo que define las variables y métodos
comunes a todos los objetos de cierta clase. También se puede mencionar que una
clase es una plantilla genérica para un conjunto de objetos de similares
características. Una clase define el estado y el comportamiento que todos los objetos
creados a partir de esa clase tendrán.
 

ELABORADO POR JESUS A. NEVAREZ ACEVES


ABSTRACCION
PROGRAMACION ORIENTADA A OBJETOS (POO)
El modelo Orientado a Objetos
Para entender este modelo vamos a revisar 4 conceptos básicos:
 Herencia: Consiste en que una clase puede heredar sus variables y métodos a varias
subclases (la clase que hereda es llamada superclase o clase padre). Esto significa
que una subclase, aparte de los atributos y métodos propios, tiene incorporados los
atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía
de herencia

ELABORADO POR JESUS A. NEVAREZ ACEVES


ABSTRACCION
PROGRAMACION ORIENTADA A OBJETOS (POO)
El modelo Orientado a Objetos
Para entender este modelo vamos a revisar 4 conceptos básicos:
 Envío de Mensajes: Un objeto es inútil si está aislado. El medio empleado para que
un objeto interactúe con otro son los mensajes. Hablando en términos un poco más
técnicos, los mensajes son invocaciones a los métodos de los objetos.

ELABORADO POR JESUS A. NEVAREZ ACEVES


ABSTRACCION
PROGRAMACION ORIENTADA A OBJETOS (POO)
El modelo Orientado a Objetos en JAVA

ELABORADO POR JESUS A. NEVAREZ ACEVES


TIPOS DE DATOS EN JAVA
Datos y tipos de datos
 Dato: Representación formal de hechos, conceptos o instrucciones adecuada para su
comunicación, interpretación y procesamiento por seres humanos o medios
automáticos.
 Tipo de dato: Especificación de un dominio (rango de valores) y de un válido de
operaciones a los que normalmente los traductores asocian un esquema de
representación interna propio.

ELABORADO POR JESUS A. NEVAREZ ACEVES


TIPOS DE DATOS EN JAVA
Datos y tipos de datos
 Clasificación de los tipos de datos:
 En función de quien los define:
 Tipos de datos estándar
 Tipos de datos definidos por el usuario
 En función de su representación interna:
 Tipos de datos escalares simples
 Tipos de datos estructurados

ELABORADO POR JESUS A. NEVAREZ ACEVES


TIPOS DE DATOS EN JAVA
Tipos de datos primitivos en Java

 Datos tipo numérico


 Números enteros: byte, short, int, long
 Números de punto flotante: float, doublé
 Datos de tipo carácter: char
 Datos de tipo booleano: boolean

ELABORADO POR JESUS A. NEVAREZ ACEVES


TIPOS DE DATOS EN JAVA
Operadores

ELABORADO POR JESUS A. NEVAREZ ACEVES


TIPOS DE DATOS EN JAVA
Código ASCII
https://www.codigosascii.com/

Código UNICODE
https://unicode-table.com/es/#basic-latin

ELABORADO POR JESUS A. NEVAREZ ACEVES


ELABORADO POR JESUS A. NEVAREZ ACEVES 35

TIPOS DE DATOS ABSTRACTOS (TAD) O


TIPOS ABSTRACTO DE DATOS (TDA)
ELABORADO POR JESUS A. NEVAREZ ACEVES
36

TIPO DE DATOS ABSTRACTOS (TAD)

Podemos encontrar varias definiciones para el


concepto de Tipo Abstracto de Datos (TAD)
TAD: Conjunto de Operaciones. Weiss, Data Structures andAlgorithms.
p.46.
TAD: Modelo matemático con una serie de operaciones definidas en ese
modelo. Aho, Hopcroft, Ullman, Data Structures and Algorithms. p.11.
TAD: Tipo de datos definido de forma única mediante un tipo y un
conjunto de operaciones definidas sobre el tipo. Hernández, Lázaro,
Dormido, Ros. Estructuras de Datos y Algoritmos. p.3.
ELABORADO POR JESUS A. NEVAREZ ACEVES
37

TIPO DE DATOS ABSTRACTOS (TAD)

Un Tipo Abstracto de Datos es una abstracción donde


se encuentran encapsulados los estados potenciales en los que se puede encontrar una
entidad de ese tipo y las operaciones que pueden realizarse sobre ella.
Abstraer: Separar por medio de una operación intelectual las cualidades de un objeto para
considerarlas aisladamente o para considerar el mismo objeto en su pura esencia o noción.
Como se ha mencionado, se trata de una abstracción.
No se incluyen detalles sobre la implementación de las operaciones.
Los TAD son independientes por completo de la implementación.
ELABORADO POR JESUS A. NEVAREZ ACEVES
38

TIPO DE DATOS ABSTRACTOS (TAD)

En muchos textos, pueden encontrarse confundidos los


términos TAD y Tipo de Datos, así como TAD y Estructura
de Datos.
Estructura de Datos: Conjunto de variables que se encuentran relacionadas.
Con Estructura de Datos, por tanto, nos referimos a la implementación física
de un TAD.
ELABORADO POR JESUS A. NEVAREZ ACEVES
39

TIPO DE DATOS ABSTRACTOS (TAD)

Atributos de un TAD
El encapsulamiento y la ocultación de información son atributos internos del
diseño.
Un TAD tiene estas propiedades:
– Encapsulamiento: La información referente a la definición del tipo y todas
las operaciones que pueden realizarse sobre el mismo se encuentran en el
mismo lugar.
– Ocultación de Información: La información acerca de la implementación
se encuentra oculta al usuario.
ELABORADO POR JESUS A. NEVAREZ ACEVES
40

TIPO DE DATOS ABSTRACTOS (TAD)

Implementación de un TAD
Es importante comprender la diferencia entre un TAD y su implementación
Las implementaciones no dejan de ser importantes, y su elección es crítica
Al final, el usuario no debe preocuparse de cómo está implementado un TAD.
Su única preocupación debe ser el uso del mismo
ELABORADO POR JESUS A. NEVAREZ ACEVES
41

TIPO DE DATOS ABSTRACTOS (TAD)

Implementación de un TAD (II)


¿Cómo debe implementarse un TAD?
Deben considerarse detalles acerca de la complejidad espacial de las
estructuras y temporal de las operaciones
Preguntas que debe formularse el programador:
– ¿Cómo será la estructura de datos? ¿Cómo crecerá?
– Según lo anterior y otras consideraciones ¿cuál será el
coste de una implementación u otra para cada operación?
ELABORADO POR JESUS A. NEVAREZ ACEVES
42

TIPO DE DATOS ABSTRACTOS (TAD)

TAD: Diseño e implementación


Debido a todo lo expuesto, el diseñador de un
TAD debe enfrentarse a tres pasos bien
distintos, pero íntimamente relacionados:
1. Análisis de datos y operaciones
2. Elección del TAD
3. Elección de la implementación
ELABORADO POR JESUS A. NEVAREZ ACEVES 43

IMPORTANCIA DE LAS ESTRUCTURAS DE DATOS


ELABORADO POR JESUS A. NEVAREZ ACEVES 44

IMPORTANCIA DE LAS ESTRUCTURAS DE DATOS

Las estructuras de datos no son ajenas a todo este proceso evolutivo de la


programación por el contrario, son la base para el desarrollo de programas
complejos que se diseñan cuidadosamente. Inicialmente los programas no eran
estructurados porque carecían de organización, estructuras de control y datos
complejos; estos fueron introducidos a medida que evolucionaban los lenguajes,
lo que permitió crear datos compuestos a partir de la agrupación de datos
simples por parte de los programadores.
Muchos algoritmos requieren una presentación apropiada de los datos para
lograr ser eficientes, esta presentación junto con las operaciones permitidas se
llama Estructura de Datos. (Mark Allen Weiss: 2006, 37).
ELABORADO POR JESUS A. NEVAREZ ACEVES 45

IMPORTANCIA DE LAS ESTRUCTURAS DE DATOS


Se usan en campos tan varios como:
 Administración de Almacenes
 Sistemas Operativos
 Lenguajes de programación
 Diseño de compiladores
 Redes y Telecomunicaciones
 Geografia
 Mapas Carreteros
 Administración de Empresas
 Etc.,
ELABORADO POR JESUS A. NEVAREZ ACEVES 46

IMPORTANCIA DE LAS ESTRUCTURAS DE DATOS


Las estructuras de datos se presentan en una gran variedad de acuerdo a varios
criterios entre los cuales están:
1. Por la flexibilidad en su crecimiento:
estáticas 
 porque una vez definida su dimensión no se pueden cambiar, se usan cuando el
volumen de operaciones sobre sus datos es bajo,
dinámicas 
 porque crecen o decrecen de acuerdo a los requerimientos(búsqueda inserción y
eliminación) de las operaciones que en este caso pueden ser considerables.
ELABORADO POR JESUS A. NEVAREZ ACEVES 47

ESTRUCTURAS DE DATOS LINEALES Y NO


LINEALES
ELABORADO POR JESUS A. NEVAREZ ACEVES
48

ESTRUCTURA DE DATOS LINEALES:


PRESENTAN LOS DATOS UNIDOS EN UNA SOLA SECUENCIA, SU USO ES DE
PROPÓSITO GENERAL, SOBRE TODO CUANDO NO HAY DEPENDENCIA
ENTRE SUS DATOS,

PILAS Ultimas entradas primeras salidas (LIFO)


COLAS Primeras entradas primeras salidas(FIFO)
LISTAS ENCADENADAS SIMPLES Linkedlist
LISTAS ENCADENADAS SIMPLES CIRCULARES
LISTAS DOBLEMENTE ENCADENADAS CIRCULARES
ELABORADO POR JESUS A. NEVAREZ ACEVES 49

ESTRUCTURA DE DATOS NO LINEALES:


PORQUE LOS DATOS SE PRESENTAN UNIDOS POR VARIAS SECUENCIAS, SE USAN
GENERALMENTE CUANDO HAY DEPENDENCIAS ENTRE UN DATO Y OTROS

ARBOLES
GRAFOS

También podría gustarte