Introducción a los algoritmos

551 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
551
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introducción a los algoritmos

  1. 1. VariableEn programación, las variables son estructuras de datos que, como su nombreindica, pueden cambiar de contenido a lo largo de la ejecución de un programa.Una variable corresponde a un área reservada en la memoria principal delordenador pudiendo ser de longitud: • Fija.- Cuando el tamaño de la misma no variará a lo largo de la ejecución del programa. Todas las variables, sean del tipo que sean tienen longitud fija, salvo algunas excepciones — como las colecciones de otras variables (arrays) o las cadenas. • Variable.- Cuando el tamaño de la misma puede variar a lo largo de la ejecución. Típicamente colecciones de datos. Tipos de datosDebido a que las variables contienen o apuntan a valores de tipos determinados,las operaciones sobre las mismas y el dominio de sus propios valores estándeterminadas por el tipo de datos en cuestión. Algunos tipos de datos usados: • Tipo de dato lógico. • Tipo de dato entero. • Tipo de dato de coma flotante (real, con decimales). • Tipo de dato carácter. • Tipo de dato cadenaVariables y paso de parámetros a subalgoritmosLas variables pueden ser intercambiadas entre rutinas, por valor y porreferencia: • Por valor.- Se copia el valor (el dato) de la variable en la zona de la pila de llamadas —de ámbito local— que corresponde a la nueva subrutina llamada. Por tanto, esta subrutina obtiene dicho valor pero no puede modificar la variable original. Esto significa que si la variable sufre alteraciones dentro de esta rutina, para poder acceder a dichas modificaciones al finalizar, deberá devolver el nuevo valor de la misma. Si no se realiza esta operación, el valor de la variable será exactamente el mismo que tenía antes de pasar por la función. • Por referencia.- No se pasa el valor directamente de la variable, si no una referencia o puntero a la misma —que contiene la dirección de la zona de memoria donde se aloja el contenido—, de tal modo que se opera directamente sobre la zona de memoria que la contiene, lo cual implica que las modificaciones que sufra serán accesibles a posteriori.
  2. 2. Almacenamiento de variables en memoriaLas variables se representan con identificadores que hacen referencia a un lugarde la memoria del programa en donde se almacena un dato. Una variable estáasociada a un tipo de datos, el cual y en función del tamaño del mismodetermina la cantidad de bytes que serán necesarios para almacenar la variable.En el caso de colecciones y al contrario que con el resto de tipo de datos, yasean primitivos u objetos complejos, la memoria asignada a almacenar talesvariables no se conoce de antemano, lo cual lleva a establecer políticas dereserva de memoria: • Reserva fija de memoria.- Implica predeterminar la cantidad de memoria que se asignará a la colección. Es una política extremadamente rígida, ya que llegados al final de la zona de memoria no se podrían almacenar nuevos elementos. • Reserva variable de memoria.- Se dedica una zona de memoria, pudiendo ser de un tamaño predeterminado o no, y en caso de sobrepasarse dicha zona de memoria se vuelve a asignar otra zona, contigua o no, para impedir la restricción mencionada arriba.ÁmbitoRespecto al ámbito de una variable, éste puede ser: • Local: Cuando la misma sólo es accesible desde un único procedimiento hijo, no pudiendo ser leída o modificada desde otro procedimiento hermano o desde el propio procedimiento padre. Es posible declarar variables en bloques de condición, bucles, etc de tal modo que sólo pueda accederse a ellas en el propio bloque. • Global: Cuando la misma es accesible tanto desde rutinas o macros de la aplicación, como en todos los procedimientos y funciones de la misma. Si bien es cierto, que de una forma básica, se puede definir el ámbito de las variables de la forma expuesta más arriba, existen grados de globalidad de las mismas, pudiendo ser accesibles desde unos puntos u otros, o incluso pudiendo ser accesibles entre aplicaciones distintas, llegando al caso de la superglobalidad.Tipo de dato lógicoEl tipo de dato lógico o booleano es en computación aquel que puederepresentar valores de lógica binaria, esto es, valores que representen falso overdadero. Se utiliza normalmente en la programación, estadística, electrónica,matemáticas (Álgebra booleana), etc...
  3. 3. Para generar un dato o valor lógico a partir de otros tipos de datos, típicamente,se emplean los operadores relacionales (u operadores de relación), por ejemplo:0 es igual a falso y 1 es igual a verdadero • (3>2)= 1 = verdadero • (7>9)= 0 = falsoUna vez se dispone de uno o varios datos de tipo booleano, estos se puedencombinar en expresiones lógicas mediante los operadores lógicos (AND, OR,NOT, ...). Un ejemplo de este tipo de expresiones serían: • verdadero AND falso --> falso • falso OR verdadero --> verdadero • NOT verdadero --> falsoFunción booleanaSe denomina función lógica o booleana a aquella función matemática cuyasvariables son binarias y están unidas mediante los operadores del álgebra deBoole suma lógica (+), producto lógico (·) o negación(). Modos de representaciónExisten distintas formas de representar una función lógica, entre las quepodemos destacar las siguientes: • Algebraica • Por tabla de verdad • Numérica • GráficaEl uso de una u otra, como veremos, dependerá de las necesidades concretasen cada caso.AlgebraicaSe utiliza cuando se realizan operaciones algebraicas. A continuación se ofreceun ejemplo con distintas formas en las que se puede expresar algebraicamenteuna misma función de tres variables. a) F = [(A + BC’)’ + ABC]’ + AB’C b) F = A’BC’ + AB’C’ + AB’C + ABC’ c) F = (A + B + C)(A + B + C’)(A + B’ + C’)(A’ + B’ + C’) d) F = BC’ + AB’ e) F = (A + B)(B’ + C’) f) F = [(BC’)’ · (AB’)’]’
  4. 4. g) F = [(A + B)’ + (B’ + C’)’]’La expresión a) puede proceder de un problema lógico planteado o del paso deunas especificaciones a lenguaje algebraico. Las formas b) y c) reciben elnombre expresiones canónicas: de suma de productos (sum-of-products, SOP,en inglés), la b), y de productos de sumas (product-of-sums, POS, en inglés), lac); su característica principal es la aparición de cada una de las variables (A, B yC) en cada uno de los sumandos o productos. Las d) y e) son funcionessimplificadas, esto es, reducidas a su mínima expresión. Las dos últimasexpresiones tienen la particularidad de que exclusivamente utiliza funciones NO-Y, la f), o funciones NO-O, la g).Por tabla de verdadUna tabla de verdad contiene todos los valores posibles de una función lógicadependiendo del valor de sus variables. El número de combinaciones posiblespara una función de n variables vendrá dado por 2n. Una función lógica puederepresentarse algebraicamente de distintas formas como acabamos de ver, perosólo tiene una tabla de verdad. La siguiente tabla corresponde a la función lógicadel punto anterior. A BCF 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0La forma más cómodo para ver la equivalencia entre una tabla de verdad y unaexpresión algebraica es cuando esta última se da en su forma canónica. Así, lafunción canónica de suma de productos F = A’BC’ + AB’C’ + AB’C + ABC’
  5. 5. nos indica que será 1 cuando lo sea uno de sus sumandos, lo que significa quetendrá por lo tanto cuatro combinaciones que lo serán (010 para A’BC’, 100 paraAB’C’, 101 para AB’C y 110 para ABC’) siendo el resto de combinaciones 0. Conla función canónica de producto de sumas se puede razonar de forma análoga,pero en este caso observando que la función será 0 cuando lo sea uno de susproductos.También es fácil obtener la tabla de verdad a partir de la función simplificada,pero no así a la inversa.NuméricaLa representación numérica es una forma simplificada de representar lasexpresiones canónicas. Si consideramos el criterio de sustituir una variable sinnegar por un 1 y una negada por un 0, podremos representar el término, ya seauna suma o un producto, por un número decimal equivalente al valor binario dela combinación. Por ejemplo, los siguientes términos canónicos se representarándel siguiente modo (observe que se toma el orden de A a D como de mayor amenor peso): AB’CD = 10112 = 1110 A’ + B + C’ + D’ = 01002 = 410Para representar una función canónica en suma de productos utilizaremos elsímbolo Σn (sigma) y en producto de sumas Πn (pi), donde n indicará el númerode variables. Así, la representación numérica correspondiente a la tabla deverdad del punto anterior quedará como: F = Σ3(2, 4, 5, 6) = Π3(0, 1, 3, 7)Matemáticamente se demuestra, que para todo término i de una función, secumple la siguiente ecuación: F = [Σn(i)] = Πn(2n-1-i )A modo de ejemplo se puede utilizar esta igualdad para obtener el producto desumas a partir de la suma de productos del ejemplo anterior: F = Σ3(2, 4, 5, 6) = [Σ3(2, 4, 5, 6)] = [Σ3(0, 1, 3, 7)] = Π3(0, 4, 6, 7)GráficaLa representación gráfica es la que se utiliza en circuitos y esquemaselectrónicos. En la siguiente figura se representan gráficamente dos funcionesalgebraicas, una con símbolos no normalizados, superior, y la otra connormalizados, inferior (véanse los símbolos de las puertas lógicas)
  6. 6. Representación gráfica de dos funciones lógicasMétodos de simplificaciónPor simplificación de una función lógica se entiende la obtención de su mínimaexpresión. A la hora de implementar físicamente una función lógica se suelesimplificar para reducir así la complejidad del circuito.A continuación se indican los modos más usuales de simplificar una funciónlógica.AlgebraicoPara la simplificación por este método no sólo bastará con conocer todas laspropiedades y teoremas del álgebra de Boole, además se debe desarrollar unacierta habilidad lógico-matemática que se adquiere fundamentalmente con laexperiencia.Gráfico de KarnaughEste método consiste en formar diagramas de 2 n cuadros, siendo n el número devariables. Cada cuadro representa una de las diferentes combinaciones posibles
  7. 7. y se disponen de tal forma que se puede pasar de un cuadro a otro en lasdirecciones horizontal o vertical, cambiando únicamente una variable, ya sea enforma negada o directa.Este método se emplea fundamentalmente para simplificar funciones de hastacuatro variables. Para un número superior utilizan otros métodos como elnumérico. A continuación pueden observarse los diagramas, también llamadosmapas de Karnaugh, para dos, tres y cuatro variables.Mapas de Karnaugh para dos, tres y cuatro variablesEs una práctica común numerar cada celda con el número decimalcorrespondiente al término canónico que albergue, para facilitar el trabajo a lahora de plasmar una función canónica.Para simplificar una función lógica por el método de Karnaugh se seguirán lossiguientes pasos:1º) Se dibuja el diagrama correspondiente al número de variables de la función asimplificar.2º) Se coloca un 1 en los cuadros correspondientes a los términos canónicosque forman parte de la función.3º) Se agrupan mediante lazos los unos de casillas adyacentes siguiendoestrictamente las siguientes reglas: a) Dos casillas son adyacentes cuando se diferencian únicamente en el estado de una sola variable. b) Cada lazo debe contener el mayor número de unos posible, siempre que dicho número sea potencia de dos (1, 2, 4, etc.) c) Los lazos pueden quedar superpuestos y no importa que haya cuadrículas que pertenezcan a dos o más lazos diferentes. d) Se debe tratar de conseguir el menor número de lazos con el mayor número de unos posible.
  8. 8. 4º) La función simplificada tendrá tantos términos como lazos posea eldiagrama. Cada término se obtiene eliminando la o las variables que cambien deestado en el mismo lazo.A modo de ejemplo se realizan dos simplificaciones de una misma función apartir de sus dos formas canónicas: F = Σ3(0,2,3,4,7) = Π3(1,2,6)De acuerdo con los pasos vistos anteriormente, el diagrama de cada funciónquedará del siguiente modo:Simplificación de una función de tres variablesLa función simplificada tendrá tres sumandos en un caso y dos productos en elotro. Si nos fijamos en el mapa correspondiente a la suma de productos,observamos que en el lazo 1 cambia la variable A (en la celda 0 es negada y enla 4 directa), en el lazo 2 es la C y en el lazo 3 vuelve a ser A. por lo tanto, laecuación simplificada es: F = B’C’ + A’B + BCRazonando de modo similar en el mapa de productos de sumas, nos quedará: F = (B + C’)(A’ + B’ + C)Numérico de Quine-McCluskeyEl algoritmo Quine-McCluskey permite la simplificación de funciones lógicas decualquier número de variables y es el que se utiliza para diseñar aplicacionesinformáticas en las que se necesite obtener funciones simplificadas.
  9. 9. A continuación se indican los pasos a seguir en este método a partir de unejemplo.1º) Se expresa la función a simplificar en su forma canónica de suma deproductos.Sea la siguiente función a simplificar: F = S4 (0,1,2,3,5,9,11,12,13,15)2º) Se forma una tabla con el valor decimal de la combinación, el estado de lasvariables y el índice (número de unos que contiene el estado de las variables). Comb. Estado Índice 0 0000 0 1 0001 1 2 0010 1 3 0011 2 5 0101 2 9 1001 2 11 1011 3 12 1100 2 13 1101 3 15 1111 43º) Se agrupan las combinaciones cuyos estados difieren en una sola variable,sustituyéndola por un guión bajo (_). Las combinaciones utilizadas se marcancon un aspa (X). Hay que fijarse en las combinaciones cuya diferencia entre susrespectivos índices es la unidad.
  10. 10. Agrupación de las combinaciones4º) Se repite el proceso anterior las veces que sean necesarias y se vaneliminando estados idénticos.Nueva agrupación de las combinaciones5º) Se forma una tabla con las combinaciones y jodance finales y las noagrupadas. Se toman como filas las combinaciones finales y las no agrupadas ycomo columnas los valores decimales de dichas combinaciones. Cada celda quecontenga el valor decimal de una combinación se marca con un aspa. Acontinuación nos fijamos en aquellas columnas con una sola aspa; suscombinaciones serán esenciales. Finalmente se toman aquellas combinacionesde los valores decimales no seleccionados, teniendo precaución de no tomaraquellas combinaciones cuyos valores decimales hayan sido ya tomados enotras combinaciones. La función simplificada final viene dada por lascombinaciones esenciales y estas últimas.
  11. 11. Función incompletaHasta ahora todas las funciones estudiadas tienen definido un valor lógico, 0 ó 1,para cada una de las posibles combinaciones. Estas funciones se denominancompletas o totalmente definidas. También existen funciones con una o variascombinaciones no definidas, llamadas funciones incompletas. Esta situaciónpuede deberse por las dos causas siguientes: 1. Hay combinaciones de entrada que no existen, por lo que a la salida se le puede asignar indistintamente el valor 0 o el 1. 2. En ciertas combinaciones de entrada la salida del sistema lógico está inhibida, siendo por lo tanto su valor indiferente.En la tabla de verdad de una función incompleta, los términos indiferentes sedesignan mediante una equis (X). En cuanto a la forma canónica se separan lostérminos definidos de los que no lo son (indicados mediante el símbolo φ).A la hora de simplificar una función incompleta, los términos indiferentes serviráncomo “comodines” a la hora de tomar lo lazos, esto es, si nos interesa que seaun 1 porque así el lazo es mayor, lo tomaremos como 1, y en caso contrariocomo 0.

×