Buscar este blog

miércoles, 25 de mayo de 2016

Algoritmo de conversión de expresión regular a autómata finito no determinista con transiciones vacías.


Para obtener el AFND-transiciones vacías equivalente de la expresión regular se tienen en cuenta las tres operaciones básicas: concatenación, repetición y alternativas. El método utilizado lo describió por primera vez J. E. Thompson en su documento de 1968 del MCCA.

El AFND-e de una expresión regular se construye a partir del AFND parcial de cada subexpresión con una construcción diferente para cada operador básico. Después se unen estas subexpresiones con transiciones vacías. El AFND-e siempre contiene un estado inicial y otro final.

La expresión ab se divide en dos subexpresiones a y b. Este es un ejemplo simple de concatenación en el cual no aparecen las transiciones vacías. Aparecen cuando se utiliza el operador paréntesis:





La expresión a|b se divide también en dos subexpresionesa y b. El operador que la contiene indica que existe una alternativa. Apareciendo las transiciones vacías para unir estas dos expresiones:



 La expresión regular a|b|c tiene dos formas de representar el autómata:

• Dividiendo esta expresión en tres subexpresiones a, b, c



• Dividiendo la expresión por primera vez, en dos subexpresionesa y b|c; después se divide b|c en dos subexpresiones b y c.





La expresión regular a?:





a*:




a+




Un ejemplo que se puede detallar y analizar sería el siguiente. Llamaremos a los pasos iteraciones:

Expresión regular: ad|ad*

En la Iteración 1: se divide la expresión en dos subexpresiones y se aplica la operación alternativa:



Iteración 2: se aplica la operación de concatenación a los nodos (q1, q3) y (q2, q4):




Iteración 3 y final: se aplica la operación de repetición a la subexpresión d* en el nodo (q7, q4), obteniendo el siguiente AFND-e equivalente:



Recomendacion: Leer:

Expresiones regulares a partir del autómata finito equivalente: Parte I 

Expresiones regulares a partir del autómata finito equivalente: Parte II

Referencias Bibliográficas 

1. Pérez Martínez, Abel. ERAFPLN. 2009.
2. PÉREZ, NALLY CAMPO. INTRODUCCIÓN A LA TEORÍA DE CONJUNTOS. [En
línea] http://www.e-socrates.org/mod/resource/view.php?id=4398.
3. REAL ACADEMIA ESPAÑOLA. [En línea] http://buscon.rae.es/draeI/.
4. Brena, Ramón. AUTOMATAS Y LENGUAJES. Monterrey : s.n., 2003.
5. Hopcroft, John E. Introducion to automata theory, languages, and computation.
s.l. : Addison-Wesley, 2001.
6. Lawson, M. V. Finite automata.
http://www.ma.hw.ac.uk/~markl/preprints/Lawson.pdf. [En línea] 
7. RegExlib. [En línea] http://regexlib.com/default.aspx.
8. Javascript Regular Expression Validator. [En línea]
http://tools.netshiftmedia.com/regexlibrary/.
9. RegexPal. [En línea] http://regexpal.com/.
10. metriplica.com, Grupo. ¡Prueba tus Expresiones Regulares!
http://www.metriplica.com/4_4_herramientas.asp. 2008.
11. Regular Expression Tool. [En línea]
http://erik.eae.net/playground/regexp/regexp.html.
12. Regexp Editor. [En línea] http://myregexp.com/.
13. Rad Software Regular Expression Designer 1.4.7528.27091. [En línea]
http://www.radsoftware.com.au/?from=RegexDesigner.
14. Visual REGEXP 3,0. [En línea] http://www.softpedia.com/get/Programming/OtherProgramming-Files/Visual-REGEXP.shtml.
15. Regulazy v1.0.3.0 (Beta). [En línea] http://tools.osherove.com/Default.aspx.
16. Regular Expression Workbench. [En línea] EricGu@Microsoft.Com.
17. Sells, Chris and Weinhardt, Michael. RegexDesigner v1.0.2727. [En línea]
http://www.sellsbrothers.com/tools/.
18. Visual Automata Simulator. [En línea] http://www.cs.usfca.edu/~jbovet/.
19. Acosta, Francisco Ríos. SP-PS1. [En línea] http://www.friosa.com.mx.
20. RegexBuddy3. [En línea] http://www.regexbuddy.com/.
21. The Software Process Dashboard Initiative. [En línea]
http://www.processdash.com/.
22. METODOLOGÍA DE MUESTREO. [En línea]
http://www.hsa.es/id/investigacion/uai/uai_docs/muestreo/muestreo.htm.
23. Modelos Abstractos de Cómputo I. [En línea]
http://www.sc.ehu.es/jiwnagom/MAC1/MAC-archivos/Tema2-parte3.pdf. 

sábado, 14 de mayo de 2016

Evaluación e Identificación del Riesgos Inherente, de Control, de Detección y de Auditoría

Autor: Yeiniel Alfonso Martínez y Alfredo Cárdenas Cabrera.

 

Las organizaciones deben identificar y gestionar los riesgos para lograr efectividad en el cumplimiento de sus objetivos y metas previstas. Por ende, los auditores no pueden estar ajenos a esta situación y deben evaluar como la entidad gestiona los riesgos. Estos resultados obtenidos le sirven al auditor como insumos en la etapa de Planeamiento que unidas a la Ejecución y al Informe, todo lo cual engarza  el proceso sistemático conocido como auditoría.

 

La NCA 400 (1) en la Planeación se define los riesgos y se determina los procedimientos de auditoría que correspondan aplicar, cómo y cuándo se ejecutarán, para cumplir la actividad de forma eficiente y efectiva. Es un proceso continuo e interactivo, comienza desde el estudio previo realizado a la entidad y continúa hasta la terminación del trabajo de auditoría.

 

Al analizar el contenido de la etapa de Planeación (Ocupa aproximadamente un 25 a un 30 por ciento de la acción de control) resulta sumamente importante pues es donde se recopila una serie de información necesaria para definir las acciones a seguir en la etapa de Ejecución.

 

El auditor a fin de presentar un dictamen o informe lo más cercano a la realidad debe hacer una evaluación de los riesgos o situaciones que afectarían su opinión, los cuales pueden provenir del riesgo o la comisión de errores del ciclo, tema o transacción por sí misma (riesgo inherente), otros tienen como base la ausencia, inaplicabilidad o ineficacia de los controles internos (riesgo de control)  y por último, los riesgos asociados directamente con los procedimientos diseñados por el auditor (riesgo de detección).

 

La determinación de los Riesgos de Auditoría es una herramienta importante para el trabajo del auditor y la calidad del servicio, es la estimación del riesgo ante el trabajo ordenado, es el riesgo de que el auditor exprese una conclusión inapropiada, por cuanto implica el diagnóstico de los mismos, para velar por su posible manifestación o no.

 

El auditor planea y realiza el trabajo entonces de manera tal que reduzca a un nivel aceptable o razonable el riesgo de expresar una conclusión u opinión inapropiada sobre la revisión de los objetivos de la auditoría.

 

En este trabajo se describe una Metodología para la Determinación del Riesgo de Auditoría en la fase de Planeación obteniendo los riesgos de control, inherente y detección de cada proceso o tema de una Auditoría mediante una fórmula matemática existente RA = RI x RC x RD.

 

Concepto de Auditoría

 

La auditoría es un proceso sistemático para obtener y evaluar de manera objetiva las evidencias relacionadas con informes sobre actividades económicas y otros acontecimientos relacionados, cuyo fin consiste en determinar el grado de correspondencia del contenido informativo con las evidencias que le dieron origen, así como establecer si dichos informes se han elaborado observando los principios establecidos para el caso.

 

El Control Interno y la Auditoría

 

La Resolución 60/11 en su artículo 3 define al control interno: “El control interno es el proceso integrado a las operaciones con un enfoque de mejoramiento continuo, extendido a todas las actividades inherentes a la gestión, efectuado por la dirección y el resto del personal; se implementa mediante un sistema integrado de normas y procedimientos, que contribuyen a prever y limitar los riesgos internos y externos, proporciona una seguridad razonable al logro de los objetivos institucionales y una adecuada rendición de cuentas” (1).

 

Concepto de Riesgo de Auditoría

 

Riesgo de Auditoría o Riesgo Final es la posibilidad de que el auditor dé una opinión de auditoría inapropiada cuando las informaciones están elaboradas en forma errónea de una manera importante. El riesgo de auditoría, también conocido como Riesgo Final, tiene tres partes: riesgo inherente, riesgo de control y riesgo de detección.

 

“El riesgo de auditoría es la posibilidad de que un auditor establezca que las cifras de los estados financieros presentan razonablemente la posición financiera, los resultados de operación y los flujos de efectivo de una entidad por un período determinado, cuando en realidad dichos estados financieros no están preparados ni presentados de forma razonable; o por el contrario, que el auditor dictamine que las cifras de los estados financieros de una entidad no presentan razonablemente su situación financiera, sus resultados de operación y sus flujos de efectivo cuando en realidad dichos estados financieros si están adecuadamente preparados y presentados.” (2)

Conceptos de Riesgo Inherente, de Control y Detección.

 

Riesgo Inherente es la susceptibilidad de que la expresión cuantitativa de las transacciones den lugar a una representación errónea que pudiera ser de importancia relativa, individualmente o cuando se agrega con representaciones erróneas en otras, asumiendo que no hubo controles internos relacionados.

 

“El riesgo inherente es la susceptibilidad que por naturaleza toda partida contable tiene de estar registrada, valuada, presentada o revelada en forma errónea. Las estimaciones y las provisiones son dos de las partidas que usualmente presentan mayor riesgo inherente, lo anterior en vista de que en ambos casos los montos que una entidad contabiliza se basan fundamentalmente en suposiciones, juicios, proyecciones, experiencia y cálculos aritméticos hechos por su administración de la entidad auditada, razón por la cual la evidencia de auditoría en estos casos es más persuasiva que conclusiva.” (2)

 

Riesgo de Control es la posibilidad de que una representación errónea pudiera ocurrir en la expresión cuantitativa de una  o más transacciones que pudiera ser de importancia relativa individualmente o cuando se agrega con representaciones erróneas en otras expresiones cuantitativas o clases, no sea prevenido o detectado y corregido con oportunidad por el  control interno implementado.

 

“El riesgo de control es la probabilidad de que los sistemas de control interno y control contable que han sido diseñados e implementados por la administración de una entidad, sean incapaces de prevenir o en su defecto detectar y corregir errores de importancia relativa en las cifras de sus estados financieros. Es así como resulta de sumo interés para el auditor independiente el evaluar lo adecuado del diseño y operación de los controles establecidos por una entidad, lo anterior a efecto de poder valorar de forma precisa los niveles de riesgo de control a que debe hacer frente durante el desarrollo de su auditoría.” (2)

 

Riesgo de Detección es la eventualidad de que los procedimientos sustantivos de un auditor no detecten una representación errónea que existe en un expresión cuantitativa de una o más transacciones que podría ser de importancia relativa, individualmente o cuando se agrega con representaciones erróneas en otras expresiones cuantitativas o clases.

 

“El riesgo de detección es responsabilidad directa del auditor independiente y consiste fundamentalmente en la posibilidad de que éste cometa errores a lo largo del desarrollo de la auditoría de los estados financieros de una entidad, los cuales lo conduzcan a emitir una opinión equivocada.” (2)

 

“El riesgo de detección es la posibilidad de que los procedimientos de auditoría no detecten errores o irregularidades existentes en los estados contables. Es un riesgo propio del auditor y depende exclusivamente de él. En la medida que se pretenda emitir una opinión correcta, deberán evaluarse los elementos de juicio necesarios y los procedimientos de auditoría deben detectar todos los errores o irregularidades existentes (o al menos los significativos). No cabe otra posibilidad que el riesgo de detección sea reducido al mínimo o bajos. Evaluaciones de otro tipo podrían originar situaciones de limitaciones en el alcance o, simplemente, opiniones erróneas” (3)

 

Modelo de Riesgo de Auditoría

 

Desde el punto de vista del auditor, el riesgo de auditoría es el riesgo, que el auditor está dispuesto a asumir respecto a un conjunto de informaciones que contengan errores importantes.

 

De existir un error importante en las informaciones, significaría que no fue detectado ni por los controles de la entidad auditada ni por los procedimientos de auditoría. Por ello se plantea matemáticamente: RA = RI X RC X RD donde RA es el Riesgo de Auditoría, RI es conocido como Riesgo Inherente, a RC se le llama Riesgo de Control y a RD lo denominamos Riesgo de Detección.

 

Las principales características del Modelo son:

 

1. Los distintos riesgos se han definido de tal manera que son independientes uno de los otros.  Se puede demostrar, mediante la teoría de probabilidades que la independencia contribuye a que se multipliquen los riesgos en cada componente.

 

2. El Riesgo Inherente y el Riesgo de Control difieren del Riesgo de Detección en que son independientes de la auditoría; están fuera de control del auditor. En cambio, el Riesgo de Detección se relaciona con la naturaleza, alcance, oportunidad y profundidad de los procedimientos de auditoría.

 

3. Al establecer una estrategia tentativa para la auditoría, el auditor, basado en una evaluación del Riesgo Inherente y del Riesgo de Control, deberá planear suficientes procedimientos de cumplimiento para reducir el Riesgo de Detección a un nivel que, a su juicio, resulte adecuadamente bajo.

 

4. Es posible combinar los distintos riesgos de manera diferente y, al mismo tiempo, mantener el Riesgo de Auditoría a un mismo nivel. Ello indica que se pueden establecer diferentes estrategias de auditoría para obtener suficiente confianza respecto a cada una de las condiciones de error importante y la afirmación correspondiente.

 

5. El modelo está enfocado a controlar el máximo nivel aceptable de Riesgo de Auditoría. Alternativamente, el modelo se puede modificar de manera que se pueda ver el nivel mínimo aceptable de confianza general en los procedimientos sustantivos.

 

Metodología para la Determinación del Riesgo de Auditoría

 

La evaluación del nivel de riesgo es un proceso totalmente subjetivo y depende exclusivamente del criterio, capacidad y experiencia del auditor. Además, es la base para la determinación del enfoque de auditoría a aplicar y la cantidad de satisfacción de auditoría a obtener. Por lo tanto, debe ser un proceso cuidadoso y realizado por quienes posean la mayor capacidad y experiencia en un equipo de trabajo.

 

No obstante ser un proceso subjetivo, hay formas de tratar de estandarizar o disminuir esa subjetividad. En ese sentido, se tratan de medir dos elementos que, combinados, son herramientas a utilizar en el proceso de evaluación del nivel de riesgo. Esos elementos son:

 

• La significatividad o importancia de un proceso (saldos y transacciones).

• La probabilidad de ocurrencia de errores o fraudes básicamente obtenida del conocimiento y la experiencia anterior de ese ente.

 

Sistema de Calificación de Riesgo

 

El intervalo del sistema de calificación de riesgo de un proceso de auditoría es de Alto, Medio y Bajo.

 

• 0< Nivel Bajo <= 0.5

• 0.5< Nivel Medio <= 0.75

• 0. 75 < Nivel Alto < 1

 

El intervalo de calificación se estableció que comenzara con el valor 1 (Riesgo Bajo) y no con cero porque analizando la fórmula RA = RI X RC X RD los símbolos matemático son multiplicación y división. Si alguna de estas variables o riesgos adquiere el valor de cero, no sería necesario calcular ni determinar el resto de los riesgos porque obtienen el valor cero, dando a entender que no existen riesgos. No con esto se está estableciendo que sea de uso obligatorio comenzar con el valor 1 sino que es conveniente que los valores sean mayores de cero y menores de uno, dejando a consideración de los especialistas que ejercen esta práctica según su experiencia y criterio.

 

Pasos para determinar el Riesgo de Detección de los procesos de Auditoría:

 

Paso 1: Determinar los riesgos inherentes de un proceso y asignarle una importancia y probabilidad de ocurrencia. Se calcula el Riesgo Inherente mediante la fórmula RI = (IMP [Importancia] + PB [Probabilidad]) / 2

 

RIESGO

Importancia

Probabilidad

Que no se adjunte el Certificado de Calidad.

4

3

Medicamentos diferentes a los solicitados

5

3

TOTAL

9

6

Denominador

10

6

Resultado

0.9

1

Riesgo Inherente

0.95

 

Paso 2: Determinar los riesgos de control. Los riesgos de control se evalúan y calculan de la misma forma que los riesgos inherentes.

 

Paso 3: Determinar los riesgos de Alcance Máximo de Auditoria de cada proceso. Se calcula multiplicando Los riesgos de control y los riesgos inherentes de cada proceso (RI x RC). Este dato me limita el alcance de los riesgos de auditoría de los procesos.

 

Paso 4: Calcular el Riesgo de Detección (RD).

-  Plantee la fórmula de Riesgo de Auditoría donde RA = RI x RC x RD.

- Despeje RD = RA / (RI x RC). Siendo RA < (RI x RC).

El riesgo de detección me determina el nivel de alcance de la evidencia que el auditor planea acumular y el riesgo de auditoría me determinaría el valor de la materialidad a realizar por cada proceso.

 

Del nivel de riesgo inherente depende la cantidad de satisfacción de auditoría necesaria y del nivel de riesgo de control la calidad de la misma. Teniendo en cuenta estos parámetros generales corresponde aplicar (según la calificación del riesgo inherente y de control) pruebas sustantivas o de cumplimiento o de procedimiento analístico.

 

Referencias Bibliográficas

 

1. Resolución No. /2012 de la Contraloría General de la República, Normas Cubana de Auditoría, Tema I: Auditoría y revisión de la información. 2012.

2. Contraloría General de la República de Cuba. Resolución No. 60/11. 2011.

3. Msc. Vernor Mesén Figueroa, CPA. [En línea] http://www.iaicr.com/audinotas/auditor_independiente.pdf.

4. Romero, Luis M. [En línea] http://www.auditool.org/index.php?option=com_content&view=article&id=287:los-riesgos-en-el-proceso-de-auditoria&catid=40:blog&Itemid=55.

5. www.auditool.org. [En línea]

6. www.iaicr.com. [En línea]

7. Mancinelli, Hernán J. Mercado AUDITORÍA DE ESTADOS CONTABLES BASADA EN LA EVALUACIÓN DE RIESGOS (RISK BASED) [En Línea] http://www.google.com.cu/url?sa=t&rct=j&q=AUDITOR%C3%8DA%20DE%20ESTADOS%20CONTABLES%20BASADA%20EN%20LA%20EVALUACI%C3%93N%20DE%20RIESGOS%20(RISK%20BASED)&source=web&cd=1&cad=rja&ved=0CC8QFjAA&url=http%3A%2F%2Fwww.eco.unlpam.edu.ar%2Fobjetos%2Fmaterias%2Fcontador-publico%2F4-ano%2Fcontrol-interno-y-auditoria%2Faportes-teoricos%2FRiesgo%2520de%2520Auditoria.pdf&ei=z0DpUd6-HYnC9QSSuoDwDQ&usg=AFQjCNE8lanBb1SQegjI9X53SrxclovQ5w&bvm=bv.49478099,d.eWU


Libre de virus. www.avast.com

miércoles, 11 de mayo de 2016

Expresiones regulares a partir del autómata finito equivalente: Parte II

Autor: Ing. Yeiniel Alfonso Martínez
e-mail: sitieh2013@gmail.com 

Expresiones Regulares. 

Una expresión regular es una cadena de texto para describir un patrón de búsqueda. Es una fórmula que caracteriza un lenguaje ─un conjunto de cadenas. Resultan útiles en compilación y desarrollo del Procesamiento de Lenguaje Natural. También permiten sustituir textos, editar o generar nuevos ficheros, manipulando el contenido de otros.  Las expresiones regulares son convenientes, rápidas y potentes al efectuar un filtrado sobre un caso dado, y lograr un resultado más reducido y específico. Usan poca memoria y ahorran códigos. Importante en JavaScript, para conexiones lentas en Internet. 

Las siguientes definiciones son tomadas del libro Autómatas y Lenguajes (3) 

Definición: Sea ∑ un alfabeto. El conjunto ER de las expresiones regulares contiene las cadenas en el alfabeto ∑ U {λ, |, •, *, (,), Ø} que cumplen con lo siguiente:





Las plataformas de desarrollo disponen de expresiones regulares, aunque cada una usa su propio dialecto. Las expresiones regulares se basan en sus operadores básicos (* + | () ?), Comodines (\w \s \d) y en las tres operaciones básicas: concatenación, repetición y alternativas.

Operadores Básicos: 
  • Ninguna o más repeticiones (*): a* indica que acepta ninguna o más repeticiones de a. 
  • Una o más repeticiones (+): a+ indica que acepta una o más repeticiones de a.
  • Opcionalidad  (?): a? indica que a puede aparecer o no. De aparecer, sólo una vez.
  • O lógico (|): a|b indica que existe una alternativa que puede aceptar a o b. 
  • Agrupación ( ): Este operador, los paréntesis, se utiliza cuando se desea agrupar una parte de la expresión para un tratamiento especial. Ejemplo: (a|b)?c, tiene las combinaciones de texto siguiente: ac, bc, c. debido a que la subexpresión a|b se encuentra entre paréntesis, se le aplica el operador opcional ?. Si esta subexpresión no estuviera agrupada a|b?c los textos serían: a, c, bc, porque dicho operador se le aplica sólo a la b. 
Existen otros metasímbolos: 
  •  Cualquier caracter (.): .a. indica que cualquier cadena de longitud 3 contiene la letra a en la posición del centro. 
  • Clase de caracteres [ ]: [0-9] indica cualquier carácter entre el cero y el nueve. 
Comodines y abreviaturas: 
  •  \w: indica los alfanuméricos. ([A-Za-z_0-9]) 
  • \s: indica los caracteres de separación (\t ,\n, \r y espacio). 
  • \d: indica los dígitos.
Teorema: Todo lenguaje definido por una expresión regular también es definido por un autómata finito (5).

Autómatas finitos 

En el artículo de M. V. Lawson (6) el término autómatas finitos describe una clase de modelos de computación que se caracterizan por tener un número finito de estados. Son dispositivos informáticos que aceptan o reconocen los idiomas regulares.

Según R. Brena (4), un autómata finito es el modelo matemático de un sistema. El mismo recibe una cadena constituida por símbolos de un alfabeto, y determina si esa cadena pertenece al lenguaje que él reconoce.

La definición formal de J.E. Hopcroft (5) plantea lo siguiente:



El diagrama de transición determina las cadenas del lenguaje a través de un grafo dirigido con información añadida. Los nodos del grafo representan los estados del autómata finito y señalan hasta donde se analizó la cadena. El estado inicial (s) o comienzo del autómata es marcado con una flecha; los estados finales o aceptación (F) por un doble círculo. Las etiquetas de los arcos están definidas por los símbolos del alfabeto. Cuando una cadena termina en un estado final es aceptada por el lenguaje.

La palabra “ami’ en francés, significa “amigo” en español. Se puede notar que tienen cierta similitud, “ami” es un subconjunto de “amigo”, A = {a, m, i}, B = {a, m, i, g, o},  A∪B= {a, m, i, g, o}; la expresión regular amigo|amio ami(go)? reconocen esta palabra en los idiomas mencionados. El autómata que lo representa se muestra en la Figura, donde q1 es el estado inicial o inicio, q4 y q7 son los estados aceptados o finales. Al llegar al estado q4 se obtiene la palabra “ami”, y en q7 “amigo”.





Si se le añaden las palabras en plural hay que agregar un estado. El autómata cambia transformando la expresión regular en amigos|amis|amigo|ami o ami(go)?(s)?



Otra forma de representar un autómata es mediante Las Tablas de Transiciones: Las filas muestran los estados del autómata finito, y las columnas los símbolos del alfabeto. Las intersecciones de fila y columna muestran el próximo estado, la Tabla 1.1 muestra un ejemplo de tabla de transiciones del autómata finito de la Figura anterior.



Los autómatas finitos pueden ser no deterministas o deterministas, existiendo tres clasificaciones: AFND-e, AFND y AFD.

A través de los autómatas finitos deterministas (AFD) se pueden generar las expresiones regulares y viceversa.

La expresión regular ad*|ad|ad+ no es óptima al contener elementos redundantes (|ad|ad+). Esta se puede transformar en un AFD a través de un modelo matemático, y minimizarlo para obtener una nueva expresión regular equivalente o igual a la anterior. Estos dos resultados se pueden comparar y escoger el más eficiente y optimizado. En este ejemplo la expresión resultante sería ad* siendo la más óptima porque realiza las mismas funciones que la anterior y su longitud es menor.




Existen cuatro notaciones diferentes de equivalencia para expresiones regulares(4):




Definición: Dos autómatas A1 y A2 son equivalentes, cuando aceptan el mismo lenguaje.

FIN DE LA PARTE II

Recomendacion: Leer Expresiones regulares a partir del autómata finito equivalente: Parte I

Referencias Bibliográficas 

1. Pérez Martínez, Abel. ERAFPLN. 2009.
2. PÉREZ, NALLY CAMPO. INTRODUCCIÓN A LA TEORÍA DE CONJUNTOS. [En
línea] http://www.e-socrates.org/mod/resource/view.php?id=4398.
3. REAL ACADEMIA ESPAÑOLA. [En línea] http://buscon.rae.es/draeI/.
4. Brena, Ramón. AUTOMATAS Y LENGUAJES. Monterrey : s.n., 2003.
5. Hopcroft, John E. Introducion to automata theory, languages, and computation.
s.l. : Addison-Wesley, 2001.
6. Lawson, M. V. Finite automata.
http://www.ma.hw.ac.uk/~markl/preprints/Lawson.pdf. [En línea] 
7. RegExlib. [En línea] http://regexlib.com/default.aspx.
8. Javascript Regular Expression Validator. [En línea]
http://tools.netshiftmedia.com/regexlibrary/.
9. RegexPal. [En línea] http://regexpal.com/.
10. metriplica.com, Grupo. ¡Prueba tus Expresiones Regulares!
http://www.metriplica.com/4_4_herramientas.asp. 2008.
11. Regular Expression Tool. [En línea]
http://erik.eae.net/playground/regexp/regexp.html.
12. Regexp Editor. [En línea] http://myregexp.com/.
13. Rad Software Regular Expression Designer 1.4.7528.27091. [En línea]
http://www.radsoftware.com.au/?from=RegexDesigner.
14. Visual REGEXP 3,0. [En línea] http://www.softpedia.com/get/Programming/OtherProgramming-Files/Visual-REGEXP.shtml.
15. Regulazy v1.0.3.0 (Beta). [En línea] http://tools.osherove.com/Default.aspx.
16. Regular Expression Workbench. [En línea] EricGu@Microsoft.Com.
17. Sells, Chris and Weinhardt, Michael. RegexDesigner v1.0.2727. [En línea]
http://www.sellsbrothers.com/tools/.
18. Visual Automata Simulator. [En línea] http://www.cs.usfca.edu/~jbovet/.
19. Acosta, Francisco Ríos. SP-PS1. [En línea] http://www.friosa.com.mx.
20. RegexBuddy3. [En línea] http://www.regexbuddy.com/.
21. The Software Process Dashboard Initiative. [En línea]
http://www.processdash.com/.
22. METODOLOGÍA DE MUESTREO. [En línea]
http://www.hsa.es/id/investigacion/uai/uai_docs/muestreo/muestreo.htm.
23. Modelos Abstractos de Cómputo I. [En línea]
http://www.sc.ehu.es/jiwnagom/MAC1/MAC-archivos/Tema2-parte3.pdf.

viernes, 6 de mayo de 2016

Expresiones regulares a partir del autómata finito equivalente: Parte I

¿Por qué esta magnífica tecnología científica, que ahorra trabajo y nos hace la vida más fácil, nos aporta tan poca felicidad? La repuesta es esta, simplemente: porque aún no hemos aprendido a usarla con tino.

Albert Einstein


En todas las ramas de la ingeniería, ciencia o economía existe la necesidad de resolver algún problema de optimización (control de sistema, optimización de recursos o producción, etc.) y se preguntarán ¿qué es optimizar? Sin duda, buscar la mejor manera de realizar una actividad.

Las Matemáticas lo enfocan en el estudio de los problemas o el proceso de encontrar los mínimos y máximos de una función.

En Economía es la forma neoclásica de la racionalidad, o sea, se trata de elegir la mejor opción entre distintas posibilidades.

En las Letras, optimizar sería lograr construcciones sintácticas y semánticas que hagan posible una comunicación más clara y efectiva entre emisores y receptores.

De ahí que la optimización se pueda definir como la minimización de algo malo, o la maximización de algo bueno.

En Informática, sería transformar un programa para que realice las mismas tareas en menos tiempo, con menos requerimientos de memoria y empleando los recursos de forma óptima. Siempre han existido(y existirán) situaciones que requieren la optimización para resolver un problema dado. En el caso de los informáticos, si con pocos códigos pudieran mejorar un software, ahorrarían tiempo y disminuiría el desgaste físico e intelectual.

Para el programador las expresiones regulares son muy útiles. Esta poderosa herramienta permite escribir códigos cortos y ahorrar tiempo, especialmente en JavaScript cuando no se cuenta con una conexión a Internet de alta velocidad. La mayor parte de la sintaxis de las expresiones regulares trabaja igual en una amplia variedad de herramientas y lenguajes de programación.

Por lo general, el significado de los símbolos utilizados para la construcción de una expresión, no tienen similitud con los del lenguaje natural o de programación, siendo la sintaxis para un inexperto difícil de recordar y bastante compleja. Una expresión regular tiene un autómata finito equivalente, o sea, al confeccionar un autómata finito podemos generar una cadena de texto (una vía más cómoda para inexpertos).

Habitualmente las expresiones regulares funcionan rápido, pero si se optimizan se logran mejores resultados.

Ejemplo:
  • ;acdd|acdf|acdp|acd8
  • ;acd(d|f|p|8)
  • acd[dfp8]

Realizan la misma función. Al analizar sus longitudes 19, 12 y 9 respectivamente, la menor resulta más óptima, pues se logra una mayor potencia, rapidez y eficiencia al efectuar un filtrado, disminuyendo la longitud de la cadena de texto y manteniendo las mismas funciones.

Pero, ¿Qué tan importante es la optimización de expresiones regulares? En la programación web muchísimo, sobre todo si se dispone de un servidor con recursos limitados. De conseguirse que el código sea más eficiente, se dispondrá de más capacidad en el servidor (menos carga y mejor tiempo de respuesta).

De forma predeterminada, los motores de búsqueda de expresiones compilan una expresión regular en una secuencia de instrucciones internas (códigos de bajo nivel). Para mejorar el rendimiento, estos almacenan en caché todas las expresiones regulares de la memoria, evitando analizar cada vez que se utilice, una expresión en código de alto nivel. A fin de incrementar la eficiencia sería conveniente guardar en caché estas expresiones regulares minimizadas.

Al procesar una tabla con una cantidad de registros del orden de los millones en una base de datos de una aplicación, sería factible utilizar expresiones regulares pues resulta más costoso e impreciso usar en una consulta un operador como LIKE. De igual forma si se conecta un mayor número de usuarios, la simplificación de la expresión regular contribuiría a incrementar la velocidad en el procesamiento de los datos.

Este artículo es la introducción de una serie dedicada a expresiones regulares a partir de los autómatas.

Objetivos específicos:

Estudiar definiciones y algoritmos matemáticos para la optimización de autómatas finitos.
Realizar un estudio del estado del arte a un grupo de herramientas informáticas que tratan las expresiones regulares y los autómatas finitos.
Crear un algoritmo que realice la conversión de expresión regular a autómata finito.
Crear un algoritmo que realice la optimización de un autómata finito.
Validar la solución propuesta mediante experimentos.

Fundamento científico o marco teórico

Conceptos preliminares

La palabra conjunto se asocia con la idea de agrupar objetos iguales o diferentes, o sea, es una colección de elementos u objetos que guardan una relación entre sí. Un conjunto es una colección de objetos que cumplen una propiedad específica. Cada objeto del conjunto se llama elemento.

Existen diferentes tipos de conjuntos:

;Conjunto Vacío (f): Cuando ninguno de sus elementos cumple una condición dada.
Conjunto Unitario: Cuando contiene un solo elemento.
Conjunto finito: Cuando se puede contar la cantidad de elementos.
Conjunto infinito: Cuando no es finito.
Conjunto Universal: Contiene todos los elementos.
Conjunto potencia: Todos los subconjuntos de un conjunto A.

Subconjunto: Es una parte del conjunto y a la vez es un conjunto per se. Ejemplo: Sean los conjuntos A= {0, 1, 2, 3, 5, 6, 7, 8, 9} y B= {3, 4, 5}, en este caso decimos que B es subconjunto de A porque B está contenido en A.

Operaciones entre conjuntos:
Unión (): AB contiene los elementos de A y B. Ejemplo: A = {1, 2} y B = {2, 3, 4} siendo AB= {1,2,3, 4}. La unión de conjuntos es conmutativa y asociativa.
Intersección (): AB contiene los elementos que son iguales en A y B. Ejemplo: A= {1,2}y B= {2,3} siendo A∩B= {2}. La intersección es conmutativa y asociativa.
Diferencia (─): AB contiene los elementos de A que no están en B. Ejemplo: A= {1, 2,3} y B= {2, 4,5} siendo AB= {1,3}. La diferencia de conjuntos no es ni asociativa ni conmutativa.

Grafo: Estructura de datos. Un conjunto de objetos denominados nodos o vértices unidos por arcos. G(V,E) es un par ordenado, siendo V un conjunto de nodos o vértices y E, conjunto de arcos que relacionan a los nodos.

Optimizar: Buscar la mejor manera de realizar una actividad, según la Real Academia Española. En Informática, tratar de adaptar un programa o software que realice las mismas funciones o tareas en menos tiempo y requerimiento de memoria. Utilizar los recursos de forma rápida y eficiente.

Determinismo: No hay elección posible. Existe o no, una alternativa.

No Determinismo: Existen varias alternativas.

Símbolo: Tipo de abreviación de carácter científico o técnico; una representación de una información, como a, 6, +, etc. Un símbolo es una entidad indivisible.

Alfabeto: Conjunto no vacío de símbolos. Se utiliza generalmente la notación ∑ para representarlo.

El conjunto de cantidades u operaciones ordenadas donde cada una está determinada por las anteriores, es la definición de secuencias o cadenas de caracteres. Las mismas se forman con los símbolos de un alfabeto tales como casa, hola, a, etc. También son conocidas como palabras. Un caso particular es la palabra vacía,l, que no contiene ninguna letra.

La cantidad de letras o longitud de una palabra, se denota por |w|. Ejemplo, |adulto| = 6. Palabra nula o vacía l: su longitudes cero. Algunos autores utilizan e para denotarla.

La concatenación de dos o varias palabras origina la creación de palabras nuevas, cuya longitud es la sumatoria de las palabras originales. Ejemplo, si X = ciem, Y = piés, XY es la palabra ciempiés. Esta operación es asociativa, pero no conmutativa.

Un lenguaje es un conjunto de palabras y se pueden efectuar con ellas todas las operaciones de los conjuntos (unión, intersección, diferencia). La operación de concatenación de lenguajes, escrita como L1 • L2, resulta una extensión de la concatenación de palabras: L1 • L2 = {w|w = xy, x Î L1, y Î L2}.

Un lenguaje finito es aquel que contiene un número finito de palabras.

Un lenguaje infinito está determinado por la recursividad de sus requerimientos sintácticos simples.

Definición: Un lenguaje (L) es regular, si y sólo si se cumple al menos una de las condiciones siguientes:
;L, es finito.
;L, es la unión o la concatenación de otros lenguajes regulares R1 y R2, L = R1 U R2 o L = R1R2 respectivamente.
;L, es la estrella de Kleene de algún lenguaje regular, L = R*.
Teorema de Kleene: Un lenguaje es regular si y sólo si es aceptado por algún autómata finito.

Un lenguaje regular tiene su representación a través de una expresión regular.

FIN DE LA PARTE I

Referencias Bibliográficas

1. Pérez Martínez, Abel. ERAFPLN. 2009.
2. PÉREZ, NALLY CAMPO. INTRODUCCIÓN A LA TEORÍA DE CONJUNTOS. [En línea] http://www.e-socrates.org/mod/resource/view.php?id=4398.
3. REAL ACADEMIA ESPAÑOLA. [En línea] http://buscon.rae.es/draeI/.
4. Brena, Ramón.AUTOMATAS Y LENGUAJES. Monterrey : s.n., 2003.
5. Hopcroft, John E.Introducion to automata theory, languages, and computation. s.l. : Addison-Wesley, 2001.
6. Lawson, M. V. Finite automata. http://www.ma.hw.ac.uk/~markl/preprints/Lawson.pdf. [En línea]
7. RegExlib. [En línea] http://regexlib.com/default.aspx.
8. Javascript Regular Expression Validator. [En línea] http://tools.netshiftmedia.com/regexlibrary/.
9. RegexPal. [En línea] http://regexpal.com/.
10. metriplica.com, Grupo. ¡Prueba tus Expresiones Regulares! http://www.metriplica.com/4_4_herramientas.asp. 2008.
11. Regular Expression Tool. [En línea] http://erik.eae.net/playground/regexp/regexp.html.
12. Regexp Editor. [En línea] http://myregexp.com/.
13. Rad Software Regular Expression Designer 1.4.7528.27091. [En línea] http://www.radsoftware.com.au/?from=RegexDesigner.
14. Visual REGEXP 3,0. [En línea] http://www.softpedia.com/get/Programming/Other-Programming-Files/Visual-REGEXP.shtml.
15. Regulazy v1.0.3.0 (Beta). [En línea] http://tools.osherove.com/Default.aspx.
16. Regular Expression Workbench. [En línea] EricGu@Microsoft.Com.
17. Sells, Chris and Weinhardt, Michael.RegexDesigner v1.0.2727. [En línea] http://www.sellsbrothers.com/tools/.
18. Visual Automata Simulator. [En línea] http://www.cs.usfca.edu/~jbovet/.
19. Acosta, Francisco Ríos. SP-PS1. [En línea] http://www.friosa.com.mx.
20. RegexBuddy3. [En línea] http://www.regexbuddy.com/.
21. The Software Process Dashboard Initiative. [En línea] http://www.processdash.com/.
22. METODOLOGÍA DE MUESTREO. [En línea] http://www.hsa.es/id/investigacion/uai/uai_docs/muestreo/muestreo.htm.
23. Modelos Abstractos de Cómputo I. [En línea] http://www.sc.ehu.es/jiwnagom/MAC1/MAC-archivos/Tema2-parte3.pdf.

Libre de virus. www.avast.com