El algoritmo.

No se puede negar. Todos han escuchado alguna vez, ya sea en las noticias o redes sociales, que hablan de «el algoritmo de X». Incluso aquellos con sus cadenitas, que buscan engañarlos. Si, en la era de la información, estamos dentro de lo que llamaríamos, la dictadura de los algoritmos. El gran problema es que muchos internautas, ni siquiera saben lo que es, salvo que tengas una profesión donde te toque tratar con ellos, como es mi caso. En fin, como a mi me gusta que el conocimiento sea libre, voy a tratar de explicar con peras y manzanas el concepto de algoritmo.

Vamos a partir por algo básico. Cualquier tarea que realicemos, sigue una serie de pasos, desde que la comenzamos, hasta terminarla -claro, habemos algunas que ni eso-. Dentro de esa serie, hay momentos en que tenemos que tomar una decisión sobre que hacer en caso de que se presente algo que no esperábamos, lo que llamaremos condición, y a eso le agregamos que hay algunas que se harán una y otra vez, lo que conoceremos como bucle. En esencia, esta es la descripción más básica y simple de lo que es un algoritmo. 

Voy a darles un ejemplo: levantarse en la mañana. El primer paso es -obviamente- abrir los ojos. Luego siguen: estirarse, ir a la ducha. Si hace mucho frio, usamos agua caliente, si no, agua tibia. Volvemos a vestirnos, escogemos la ropa, nos la colocamos y vamos a desayunar. Estos pasos pueden denotarse de la siguiente manera.

Inicio:
    Abrir los ojos
    Levantarse
    Ir a la ducha
    Si hace frio:
        Abrir agua caliente
    Si no:
        Abrir agua tibia
    Fin Si
    Secarse
    Escoger ropa
    Si es dia laboral:
         Ropa de trabajo
    Si no:
        Ropa informal
    Fin Si
    Ir a desayunar
Fin

Como pueden ver estimados lectores, la sencilla tarea de levantarse, se puede secuenciar en un algoritmo.

¿Pero de donde nace este concepto?

El algoritmo es un concepto matemático. Si bien los griegos ya lo conocían, al parecer fue en edad de oro de Medio Oriente, donde se formuló la primera explicación de este. En el siglo X, un matemático persa de nombre Al-Juarismi, describió las reglas del álgebra, como una serie de pasos a seguir para resolver problemas abstractos. En esencia los algoritmos, van muy de la mano de las matemáticas, con el correr de los siglos. En el mundo digital, desde los inicios de la computación moderna, han estado presente, pasando desde Kurt Gödel, hasta Alan Turing, aunque gran parte de las bases fueron cimentadas, por George Boole y su álgebra binaria. 

Y en esencia, las computadores, celulares y cualquier instrumento electrónico, entiende solo un idioma: ceros y unos. En base a eso, podemos hacer cosas desde usar una simple calculadora a tener juegos de gráficas deslumbrantes, pasando por la navegación de Internet. Ahora bien, hacer todo en base a ceros y unos, es algo complicado, por lo que durante gran parte del siglo XX, se trabajó en formas, más sencillas de interactuar con las máquinas, usando el lenguaje natural. De ahí nacen los lenguajes de programación, que permiten desarrollar lo mencionado anteriormente y muchas otras cosas mas. Todas basadas en algoritmos.

Las partes de un algoritmo.

En esencia, los algoritmos cuenta de forma general con 3 partes.

  1. Entrada: Son los datos que se ingresan para que el algoritmo pueda operar.
  2. Proceso: La operación lógica formal en que el algoritmo trabajará con los datos de entrada
  3. Salida: Los datos del resultados que el algoritmo entrega.

Con lo anterior, podemos ver que los programas computacionales (software) son un conjunto de algoritmos, que procesan datos de entrada, para darnos una salida. El ejemplo mas sencillo es cuando subes una foto desde tu teléfono (entrada) a alguna aplicación como Instagram para que se vea en el perfil (salida), donde además podremos rellenar una caja de texto. En la parte que el usuario no ve, estos campos -la foto y el texto- el programa almacena esos datos en espacios de memoria, llamados variables. Una vez almacenadas, empiezan los procesos internos, que analizan el contenido de éstas, para luego publicarla. En estos procesos encontramos varios otros conceptos que describen un algoritmo las cuales comento a continuación.

  1. Variables: Las mencionadas arriba, son espacios de memoria que almacenan los datos de entrada para su procesamiento por los algoritmos y también la información de salida (lo que se ve en pantalla). Pueden ser desde números hasta multimedia.
  2. Constantes: Similares a las variables, con la salvedad que son valores que no cambian dentro del programa, a menos que el programador haga un ajuste al algoritmo. Estos valores, por lo general, funcionan como valores de control dentro del algoritmo.

Ahora bien, hay que recordar que los datos de entrada, sea texto, números, hasta fotos y videos, son codificados en secuencias numéricas y traducidas al lenguaje binario, con el que la máquina realiza cálculos. Un ejemplo es si la subida de fotos tiene un límite de peso (por ejemplo 2 megabytes), evaluará esta y procederá al proceso correspondiente (si subirla, como está, reducirla de tamaño y calidad, o bien, devolver un mensaje de advertencia u error, dependiendo del caso). Para que esto ocurra, dentro de la estructura del algoritmo, existen los denominados operadores, los cuáles se utilizan para calcular, ordenar y evaluar los valores de variables y constantes.

Un ejemplo básico es el de la suma.

Inicio
   Int a = 2
   Int b = 2
   Int suma = a + b
   Imprimir Suma
Fin


Lo que realiza el algoritmo de arriba es una suma basica entre dos valores. Se usan 3 variables: a, b y suma, que es el resultado que se vería en pantalla. Podemos cambiarles los valores y devolvera la suma de estos. Ahora un poco más complicado, con la operación de la división que tiene condiciones especiales. Primero no usaremos numeros enteros, porque habrá ocasiones en que devolverá decimales (ejemplo sería el 10 dividido por 3). Además agregaremos una condicion.

Inicio
   Float a
   Float b
   Si b <> 0:
       Float division = a / b
       Imprimir division.
   Si no:
       Imprimir "No se puede dividir por cero"
   Fin Si
Fin   

En este ejemplo, podemos ver que agregamos la llamada condición. Estas se usan para evaluar situaciones en que se pueden dar errores. En este caso, por regla matemática, no existe la división por cero, por lo que, en caso de que un valor en el divisor, sea cero, enviará un mensaje de error. Esto es como escoger dos caminos distintos en una intersección. Dependerá de donde se quiera ir, será la respuesta (o bien la más conveniente). Volviendo a la división, lo que evaluamos es que el valor de b, sea distinto (<>) a 0, para realizar la operación. En caso contrario, se saltará ese paso y advertirá que no se puede. 

Entramos entonces a dos nuevos conceptos que se definen a continuación.

  1. Operadores: Son los símbolos que nos permiten evaluar y resolver, valga la redundancia, operaciones presentadas dentro del diseño de un algoritmo. Los hay aritméticos: suma (+), resta (-), multiplicación (*) y división (/), pero también los condicionales: mayor (>), menor (<), mayor igual (>=), menor igual (<=), igual (= o == dependiendo del lenguaje de programación), distinto (<> o !=, dependiendo del lenguaje) y lógicos, también llamados booleanos (and, or y not, entre otros).
  2. Condiciones: son también llamadas decisiones. Se denotan con un si, y se aplica algún operador de los mencionados mas arriba (condicionales) que comparan dos o mas valores, para decidir que opción tomar dentro del algoritmo, para llegar a la resolución de un problema.

Ahora bien, retomemos el algoritmo de levantarse, visto anteriormente. Es una tarea que hacemos, prácticamente todos los días. Y como cualquier tarea diaria organizada, solemos tener un horario determinado para realizarlas. Pues bien, dentro del mismo día, hacemos varias tareas, algunas incluso que se repiten una y otra vez, hasta que se complete o bien ocurra algo que nos haga saltar a otra. En la computación y en los algoritmos propiamente tal, las tareas repetitivas son conocidas como ciclosbucles. De por si, el hecho de encender un dispositivo es un bucle donde se activan todas las tareas y procesos necesarios para su funcionamiento. Y muchas de ellas, están separadas del proceso principal, siendo invocadas al momento de utilizarse. Son las subrutinasfunciones, que permiten separar tareas que realizaremos mas de una vez en el algoritmo principal. 

Tomemos el ejemplo siguiente: al ingresar un numero, el programa debe resolver si es un número primo o no.

Inicio:
	Subrutina esPrimo (numero):
	    Entero num = numero
		Entero contador = 0;
		Entero x = 1

		Mientras x <= num:
	       // Utilizamos una función computacional que extrae el resto de una división. Para que el contador suba, debe quedar en cero. Esto es, si un numero no es primo, habrán otros valores cuyo resto de la división, será 0  
			Si num Mod 2 == 0:
				contador = contador + 1
			Fin Si
			x = x + 1
		Fin Mientras

		Si  contador == 2:
			retorna Verdadero
		Si no:
			retorna Falso
		Fin Si
	Fin Subrutina

	Entero numero
	String respuesta
	Escribe "Ingresar numero: " -> numero
	Leer numero

	respuesta = esPrimo(numero)
        Si respuesta == Verdadero:
            Imprime "Es primo"
        Si no:
            Imprime "No es primo" 
	Fin Si
Fin 

En el ejemplo de arriba, se incluyen los dos conceptos mencionados anteriormente. La subrutina como tal, es un algoritmo separado del principal y que este último, solo invoca cuando es requerido. En la mayoría de las aplicaciones, muchas tareas se realizan más de una vez (como subir una foto a Instagram), por lo que se separan del programa principal y son llamados en los momentos en que se requieren. Además dentro del algoritmo que busca los números primos se usa un bucle, el cual consiste en un proceso que se repite hasta que la condición indicada,  en este caso, que la constante x tenga un valor menor o igual al numero que ingresa por parámetro (entre paréntesis en la subrutina), se detendrá el proceso y pasará al siguiente bloque de instrucciones. En esencia, un bucle de este tipo lo vemos cuando encendemos el dispositivo o entramos en una aplicación. A menos que la cerremos, seguirá funcionando y haciendo las tareas dentro de este. 

Terminando.

Ciertamente se me quedan varias cosas en el tintero, como los tipos de bucle y condición y todo lo que tiene que ver con otros paradigmas de programación, pero la idea de este post, es mostrarles lo que hay detrás de la palabra algoritmo que tanto mencionan en los medios (que son más complejos, pero cuya base es la que les he mostrado en este post). Sin más que agregar, les dejo un ejemplo en javascript del algoritmo de números primos para que puedan verlo y comprobar su funcionamiento, el que encontrarán pinchando aquí.

Cuídense de coronachan, especialmente los que no quieren tener un septiembre/junio. Nadie más lo hará por uno mismo, y además, su entorno estará mas seguro. Es cosa de lógica. 

Anuncio publicitario

Su comentario es bienvenido en este humilde blog :)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

Subir ↑

Victor Aguilar-Chang

Artículos, comentarios y pensamientos que contienen de todo un poco, escritos una persona común.

Pluma Hoplita

"Sólo los muertos han visto el fin de la guerra" Santaya

La túnica de Neso

Departamento de Latín IES La Senda Quart de Poblet

Welcome to the Madhouse

Sitio web de videojuegos, cine, anime, series de TV y tendencias.

Red Latinoamericana de Cultura Científica

Reunimos y amplificamos esfuerzos de divulgación científica de profesionales de las ciencias y tecnología de diversos países de América Latina

Cuentos Cuánticos

Un sitio donde los cuentos de ciencia están contados y no contados al mismo tiempo

milesdemillones

la materia de las estrellas cobra conciencia y opina

A %d blogueros les gusta esto: