Vous êtes sur la page 1sur 8

2.

1 CONCEPTOS GENERALES
Entendemos por problema una cuestión por resolver, un conjunto de hechos o
circunstancias que dificultan la consecución de algún fin, un proceso mental o físico
donde se presentan varios tipos de resistencias o inercias que deben superarse para
llegar a un resultado deseado, o bien una proposición dirigida a averiguar el modo de
obtener una solución cuando ciertos datos son conocidos.

Ejemplos: 1. Se desea preparar un platillo de pollo al estilo veracruzano, es decir, en


jitomate con papas, zanahorias, chiles cuaresmeños y pollo por supuesto.

2. Dados veinte números reales positivos, se desea obtener el máximo y el mínimo de


ellos.

No todo problema admite o tiene una solución, por ejemplo, el problema de preservar la
paz mundial posiblemente no tenga solución, en todo caso nosotros estamos
interesados en los problemas que admiten una solución y que dicha solución puede
obtenerse con la ayuda de una computadora, es decir, que el proceso de solución
puede ser ejecutado paso por paso por una computadora usando un lenguaje de
programación.

En el siglo IX, durante el reinado en la ciudad de Bagdad de al-Mamun sabio


gobernante protector de las artes, astrónomo, e hijo del legendario califa Harún al-
Rashid, conocido a través del libro Las Mil y una Noches; se escribió un tratado de
Matemáticas que habría de ejercer enorme influencia en todo el mundo árabe, y
también en la Europa medieval, donde se tradujo al latín cuatro siglos más tarde.

El libro lo escribió el bibliotecario de al-Mamun, Mohammed ibn Musa al-Khwarizm(


Mohammed, el hijo de Moisés de Khwarizm), y tenía por título Hisab al-jabr w' al
muqabalah (Ciencia de la reunión y la oposición). En él se explican las reglas para
realizar las cuatro operaciones aritméticas elementales utilizando la notación decimal,
así como algunos procedimientos para resolver ecuaciones de primero y segundo
grado. Este tratado sirvió como base para los trabajos de multitud de matemáticos
medievales, e introdujo en Europa la numeración indo arábigo, cuyos métodos se
popularizaron entre los calculistas hasta casi extinguir el uso del ábaco en occidente.
De la corrupción de los nombres del libro y de su autor se originaron, además, las
palabras álgebra y algoritmo.

El término algoritmo es un concepto básico de las Matemáticas y la Computación. Se


entiende por algoritmo, una descripción exacta de un proceso, consistente en una
sucesión de operaciones cuya ejecución conduce a la solución de un problema. Un
procedimiento para ser efectivamente llamado algoritmo, debe tener las siguientes
carac terísticas:

a). Estar descrito por una lista finita de instrucciones.

b). Contener sólo instrucciones que se puedan realizar.

c). Aplicarse en la misma forma a todos los casos particulares del problema que
resuelva.

d). Terminar después de ejecutarse cada instrucción a lo más un número finito de


veces.

Ejemplo: Estudiemos el procedimiento para calcular el máximo común divisor de dos


números enteros x y z, conocido desde los tiempos de Euclides y que consta de las
instrucciones siguientes:

1. Dividir x entre z para obtener un cociente y un residuo r.

2. Si r = 0 entonces pasar a instrucción cuatro

3. Reemplazar el valor de x con el de z y el valor de z con el de r.

Pasar a la instrucción uno

4. Escribir: “Máximo común divisor = z”. Fin.

Si x = 9 y z = 4, al ejecutar la instrucción uno tenemos como cociente 2 y residuo 1.


Pasamos a la instrucción dos como r no es cero, nos vamos a la instrucción tres,
obteniendo x = 4 y z = 1; pasamos a la instrucción uno la ejecutamos y obtenemos
residuo r = 0, la instrucción dos nos lleva a la instrucción cuatro, y se imprime que el
máximo común divisor es uno.

Un problema algorítmico es cualquier problema conceptual o práctico, cuya solución


puede expresarse mediante un algoritmo, no necesariamente único. La formulación o
presentación de un algoritmo puede verse a nivel bloques en la forma:

La entrada es la información o datos con sus estructuras propias necesarias para


ejecutar el algoritmo.
El proceso es la descripción detallada de los pasos del algoritmo.

La salida son los datos o la información con sus estructuras asociadas que se obtiene
al final de la ejecución de todos los pasos del algoritmo al aplicarse a la entrada.

Un estado de un algoritmo es una especie de foto instantánea que muestra como están
las cosas antes o después de ejecutar un paso de un algoritmo. El estado inicial es una
descripción de la entrada, el estado final es una descripción de la salida.

Ejemplos: Dados seis cubos de colores diferentes colocados en una alfombra,


encimarlos uno a uno para formar una pila con los seis cubos. Este problema puede ser
planteado a un niño de uno a tres años de edad.

Estado Inicial.

Estado Final

Proceso:

1. Escoger un cubo y colocarlo en un lugar de la alfombra.

2. De los restantes cubos, escoger otro y colocarlo encima del cubo que esté en la
parte más alta la pila.

3. Si aún hay cubos regresar a paso dos.

4. De otro modo terminar. Fin.


Problema: Dados dos números enteros: X, Y calcular el mayor de ellos.

Estado inicial: Dos números enteros: X, Y.

Estado final: Un entero M que es el mayor de los dos.

Proceso: 1. Si X < = Y Entonces Mayor = Y

De otro modo Mayor = X.

Fin.

Una variable es un nombre simbólico que se asocia con un valor o valores particulares
durante una ejecución concreta de un algoritmo. Un lenguaje algorítmico es una
forma de expresar con precisión suficiente los pasos de un algoritmo, puede ser un
lenguaje de programación o casi serlo. Contener ciclos, lazos o bucles que indican una
secuencia de instrucciones que se repiten una o más veces.

La presentación del algoritmo es en varias formas: diagrama de flujo, enumeración


de pasos, pseudocódigo orientado hacia algún lenguaje de programación, alguna otra
forma o combinaciones de todas; no existe una forma universalmente aceptada.

Ejemplos: Consideremos el problema anterior de calcular el mayor número de dos


números enteros dados. El algoritmo de solución se presentará en varias formas.

a) Enumeración de pasos.

Leer X, Y

Si X <= Y entonces Mayor = Y de otro modo Mayor = X

Escribe ‘El número mayor es: Mayor

Fin

b) Pseudocódigo orientado al lenguaje C++:

Función Mayor ( )

{ leer (x, y)

if ( x <= y ) Mayor = y ; else Mayor = x ;


escribe ( “ Mayor = ” , Mayor ) ; }

Problema: Se desea generar e imprimir los primeros 200 números enteros positivos
impares.

El algoritmo de solución se presenta en varias formas.

a) Pseudocódigo sin orientación a lenguaje alguno.

Inicio

n = 1; x = 1;

Mientras x <= 200 hacer

Escribir n;

n = n + 2;

x = x + 1;

Fin _mientras

Fin

b) Diagrama de flujo.
Problema: La Conjetura de Stanislaw Ulam es un proceso para generar números
enteros positivos, iniciando con cualquiera de ellos y terminando siempre con el
número 1.

El proceso mencionado se detalla a continuación: Generar números enteros positivos


de acuerdo a: Comenzar con cualquier entero positivo, el siguiente número entero es:
si número actual es par; el siguiente número es la división entera por dos del número
actual; si el número actual es impar; el siguiente número es número actual por 3 más
uno.

Ejemplos: 15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1

3 10 5 16 8 4 2 1

La conjetura de Ulam es: que no importa el número de inicio siempre se obtiene el


número uno como fin del proceso.

Proceso de obtención de la secuencia de Ulam.


Inicio

Leer número_de_inicio

Núm_actual = número_de_inicio

Hacer

Si Num_actual es par entonces num_actual = num_actual div 2 // división entera

de otro modo num_actual = 3 * num_actual + 1

Escribe num_actual

Mientras num_actual diferente de 1

Fin de proceso

Pseudocódigo orientado al lenguaje de programación “ C “

Función ULAM ( int num-actual )

{ escribe ( num-actual) ;

mientras ( num_actual no sea 1 )

{ if ( num_actual % 2 == 0 ) num_actual = num_actual / 2 ;

else num_actual = 3 * num-actual + 1 ;

escribe ( num_actual) ; }

Para la obtención de la solución de algunos problemas se tienen claros los pasos del
proceso por realizar, pero la obtención de una solución no es tan rápida y clara.

Ejemplo: Se tienen seis cerillos colocados inicialmente en la forma.

Existe un espacio E donde cabe un cerillo. Un cerillo cualquiera puede avanzar en la


dirección que indica su cabeza si el espacio E esta delante de él, o bien puede saltar
un cerillo que venga en dirección contraria si el espacio E está detrás de dicho cerillo.
Las figuras que siguen ilustran estos movimientos:

Los dos tipos de movimientos son:

El problema consiste en obtener la configuración siguiente:

o-- o-- o-- E --o --o --o

El proceso consiste en una búsqueda de solución aplicando sucesivamente los dos


movimientos permitidos, tratando de no llegar a puntos muertos donde no se pueda
efectuar un movimiento permitido. El problema presentado es un ejemplo de resolver
un problema a través de una búsqueda de solución por los diversos estados posibles.

Problema: Una sucesión tipo Fibonacci es de la forma: 1, 1, 2, 3, 5, 8, 13, 21, 34,…etc.


Es decir, el primero y el segundo son iguales a 1, el tercero es la suma de los dos
anteriores, el cuarto es la suma de los dos anteriores y así sucesivamente. Se desean
generar los primeros 200 términos de una sucesión Fibonacci.

En la entrada tenemos un arreglo de tamaño 200 de números enteros que está vacío:
A[1] , A[2] , . . . , A[k]. El proceso consta de los pasos que siguen:

A[1]=1

A[2]=1

A[3]=A[1] + A[2]

A[4]=A[2]+A[3]

----------------------

A[N]= A[N-2] + A[N-1] SI N >= 3

Vous aimerez peut-être aussi