Vous êtes sur la page 1sur 61

Maestría en Electrónica y

Automatización
[Programación Avanzada Orientada a
Objetos]
Universidad Politécnica Salesiana

2018
Manejo de matrices
Resultados de Aprendizaje

 Comprende la utilidad de las estructuras


lineales
 Comprende la utilidad de las matrices de
una y dos dimensiones.
 Implementa algoritmos de ordenación

Maestría Profesional en Electrónica


10/26/2018 3
y Control - UPS
Introducción a la
programación
Contenido:
 Estructura de datos lineales
 Matrices unidimensionales
 Matrices bidimensionales
 Ordenamiento
 Búsqueda
 Operaciones con matrices

Maestría Profesional en Electrónica


10/26/2018 4
y Control - UPS
Estructuras de datos
Lineales
 Pilas
 Colas
 Colas dobles
 Listas
– Sus ítems se ordenan dependiendo de cómo se
agregan o eliminan.
– las estructuras lineales tienen dos extremos. A
veces, estos extremos se denominan “izquierda” y
“derecha” o en algunos casos “frente” y “final”.
También se les puede llamar “tope” y “fondo”.
Pila

 Pila push-down”.- es una colección ordenada de


ítems donde la adición de nuevos ítems y la
eliminación de ítems existentes siempre tienen
lugar en el mismo extremo. Tal extremo se
denomina el “tope”. El extremo opuesto se
denomina la “base”.

Ordenamiento LIFO
(Last in – firt out)
Pila

 Las pilas tienen una importancia


fundamental puesto que pueden usarse
para invertir el orden de los ítems. El orden
de inserción es el inverso del orden de
eliminación.
Creación de una Pila en
python

Revisar código en AVAC


Pila

 Pila() crea una nueva pila que está vacía. No necesita


parámetros y devuelve una pila vacía.
 incluir(item) agrega un nuevo ítem en el tope de la pila.
Requiere el ítem y no devuelve valor.
 extraer() elimina el ítem en el tope de la pila. No requiere
parámetros y devuelve el ítem. La pila se modifica.
 inspeccionar() devuelve el ítem en el tope de la pila pero no lo
elimina. No requiere parámetros. La pila no se modifica.
 estaVacia() comprueba si la pila está vacía. No requiere
parámetros y devuelve un valor booleano.
 tamano() devuelve el número de ítems en la pila. No requiere
parámetros y devuelve un entero.
Pila

 Si p es una pila que se ha creado y comienza vacía,


entonces la siguiente Tabla muestra los resultados de una
secuencia de operaciones de pila.
Pila

 Ejemplo1: Coincidencia de paréntesis

Ejemplo de paréntesis balanceados Ejemplo de paréntesis desbalanceados


Pila

 Use la estructura de datos de pila para crear un algoritmo de verificación de


paréntesis. Comience con una pila vacía, se procesan las cadenas de paréntesis
de izquierda a derecha.
 Si el símbolo es un paréntesis de apertura, incluirlo en la pila como señal de que
el correspondiente paréntesis de cierre debe aparecer posteriormente. Si, por
otro lado, un símbolo es un paréntesis de cierre, hacer una extracción de la pila.
 Los paréntesis continúan balanceados mientras sea posible extraer de la pila
para emparejar cada símbolo de cierre. Si en cualquier momento no hay símbolo
de apertura en la pila para emparejar un símbolo de cierre, la cadena no está
balanceada apropiadamente.
 Al final de la cadena, cuando todos los símbolos hayan sido procesados, la pila
debería estar vacía.
 Pruebe su algoritmo con la siguientes cadenas
– (3+(-3*x+2)*2+(2)^3)
– (3+(-3*x+2)*2+(2^3+6)
Revisar código en AVAC
Actividad 1

 Modifique el algoritmo anterior, para que no solo


verifique el balanceo de paréntesis, sino también
el balanceo de otros símbolos de apertura y
cierre. Como: corchetes, paréntesis y paréntesis.
 Pruebe el algoritmo, con las siguientes cadenas

• {{([][])}()}[[{{(())}}]][][][](){}
• ( [ ) ]( ( ( ) ] ) )[ { ( ) ]
Pila

 Ejemplo 2: Conversión de números base


decimal a binario
 23310 = 111010012
Pila

 Ejemplo 2: Conversión de números base


decimal a binario
 23310 = 111010012

Revisar código en AVAC


Actividad 2
 Modifique el algoritmo de la conversión binaria, para realizar la conversión
a cualquier base. En este caso a las más comunes como son la binaria, la
octal (base 8) y la hexadecimal (base 16). Llame a la función convertirBase,
esta debe tomar como parámetros un número decimal y cualquier base
entre 2, 8 y 16.
 Los residuos se envían a la pila hasta que el valor que esté siendo convertido
se vuelva 0. Se puede usar la misma técnica de construcción de cadena de
izquierda a derecha con un ligero cambio. Los números de base 2 a base 10
necesitan un máximo de 10 dígitos, así que los caracteres típicos para los
dígitos 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9 funcionan bien.
 Para el caso de la base en hexadecimal se usan los diez dígitos decimales
junto con los seis primeros caracteres del alfabeto para los 16 dígitos. Para
implementar esto, cree una cadena de dígitos que almacene los dígitos en
sus posiciones correspondientes. 0 está en la posición 0, 1 está en la
posición 1, A está en la posición 10, B está en la posición 11, y así
sucesivamente. Cuando se elimina un residuo de la pila, éste se puede
utilizar para indizar en la cadena de dígitos y el dígito resultante correcto
puede añadirse a la respuesta.
Cola

 Es una colección ordenada de ítems donde la


adición de nuevos ítems tiene lugar en uno de
los extremos, denominado “final”, y la
remoción de ítems existentes ocurre en el otro
extremo, comúnmente llamado “frente”. Un
elemento ingresa a la cola por el final y espera
hasta el momento que un ítem sea eliminado
para avanzar hacia el frente
Cola

 El ítem que que ha permanecido más


tiempo en la colección está en el frente.
Este principio de ordenamiento a veces se
denomina FIFO (first-in first-out),
también conocido como el primero en
llegar es el primero en ser atendido.
Creación de una Cola en
Python

Revisar código en AVAC


Cola

Las operaciones de cola están dadas a continuación.


 Cola() crea una nueva cola que está vacía. No
requiere parámetros y devuelve una cola vacía.
 agregar(item) agrega un nuevo ítem al final de la
cola. Requiere el ítem y no devuelve valor.
 avanzar() elimina el ítem del frente de la cola. No
require parámetros y devuelve el ítem que se
eliminó. La cola es modificada.
 estaVacia() verifica si la cola está vacía. No requiere
parámetros y devuelve un valor booleano.
 tamano() devuelve el número de ítems en la cola. No
requiere parámetros y devuelve un entero.
Cola
Si asumimos que c es una cola que se ha creado y está vacía, entonces la
siguiente tabla, muestra los resultados de una secuencia de operaciones de cola.
Cola

 Ejemplo1: Juego de la papa caliente

Revisar código en AVAC


Actividad 3

 Modifique el ejemplo uno para que N sea


un valor aleatorio.
Cola

 Ejemplo2: Tareas de impresión

Revisar código en AVAC


Doble Cola

 También conocida como cola de doble extremo, es una


colección ordenada de ítems similar a la cola. Tiene dos
extremos, frente y final, y los ítems permanecen
posicionados en la colección.
 Las operaciones de agregar y remover ítems no están
restringidas. Los ítems nuevos se pueden agregar en el
frente o en el final. Del mismo modo, los ítems
existentes se pueden eliminar de cualquier extremo.
 Es una estructura de datos hibrida que proporciona
todas las capacidades de las pilas y las colas
Creación de una Doble Cola
en Python

Revisar código en AVAC


Doble Cola

Las operaciones de doble cola están dadas a continuación.


 ColaDoble() Crea una cola doble nueva que está vacía. No necesita
parámetros y devuelve una cola doble vacía.
 agregarFrente(item) añade un nuevo ítem al frente de la cola doble.
Necesita el ítem y no devuelve nada.
 agregarFinal(item) añade un nuevo ítem en el final de la cola doble.
Necesita el ítem y no devuelve nada.
 removerFrente() elimina el ítem que está en el frente de la cola doble.
No necesita parámetros y devuelve el ítem. La cola doble se modifica.
 removerFinal() elimina el ítem que está al final de la cola doble. No
necesita parámetros y devuelve el ítem. La cola doble se modifica.
 estaVacia() comprueba si la cola doble está vacía. No necesita
parámetros y devuelve un valor booleano.
 tamano() devuelve el número de ítems en la cola doble. No necesita
parámetros y devuelve un entero.
Doble Cola
Si asumimos que d es una doble cola que se ha creado y está vacía, entonces la
siguiente tabla, muestra los resultados de una secuencia de operaciones de la
doble cola.
Doble Cola

 Ejemplo: Verificador de palíndromos

Revisar código en AVAC


Lista

 Es una colección de ítems donde cada ítem mantiene


una posición relativa con respecto a los otros. Más
específicamente, nos referiremos a este tipo de lista
como una lista no ordenada.
 Podemos considerar que la lista tiene un primer ítem,
un segundo ítem, un tercer ítem, y así sucesivamente.
También podemos referirnos al inicio de la lista (el
primer ítem) o al final de la lista (el último).
 Por simplicidad, asumiremos que las listas no pueden
contener ítems duplicados.
Métodos de la clase lista en
python
Métodos de agregación:
append("nuevo elemento"): Agrega un elemento al final de la lista
extend(otra_lista): Agrega varios elementos al final de la lista
insert(posición, "nuevo elemento"): Agrega un elemento en una posición determinada
Métodos de eliminación:
pop(): Eliminar el último elemento de la lista
pop(índice): Elimina un elemento por su índice
remove("valor"): Eliminar un elemento por su valor
Métodos de orden:
reverse(): Ordena una lista en reversa (invertir orden)
sort(): Ordena una lista en forma ascendente
sort(reverse=True): Ordena una lista en forma descendente
Métodos de búsqueda:
count(elemento): Cuenta la cantidad de apariciones elementos
index(elemento[, indice_inicio, indice_fin]): Obtener número de índice
Manejo de matrices

 Introducción:
– Concepto: Una matriz o arreglo (array en inglés),
es un tipo de estructura de datos que contiene un
conjunto finito de elementos homogéneos.
– Las matrices son arreglos k-dimensionales donde
se almacenan valores que pueden ser accedidos
por índices.
– Una matriz es almacenada en memoria RAM.
– Se utiliza principalmente para manejar una
cantidad limitada de datos de manera rápida.
Matrices

 Matrices unidimensionales Posición Edad

0 10
– Son matrices que almacenan datos 1 0
homogéneos en una sola dimensión. 2
3
23
45
– Son ejemplos de este tipo de estructura 4
5
98
7
de datos las pilas (LIFO) y las colas 6 61
7 45
(FIFO). 8 63
9 78
10 54
11 65
Ej.: [10, 0, 23, 45, 98, 7, 61, 45, 63, 78, 54] 12 68
13 12
0 1 2 3 4 5 6 7 8 9 10 14 35
15 39
Matrices

 Matrices bidimensionales
– Son matrices que almacenan datos
homogéneos en dos dimensiones.
Matriz

Las operaciones de una matriz están dadas a


continuación.
 llenarMatriz() Sobreescribe el valor de una celda.
 mostrarMatriz() Imprime los valores almacenados
en la matriz.
 getMatriz() Devuelve la matriz como objeto.
 getColumnas() Devuelve el número de columnas en
la matriz.
 getFilas() Devuelve el número de filas en la matriz.
 setMatriz(matriz) Sobreescribe la matriz
Matrices en Python

 La matrices no son una estructura propia


de Python. Simplemente, una matriz es
una lista de listas que se interpreta desde
el punto de vista matemático.
Revisar código en AVAC

 La librería Numpy, incluye el uso de la


clase array y matrix. Además de un
conjunto de métodos para realizar
operaciones entre matrices. Ejemplos
Operaciones entre matrices

Las operaciones entre matrices, siguen todas las


condiciones y premisas del Algebra Lineal
 Suma, resta
 Multiplicación
𝑃𝑖𝑗 = 𝑎𝑖𝑘 𝑏𝑘𝑗 con 𝑘 = 1,2, … , 𝑛
 Traspuesta
 Determinante
𝑑𝑒𝑡 𝐴 = (−1)𝜆 (𝑎1 𝛼1 + 𝑎2 𝛼2 + ⋯ + 𝑎𝑛 𝛼𝑛 )
𝛼1 𝛼2 ….𝛼𝑛 𝜖𝑃𝑛
𝟏
 −𝟏
Inversa 𝑨 = 𝑨𝒂𝒅𝒋 𝒕
𝒅𝒆𝒕 𝑨

Revisar código en AVAC


Actividad 4

Defina una función para la clase Matriz que


permita:
 Calcular la multiplicación de dos
matrices
 Calcular el determinante
 Calcular la matriz inversa
Búsqueda y Ordenación

Algoritmos para búsqueda en matrices


 Búsqueda secuencial
 Búsqueda binaria

Algoritmos para ordenamiento de matrices:


 Burbuja
 Selección
 Insersión
 Quicksort
Algoritmos de Búsqueda

 La búsqueda es el proceso algorítmico de


encontrar un ítem particular en una colección
de ítems.
 Una búsqueda normalmente devuelve True o
False según el ítem esté o no presente,
respectivamente.
 En ocasiones, el algoritmo se puede modificar
para devolver la posición donde se encuentre el
ítem.
 En python se usa el comando in
>>15 in [3,5,2,4,1]
Búsqueda Secuencial

 Cuando los ítems de datos se almacenan en una


colección, por ejemplo en una lista, decimos que tienen
una relación lineal o secuencial.
 Cada ítem de datos se almacena en una posición
relativa a los demás. En las listas de Python, estas
posiciones relativas son los valores de los índices de los
ítems individuales. Dado que estos valores de los
índices están ordenados, es posible recorrerlos en
secuencia. Este proceso da a la técnica de búsqueda
secuencial.

Revisar código en AVAC


Búsqueda Secuencial

¿Qué pasa si la lista está ordenada?


Actividad 5

Implemente el método de búsqueda


secuencial, cuando la lista está ordenada
Búsqueda Binaria

 Aprovecha el uso de listas ordenadas.


 Mejora la búsqueda reduciendo si campo de
búsqueda a la mitad

Revisar código en AVAC


Búsqueda Binaria

Análisis
𝑛
𝑖
=1
2
𝑛 = 2𝑖
𝑂 log(𝑛) log 𝑛
𝑖=
log(2)
Actividad 6

Implemente el método de búsqueda Binaria


de forma recursiva
Ordenamiento

Ordenar es el proceso de ubicar elementos de


una colección en algún orden. Por ejemplo, una
lista de palabras podría ordenarse
alfabéticamente o por longitud. Una lista de
ciudades podría ordenarse por población, por
área o por código postal.
Burbuja

Hace múltiples pasadas a


lo largo de una lista.
Compara los ítems
adyacentes e intercambia
los que no están en orden.
Cada pasada a lo largo de
la lista ubica el siguiente
valor más grande en su
lugar apropiado. En
esencia, cada ítem
“burbujea” hasta el lugar
al que pertenece.
Revisar código en AVAC
Burbuja

• Costo
computacional:
𝑶(𝒏𝟐 )

Método de la Burbuja
corto:
• Reconoce que una
lista está ordenda
si no realiza ni un
cambio
Actividad 7

Modifique el método de la Burbuja al


método de la Burbuja corto
Selección

 El ordenamiento por selección mejora el ordenamiento burbuja


haciendo un sólo intercambio por cada pasada a través de la
lista.
 Un ordenamiento por selección busca el valor mayor a medida
que hace una pasada y, después de completar la pasada, lo
pone en la ubicación correcta.
 Al igual que con un ordenamiento burbuja, después de la
primera pasada, el ítem mayor está en la ubicación correcta.
Después de la segunda pasada, el siguiente mayor está en su
ubicación. Este proceso continúa y requiere n−1 pasadas para
ordenar los n ítems, ya que el ítem final debe estar en su lugar
después de la (n−1)-ésima pasada.
Selección

• Costo
computacional:
𝑶(𝒏𝟐 )

Sin embargo realiza


menos operaciones
de asignación
Actividad 8

 Implemente el método de ordenación


por Selección
Inserción

 Siempre mantiene una


sublista ordenada en las
posiciones inferiores de la
lista. Cada ítem nuevo se
“inserta” de vuelta en la
sublista previa de manera
que la sublista ordenada
sea un ítem más larga.

• Costo
computacional:
𝑶(𝒏𝟐 )
Actividad 9

 Implemente el método de ordenación


por Inserción
Quick Sort

Primero selecciona un valor, que se denomina el


valor pivote.
Se puede elegir de diferentes formas, pero se debe
mantener la misma lógica durante todo el proceso.
En general el valor pivote, puede ser el primer ítem
de la lista.
El papel del valor pivote es ayudar a dividir la lista.
La posición real a la que pertenece el valor pivote en
la lista final ordenada, comúnmente
denominado punto de división, se utilizará para
dividir la lista para las llamadas posteriores a la
función de ordenamiento rápido.
Quick Sort

Revisar código en AVAC


CONCLUSIONES

 Se identificaron las estructuras básicas de datos


 Se identifican las principales propiedades y métodos de
matrices.
 Se comprenden, diseñan e implementan métodos de
ordenación y búsqueda

58
Preguntas
Bibliografía

 [1] Chase, J., & Lewis, J. (2006). Estructura de Datos con Java.
 [2] Aguilar, L. J. (2006). Estructuras de Datos en C. McGraw-Hill Interamericana.
 [3] Phillips, D. (2010). Python 3 Object Oriented Programming. Packt Publishing Ltd.
 [4] PROGRAMACION ORIENTADA A OBJETOS y PROGRAMACION ESTRUCTURADA,
Maria Perez (Author), 2014
 REVISA INFORMACIÓN ADICIONAL EN:
– Programación, algoritmos y ejercicios resueltos en JAVA, David Camacho, Pearson,
2003
– http://www.ups.edu.ec/web/guest/bibliotecas
– http://aleph.ups.edu.ec/F?func=find-b-0
– http://www.ups.edu.ec/web/guest/base-de-datos-bibliotecas
Autores del contenido

 Ing. Paulina Morillo (pmorillo@ups.edu.ec)

Vous aimerez peut-être aussi