Analizando los Problemas

Unidad de Apoyo para el Aprendizaje

Iniciar

Introducción


¿Conoces la papiroflexia? Si te das cuenta, para llegar a ese resultado se siguieron pasos exactos, si no, no se tendría ese efecto, quedaría con una forma distinta a la que se pretendía llegar.

Esta es la importancia de la etapa de análisis para recabar la información necesaria que indique una acción para la solución de un problema. De esta manera la definición de computabilidad mediante algoritmos interpreta un fenómeno a través de un cúmulo de reglas establecidas.

Por eso, en este tema se estudiarán los diferentes métodos de ordenación y búsqueda, de uso frecuente en la solución de problemas de negocios, por lo que se hace indispensable su comprensión.

Si te interesa continuar con el tema te invito a seguir estudiando.



Fotografía sobre figuras de papiroflexia

Jaramillo, J. (2017). Papiroflexia [fotografía]. Tomada de https://www.flickr.com/photos/georigami/35240044402/



El estudio de este tema te permitirá:

Reconocer la clasificación de algoritmos y computabilidad para solucionar un problema de forma adecuada mediante la manipulación, simplificación de la búsqueda y el acceso a un elemento determinado de la información.

Análisis del problema


El análisis del problema es un proceso para recabar la información necesaria y emprender una acción que lo solucione.

Diversos problemas requieren algoritmos diferentes. Un problema puede llegar a tener más de un algoritmo que lo solucione, mas la dificultad se centra en saber cuál está mejor implementado; es decir, que tenga un tiempo de ejecución óptimo, dependiendo del tipo de datos a procesar. En este sentido, para determinar el rendimiento de un algoritmo se deben considerar dos aspectos:

•Cantidad de datos de entrada a procesar.
•Tiempo necesario de procesamiento.

El tiempo de ejecución depende del tipo de datos de entrada, clasificados en tres casos, que se presentan a continuación. Pulsa en cada concepto para desplegar la información correspondiente.



Caso óptimo

Datos de entrada con las mejores condiciones. Ejemplo: que el conjunto de datos se encuentre completamente ordenado.

Caso medio

Conjunto estándar de datos de entrada. Ejemplo: que el 50 % de los datos esté ordenado y el 50 % restante no.

Peor caso

Datos de entrada más desfavorable. Ejemplo: que los datos se encuentren completamente desordenados.



Mediante el empleo de fórmulas matemáticas es posible calcular el tiempo de ejecución del algoritmo y conocer su rendimiento en cada uno de los casos ya presentados; sin embargo, hay algunos inconvenientes para no determinar con exactitud ese rendimiento:



No obstante lo anterior, en la mayoría de los casos es factible calcular el tiempo de ejecución de un algoritmo, de modo que se puede seleccionar el algoritmo con mejor rendimiento para un problema específico.

Computabilidad


Una de las funciones principales de la computación ha sido la solución de problemas a través del uso de la tecnología. Pero esto no ha logrado realizarse en la totalidad de los casos, debido a la computabilidad, característica que tienen ciertos problemas de poder resolverse a través de un algoritmo; por ejemplo, una máquina de Turing.

Con base en esta propiedad, los problemas se dividen en tres categorías: irresolubles, solucionables y computables (estos últimos son un subconjunto de los segundos).

Los problemas computables se representan a través de lenguaje matemático o con la definición de algoritmos. Es importante mencionar que todo problema calificado como computable debe resolverse con una máquina de Turing.

Por lo tanto, los problemas computables son decidibles o de decisión.

Problema de decisión

Se dice que un problema es decidible cuando se resuelve en un número finito de pasos por un algoritmo que recibe todas las entradas posibles para dicho problema. El lenguaje con el que se implementa tal algoritmo se denomina lenguaje decidible o recursivo.

Al contrario, un problema no decidible es aquél que no puede solucionarse por un algoritmo en todos sus casos, ni su lenguaje asociado puede ser reconocido por una máquina de Turing.

La computabilidad es muy importante, puesto que ayuda a resolver problemas mediante el algoritmo de la máquina de Turing, y a interpretar un fenómeno a través de un cúmulo de reglas establecidas.

Clasificación de algoritmos


Se ha clasificado a los algoritmos de diversas formas; algunos por sus atributos, ya sea por la estrategia que se utiliza para llegar a un resultado o por su función. Pulsa en cada concepto para desplegar la información correspondiente.



Son todos aquellos algoritmos que te ayudan a solucionar problemas de la vida cotidiana y de los cuales sigues su metodología sin percibirlo de forma consciente, como en el siguiente ejemplo:

Algoritmo para cambiar una llanta ponchada:
Paso 1: poner el freno de mano del automóvil.
Paso 2: sacar el gato, la llave de cruz y la llanta de refacción.
Paso 3: aflojar los birlos de la llanta con la llave de cruz.
Paso 4: levantar el auto con el gato.
Paso 5: quitar los birlos y retirar la llanta desinflada.
Paso 6: colocar la llanta de refacción y colocar los birlos.
Paso 7: bajar el auto con el gato.
Paso 8: apretar los birlos con la llave de cruz.
Paso 9: guardar la llanta de refacción y la herramienta.
Resultado: llanta de refacción montada.

Las funciones recursivas son aquellas que hacen llamadas a sí mismas en su definición, simplificando los valores originales de entrada. Se implementan cuando el problema a resolver puede simplificarse en versiones más pequeñas del mismo problema, hasta llegar a casos sencillos de fácil resolución.

Los primeros pasos de una función recursiva corresponden a la cláusula base, que es el caso conocido hasta donde la función descenderá para comenzar a regresar los resultados y llegar a la función con el valor que la invocó.






Al utilizar matrices o bases de datos, las tareas que se utilizan con más frecuencia son la ordenación y la búsqueda de los datos, para las cuales existen diferentes métodos más o menos complejos, según lo rápidos o eficaces que sean.

Algoritmos de búsqueda

Secuencial: este método de búsqueda, también conocido como lineal, es el más sencillo. Consiste en buscar desde el principio de un arreglo desordenado el elemento deseado y continuar con cada uno de los elementos del arreglo hasta hallarlo, o hasta que haya llegado al final del arreglo y terminar.

Dinámica o dicotómica: para este tipo de búsqueda es necesario que el arreglo esté ordenado. El método consiste en dividir el arreglo por su elemento medio en dos subarreglos más pequeños y comparar el elemento con el del centro. Si coinciden, la búsqueda termina. Cuando el elemento es menor se busca en el primer subarreglo, y si es mayor en el segundo. Revisa el ejemplo.


Dinámica o dicotómica Por ejemplo, para buscar el elemento 41 en el arreglo {23, 34, 41, 52, 67, 77, 84, 87, 93}, realizarías los siguientes pasos:

1. Tomas el elemento central y divides el arreglo en dos:
{23, 34, 41, 52}-67-{77, 84, 87, 93}

2. Como el elemento buscado (41) es menor que el central (67), debe estar en el primer subarreglo:
{23, 34, 41, 52}

3. Vuelves a dividir el arreglo en dos:
{23}-34-{41, 52}

4. Como el elemento buscado es mayor que el central, debe estar en el segundo subarreglo:
{41, 52}

5. Vuelves a dividir en dos:
{}-41-{52}

6. Como el elemento buscado coincide con el central, lo has encontrado. Si el subarreglo a dividir está vacío {}, el elemento no se encuentra en el arreglo y la búsqueda termina.


Algoritmo de ordenación

Quick sort: el algoritmo de ordenación rápida es fruto de la técnica de solución de algoritmos divide y vencerás, la cual se basa en la recursión: dividir el problema en subproblemas más pequeños, solucionarlos cada uno por separado (aplicando la misma técnica) y al final unir todas las soluciones. Revisa el ejemplo.


Este método supone que se tiene M, el arreglo a ordenar, y N, el número de elementos dentro del arreglo. El ordenamiento se hace a través de un proceso iterativo. Para cada paso se escoge un elemento "a" de alguna posición específica dentro del arreglo.




Ese elemento "a" es el que se colocará en el lugar que le corresponda. Por conveniencia, se seleccionará "a" como el primer elemento del arreglo y se procederá a compararlo con el resto de los elementos del arreglo. Una vez que se terminó de comparar "a" con todos los elementos, "a" ya se encuentra en su lugar. A su izquierda quedan todos los elementos menores a él, y a su derecha todos los mayores.





Es fundamental recabar la información necesaria para indicar una acción que solucione un problema de forma adecuada, puesto que permite calcular el rendimiento del algoritmo a través de la cantidad de datos a procesar y el tiempo que tarde su procesamiento. Asimismo, la compresión de conceptos, como computabilidad, es muy importante, ya que ayuda a resolver problemas mediante el algoritmo de la máquina de Turing, y a interpretar un fenómeno a través de un cúmulo de reglas establecidas.

En cuanto a la clasificación de algoritmos se encuentran la recursividad, que es cuando una función se invoca repetidamente a sí misma hasta encontrar un resultado base y éste retorna a la función que la invocó; y los métodos de ordenación y búsqueda, que ordenan los datos para su mejor manipulación y facilitan la tarea a los usuarios de la información; además, simplifican su búsqueda y el acceso a un elemento determinado.

Actividad. Clasificando algoritmos

¿Qué tan útil resulta hoy en día computarizar los problemas? ¿Te has puesto a pensar en cuánto te ahorra en tiempo? ¿Sabes si lo utilizas en tu vida cotidiana? Es por ello que esta actividad te ayudará a reforzar los conceptos básicos del tema.

Autoevaluación. Análisis de algoritmos

Tener un buen nivel de comprensión para lograr analizar la información que se te proporciona día con día te ayuda a solucionar de forma adecuada los problemas que se te presentan; algunos de estos problemas son cotidianos y otros de carácter técnico, para los cuales se necesita de la construcción de modelos matemáticos. En la siguiente autoevaluación podrás identificar tu nivel de comprensión del tema.

Fuentes de información

Básicas

SUAyED. (2016). Análisis, diseño e implantación de algoritmos. Apunte electrónico [Versión electrónica]. México: UNAM. Consultado el 21 de agosto de 2017 de http://fcasua.contad.unam.mx/apuntes/interiores/docs/20181/informatica/1/LI_1164_06097_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf

SUAyED. (2016). Análisis, diseño e implantación de algoritmos. Cuaderno de actividades [Versión electrónica]. México: UNAM. Consultado el 21 de agosto de 2017 de http://fcasua.contad.unam.mx/apuntes/interiores/docs/20181/informatica/1/LI_1164_06047_C_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf

Complementarias

Selmar, K. S. y Agoston, E. E. (2010). Using entropy for parameter analysis of evolutionary algorithms. Berlín, Heidelberg: Springer.

Van Gelder, B. (2003). Algoritmos computacionales (3.ª ed.). México: Thompson.



Cómo citar

Texto correspondiente a esta sección.