0

Accessibility by W3C [EN]

jueves, 7 de abril de 2011 | Author: Alex Alvarez Gárciga | Etiquetas:


Accessibility: WCAG2 at a Glance

Perceivable
Operable
Understandable
Robust


0

CSS for Frontend Web Programmers [EN]

| Author: Alex Alvarez Gárciga | Etiquetas: ,

This is an obligatory reference for using valid css code practices  to en power cross-browser capability.
visit: http://css-infos.net it is very useful for me and this is my tribute.


0

Mi primer AFD [ES]

lunes, 4 de abril de 2011 | Author: Alex Alvarez Gárciga | Etiquetas: , ,

Un autómata finito determinista (abreviado AFD) es un autómata finito que además es un sistema determinista; es decir, para cada estado en que se encuentre el autómata, y con cualquier símbolo del alfabeto leído, existe siempre a lo más una transición posible desde ese estado y con ese símbolo.

La definición formal y los conceptos de autómata finito y sistema determinista pueden buscarlos en la  Wikipedia ya que no es mi objetivo explicar aquí tales conocimientos, además no creo que sea el más capacitado para ello.

Pero lo cierto es que estudiando para la asignatura de "Compiladores" me he topado con esta herramienta que ahora veo que me será útil, de seguro, más de una vez.

Ya para ir entrando en calor, quiero comentar sobre mi primer trastazo con esto de lo que les hablaba.

Resulta ser de un ejercicio donde me piden asegurar que una cadena de texto cumpla con las siguientes condiciones: siendo así la primera, que mi alfabeto válido está compuesto solo por el conjunto de estos símbolos (a, b, c, d), cumpliéndose obligatoriamente que la cantidad válida para los símbolos a y b deben ser pares, mientras que los restantes c y d pueden ser usados sin restricción alguna. 

Cadenas que cumplan con tal condición serian algunas como estas:
  1. cd
  2. acda
  3. abab
  4. aaccdbaba
Para resolver tal problema mi AFD ha quedado como sigue:
Fig 1. AFD que reconoce las cadenas de texto con las características descritas anteriormente.
Un poco feo, pero espero que les llegue a todos la idea.

Después solo restó programarlo, que para el caso me auxilie de Java como lenguaje. Aquí les dejo la clase AFD que implementa este autómata:

package afdexample;

/**
 *
 * @author Alex Alvarez Garciga
 */
enum Status {q0q1q2q3}

public class AFD {

    public Boolean Check(String text){
        Status _status = Status.q0;
        for (int i = 0; i < text.length(); i++) {

            switch(_status){
                case q0:
                        switch(text.charAt(i)){
                            case 'c':
                            case 'd':
                                    _status = Status.q0;
                                break;
                            case 'a':
                                    _status = Status.q1;
                                break;
                            case 'b':
                                    _status = Status.q2;
                                break;
                            default:
                                return false;
                        }
                    break;
                case q1:
                        switch(text.charAt(i)){
                            case 'c':
                            case 'd':
                                    _status = Status.q1;
                                break;
                            case 'a':
                                    _status = Status.q0;
                                break;
                            case 'b':
                                    _status = Status.q3;
                                break;
                            default:
                                return false;
                        }
                    break;
                case q2:
                        switch(text.charAt(i)){
                            case 'c':
                            case 'd':
                                    _status = Status.q2;
                                break;
                            case 'a':
                                    _status = Status.q3;
                                break;
                            case 'b':
                                    _status = Status.q0;
                                break;
                            default:
                                return false;
                        }
                    break;
                case q3:
                        switch(text.charAt(i)){
                            case 'c':
                            case 'd':
                                    _status = Status.q3;
                                break;
                            case 'a':
                                    _status = Status.q2;
                                break;
                            case 'b':
                                    _status = Status.q1;
                                break;
                            default:
                                return false;
                        }
                    break;
            }
        }
        return _status == Status.q0;
    }
}


0

Concepto Clásico de Probabilidad [ES]

| Author: Alex Alvarez Gárciga | Etiquetas: ,

La primera vez que a mi ha llegado referencias de las probabilidades como un estudio y herramienta matemática ha sido con el anime Death Note. Por ese entonces deseaba dominar tal conocimiento para poder usarlo como lo hacían sus personajes principales, creo que todos los que han visto la serie saben de lo que hablo.

Pero ahora que realmente me ha tocado estudiar el tema, empiezo a darle el respeto que merece.

Primero quiero empezar hablando sobre el Concepto Clásico de Probabilidad. Solamente utilizado cuando todos los resultados son equi-probables. Donde decimos que:

Si hay n resultados igualmente posibles, todos los cuales ocurren y son considerados favorables o como un éxito, entonces la probabilidad de un éxito esta dada por s/n.

Para ello los términos "favorables" y "éxito" son usados de manera vaga: "favorable" puede ser que alguien se lastime y "éxito" que que una persona fallezca.

Ejemplo:

¿Cuál es la probabilidad de sacar un as de un paquete barajado de 52 Naipes?

Solución:

Hay s = 4 ases entre los n = 52 naipes; así que se tiene: s/n = 4 / 52 = 1 / 13 = 0.08 aproximadamente. Una probabilidad muy baja realmente.


Pero este concepto clásico tiene un inconveniente serio. Resultando en su limitada aplicación, ya que existen situaciones en que las posibilidades no pueden considerarse todas como igualmente probables y estas son las que más. Sería el caso, por ejemplo, si quisiéramos saber si lloverá mañana o bien si el lanzamiento de un dardo tendrá éxito.

Por eso entre las diversas nociones de probabilidad, la más ampliamente utilizada es la interpretación de probabilidad como frecuencia relativa. Según la cual

la probabilidad de un evento (que suceda o resulte) es la proporción de veces que el evento sucedería en una serie prolongada de experimentos repetidos.

Ejemplo:

Si 3 de 20 neumáticos están defectuosos y 4 de ellos se escogen aleatoriamente (cada neumático tiene la misma posibilidad de ser seleccionado) ¿Cuál es la probabilidad de que solamente uno de los defectuosos sea escogido?

Solución:

Primero recordemos que nCr n! / r! (n-r)! , entonces tenemos que hay 20C4 = 4,845 formas igualmente probables de elegir 4 de los 20 neumáticos; así que n = 4,845.

El numero de resultados favorables es el numero de formas en las cuales uno de los neumáticos defectuosos y 3 de los neumáticos en buen estado pueden escogerse. Así s = 3C1 x 17C3 = 3 x 680 = 2,040. Se sigue entonces que la probabilidad es s/n = 2,040 / 4,845 = 8 / 19 o aproximadamente 0.42.

Nota: nCr se trata de otro concepto ya tratado en uno de mis artículos anteriores Permutaciones y Combinaciones


0

Permutaciones y Combinaciones [ES]

| Author: Alex Alvarez Gárciga | Etiquetas: ,

En general, si objetos se eligen de un conjunto de n objetos distintos, cualquier arreglo u ordenación de ellos se denomina permutación.

El número de permutaciones de r objetos escogidos de un conjunto de n objetos distintos es
nPr = n (n-1) (n-2) ... (n-r+1)
o, en notación factorial,
nPr = n! / (n-r)!
Existen muchos problemas en los cuales debemos encontrar el número de formas en que r objetos pueden elegiste de un conjunto de n objetos, pero no nos interesa el orden en que se realiza la elección. Para ello necesitamos conocer el numero de combinaciones de n objetos cuando se toman r a la vez denotado por nCr obtenida de dividir nPr entre r!.
El número de formas en que r objetos pueden elegirse de un conjunto de n objetos distintos es
nCr = n (n-1) (n-2) ... (n-r+1) / r!
o, en notación factorial
nCr = n! / r! (n-r)!
Ejemplo:

¿En cuantas formas diferentes puede el jefe de un proyecto de software elegir a dos analistas entre siete aspirantes, y tres programadores entre nueve candidatos?
Solución:

Los analistas pueden ser elegidos en 7C2 = 21 formas,
los programadores pueden elegirse en 9C3 = 84 formas;
así que la elección completa puede realizarse en 21 x 84 = 1,764 formas.