# data[].attributes.body
Es una lista genérica, paso a paso, de instrucciones para resolver un problema. Es un método para resolver cualquier caso del problema de tal manera que dada una entrada particular, el algoritmo produzca el resultado deseado.

# data[].attributes.headline
Cómo se realiza el análisis de los problemas de un algoritmo

# data[].attributes.subject
Cómo se realiza el análisis de los problemas de un algoritmo

# data[].attributes.body
Digamos que tenemos un problema P para el cual necesitamos desarrollar un algoritmo A que solucione a P. Una persona sin mucha experiencia en la industria del desarrollo del software podría codear miles de algoritmos para ese mismo problema; sin pensarlo mucho, con que tan solo obtengan el output correcto. Sin embargo, esto puede que funcione para problemas con inputs relativamente pequeños pero cuando esos algoritmos son usados industrialmente, el análisis entre los algoritmos sí pesa.

# data[].attributes.attachment_link.readable_text
Digamos que tenemos un problema P para el cual necesitamos desarrollar un algoritmo A que solucione a P. Una persona sin mucha experiencia en la industria del desarrollo del software podría codear miles de algoritmos para ese mismo problema; sin pensarlo mucho, con que tan solo obtengan el output correcto. Sin embargo, esto puede que funcione para problemas con inputs relativamente pequeños pero cuando esos algoritmos son usados industrialmente, el análisis entre los algoritmos sí pesa.

Con el análisis de algoritmos, podemos darnos una idea de qué tan rápido va a terminar el algoritmo, qué tan optimizado está, qué tanto necesita de espacio en memoria, entre otros aspectos. Para ilustrar lo anterior, supongamos que tenemos el siguiente problema:

Si ustedes se van por una solución rápida (y naive) para el Problema 1, podríamos hacer que el algoritmo A tenga el siguiente enfoque: analizar todos los elementos contra todos, es decir, tomar arr[0] y validar si la suma arr[0]+ arr[1,..., n-1]= k, para después tomar arr[1] e ir haciendo esa comparación todo el array.

El enfoque del algoritmo A es válido, pero resulta que podemos hacer otro algoritmo B el cual a diferencia del pasado, tenga la siguiente técnica: haciendo uso de una hashtable, podemos revisar si se encuentra la diferencia del actual elemento (que estamos iterando) y k. Es decir, en la primera iteración, mapeamos el índice (0) de arr con la diferencia arr[0]- k y lo guardamos en la hashtable. Con esto, podemos preguntar siempre si arr[ i]- k se encuentra en la hashtable, si es así, el algoritmo se detiene y devuelve los índices, de lo contrario, sigue iterando hasta encontrar o fallar.
Bien, algunos ya se podrán dar cuenta la diferencia entre A y B, si no la ven, déjenme explicarles. Con A, el checar cada elemento con los otros, estamos haciendo un total de iteraciones, siendo n el tamaño de elementos en arr; sin embargo, con el algoritmo B estamos haciendo un total de n iteraciones. Si ustedes comparan, es mucho más barato (o va a trabajar menos la computadora) el algoritmo B.

Complejidad de tiempos

La complejidad de tiempos (o time complexity como es mayormente conocido) significa en pocas palabras el trabajo que tiene que hacer el algoritmo para llegar a la solución.
Para ello se utilizan las notaciones asintóticas. Una muy conocida es la Big O. Esta función nos brinda la cota máxima que nuestro algoritmo puede tener de complejidad en tiempos, sin embargo, en industria, esta función debe ser lo más apegada posible a la función del algoritmo (más como Big Theta, pero no cubriremos más funciones debido que tendríamos que profundizar bastante). Además, Big O desprecia números constantes a excepción del 1 y toma en cuenta solamente variables clave.
La siguiente tabla muestra las funciones más importantes, las cuales son: O(1), O( n),O( n² ),O( n³ ),O( n^n ),O(log⁡ n),y O(√ n).

Esto nos muestra que si un algoritmo A tiene una complejidad de O( n), con inputs relativamente largos (y que se utilizan en industria) nunca será más pesado que un algoritmo A' con complejidad O( n^ n).
Para ilustrar, las funciones Big O de los algoritmos A y B de la sección pasada son los siguientes: como el algoritmo A que mencionamos que hace un total de n( n-1)/2 iteraciones, y debido que Big O desprecia constantes, su tiempo de complejidad sería de:

y como n²>n entonces el resultado es O(n²).

Para el algoritmo B dijimos que hace un total de n iteraciones, y trivialmente se obtiene su tiempo de complejidad de .
Esto nos dice, a grandes rasgos, que el algoritmo B va a correr en menos tiempo que A para inputs muy grandes.

Conclusión

El análisis de la complejidad de un algoritmo en el que estemos trabajando es muy importante, ya que si el input alguna vez llega a ser más grande de lo normal, un algoritmo como A, podría tardar muchísimo tiempo. Esto nos sirve mucho para mantener nuestras aplicaciones con la mejor optimización posible.

# data[].attributes.attachment_link.description
Digamos que tenemos un problema P para el cual necesitamos desarrollar un algoritmo A que solucione a P. Una persona sin mucha experiencia en la industria del desarrollo del software podría codear miles de algoritmos para ese mismo problema; sin pensarlo mucho, con que tan solo obtengan el output correcto.

# data[].attributes.headline
Cuáles son las reglas de la Elaboración de Algoritmos

# data[].attributes.subject
Cuáles son las reglas de la Elaboración de Algoritmos

# data[].attributes.body
Para la realización de un algoritmo es necesario realizar una secuencia de pasos para llegar a cumplir con la resolución de un problema dado. Para ello, definiremos los siguientes pasos:

1. Análisis previo del Problema.

2. Definición de Requerimientos.

3. Identificación de los Módulos.

4. Realización de los Algoritmos.

5. Implementación de los Algoritmos.

# data[].attributes.body
ESTRUCTURAS CONDICIONALES O DE SELECCIÓN

Este tipo de estructuras ejecuta un bloque de código dependiendo de una o varias condiciones.

# data[].attributes.attachment_link.readable_text
Hola querido lector y entusiasta de la programación. En este post te mostrare las estructuras de control que son la base para la programación estructurada. Las condiciones y los ciclos. Para hablar de este tema no tomare ningún lenguaje en concreto, es mas dare ejemplos de varios lenguajes y me referiré a los conceptos basado en el teorema de programación estructurada, teniendo siempre presente que estas estructuras de control existen o se pueden recrear en cualquier lenguaje de programación.

Estructuras condicionales o de selección

Este tipo de estructuras ejecuta un bloque de código dependiendo de una o varias condiciones.

Los siguientes son ejemplos de una condición simple, con opción de ejecución en caso de que la condición sea verdadera o falsa (IF ELSE), ya que podemos hacer la estructura mas sencilla solo validando la condición y no hacer nada en caso de que no se cumpla la condición (IF) ya que la instrucción ELSE es opcional.

Para el ejemplo vamos a utilizar dos variables y vamos a suponer que tienen asignado un valor numérico. el objetivo es validar si la primera variable es mayor a la segunda.

Para los ejemplos utilizare los lenguajes que yo mas utilizo, si quieres preguntar por algún otro o quieres comentar con tu ejemplo, déjalo al finalizar el post en los comentarios.

Nota: Tampoco mostrare las condiciones "inline" ya que esto sera tema para otra ocasión al ser un poco mas complejo.

Estas condiciones simples se pueden volver mas complejas, a medida que agregamos mas condiciones. Ademas se pueden anidar una dentro de otra, miremos un ejemplo en pseudocodigo

IF (Condición 1) THEN
    (Código si condición 1)
ELSEIF (Condición 2) THEN
    (Código si condición 2)
ELSEIF (Condición 3) THEN
    (Código si condición 3)
ELSE
    (Código si ninguna de las condiciones se cumplió)
END IF

Estructuras iterativas o de bucles

Estas estructuras repiten un fragmento de código N veces, dependiendo de la condición que se este efectuando. Mientras la condición se cumpla el control ejecutara el código, una vez la condición deje de ser cierta sale del ciclo.

Hay algunos tipos de estructuras que no voy a ejemplificar aquí, como lo son el do-while y el do-until, ya que en psudocodigo y en la teoría son estructuras diferentes, pero en los lenguajes modernos son las estructuras que pasare a mencionar, pero con algunos cambios en las condiciones que hace que se comporten de la manera deseada.

# data[].attributes.attachment_link.title
Estructuras básicas de programación * Jhontona.com

# data[].attributes.attachment_link.description
Hola querido lector y entusiasta de la programación. En este post te mostrare las estructuras de control que son la base para la programación estructurada. Las condiciones y los ciclos.

# data[].attributes.body
Iniciamos con esta estructura de control, ya que es la mas usada, sencilla y fácil de entender.
Lo que permite esta estructura es hacer una evaluación simple, retornando como respuesta un valor (falso o verdadero).

# data[].attributes.body
Las estructuras selectivas dobles están compuesta únicamente de una sola condición, si es verdadera ejecutara la acción o acciones y si la condición es falsa ejecutara las acciones para la condición falsa. Esta estructura selectiva solo se debe utilizar únicamente cuando existen dos condiciones, si hubieran mas de dos condiciones se puede utilizar varias selectivas simples o una selectiva múltiple.

if (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

else

acción (si la condición entre paréntesis es falsa se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

end

# data[].attributes.attachment_link.readable_text
Las estructuras selectivas se utilizan para tomar decisiones lógicas; de ahí que se suelan denominar también estructuras de decisión o alternativas y son utilizadas en todos los lenguajes de programación, en este caso veremos estructuras selectivas para el lenguaje de programación Ruby, creado por el programador japonés Yukihiro "Matz" Matsumoto, quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995.En el círculo de amigos de Matsumoto se le puso el nombre de "Ruby" (en español rubí) como broma aludiendo al lenguaje de programación "Perl" ( perla)

En las estructuras selectivas se evalúan una condición y en función del resultado de la misma se realiza una opción u otra. Las condiciones se especifican usando expresiones lógicas. La representación de una estructura selectiva se hace con palabras en pseudocódigo (if, then, else o bien en español si, entonces, si_no), las estructuras selectivas pueden ser:

Simples

Las estructuras selectivas simples o condicionales están compuesta únicamente de una sola condición si es verdadera ejecutara la acción o acciones si la condición es falsa no hará nada.

if (condición) entre paréntesis esta la condición que se debe evaluar

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias acciones)
end
Antes de mostrar el ejemplo vamos a explicar algunos comandos que vamos a utilizar:

# => este comando nos permite poner un comentario, puede ser a principio de linea o en cualquier posición de ella.

puts => este comando nos permite imprimir cualquier texto en pantalla, puede ser el resultado de una operación o un texto escrito entre comillas.

Ejemplo:

edad = 19 # asignamos un valor a la variable edad

if (edad > 17)

puts "Es mayor de edad"
end
Si ejecutamos el programa que hemos desarrollado el resultado seria: Es mayor de edad, porque, la condición que esta entre paréntesis es verdadera, porque, edad que tiene asignado 19 es mayor a 17, en cambio, si el valor asignado a la variable edad fuera menor a 18, no mostraría ningún resultado.

Dobles

Las estructuras selectivas dobles están compuesta únicamente de una sola condición, si es verdadera ejecutara la acción o acciones y si la condición es falsa ejecutara las acciones para la condición falsa. Esta estructura selectiva solo se debe utilizar únicamente cuando existen dos condiciones, si hubieran mas de dos condiciones se puede utilizar varias selectivas simples o una selectiva múltiple.

if (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)
else
acción (si la condición entre paréntesis es falsa se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)
end
Ejemplo:

Siguiendo con el ejemplo anterior asignaremos el mismo valor a la variable edad

edad = 19 # asignamos un valor a la variable edad

if (edad > 17)

puts "Es mayor de edad"
else
puts "Es menor de edad"
end
Si ejecutamos el programa que hemos desarrollado el resultado seria: Es mayor de edad, porque, la condición que esta entre paréntesis es verdadera, porque, edad que tiene asignado 19 es mayor a 17, en cambio, si el valor asignado a la variable edad fuera menor a 18, el resultado seria Es menor de edad, porque, la condición es falsa.

Múltiples

Las estructuras selectivas múltiples o anidadas están compuesta múltiples selectivas simples que están unidas por el comando elsif el resultado que se obtiene con una selectiva multiple se puede obtener con varias selectivas simples, entonces, ¿cual es la diferencia? el codigo es mas pequeño, aunque, yo siempre he recomendado a mis alumnos que cuando recien se esta aprendiendo a programar es recomendable que al principio se trabaje con selectivas simples, a medida que se va aprendiendo y ganando destreza se puede comenzar a utilizar las selectivas multiples en los casos que ellos crean conveniente y necesarios.

if (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

elsif (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

elsif (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)
end
Ejemplo:

Siguiendo con el ejemplo anterior asignaremos el mismo valor a la variable edad

edad = 19 # asignamos un valor a la variable edad

if (edad > 17)

puts "Es mayor de edad"

elsif (edad < 18)

puts "Es menor de edad"
end
Si ejecutamos el programa que hemos desarrollado el resultado seria: Es mayor de edad, porque, la condición que esta entre paréntesis de la primera condición es verdadera, porque, en las selectivas múltiples cada condición debe ser única, porque, cuando ingresa en una de ellas ahí termina el programa, si el valor asignado a la variable edad fuera menor a 18, el resultado seria Es menor de edad, porque, hubiera ingresado en la segunda condición y no en la primera.

Seguiremos compartiendo mas información con ejemplos de estructuras selectivas mas complejas para que el proceso de aprendizaje de programación en Ruby o cualquier otro lenguaje sea mucho mas fácil y amigable para ustedes. Apoyanos con un like en nuestro fan page y suscribiendote a nuestro blog, porque, el saber que otros valoran el trabajo y el esfuerzo que uno realiza es la mayor recompensa que se puede recibir, porque, "el conocimiento es un bien que crece a medida que se comparte".

# data[].attributes.attachment_link.title
Estructuras selectivas: simple, doble y multiple

# data[].attributes.attachment_link.description
Las estructuras selectivas se utilizan para tomar decisiones lógicas; de ahí que se suelan denominar también estructuras de decisión o alternativas y son utilizadas en todos los lenguajes de programación, en este caso veremos estructuras selectivas para el lenguaje de programación Ruby, creado por el programador japonés Yukihiro "Matz" Matsumoto,

# data[].attributes.body
Este control tiene la característica que desde el inicio se le pude indicar cuantas repeticiones debe hacer, al hacerlo de esta manera creamos una estructura de control Para(FOR), es decir con un numero definido de iteraciones. Si la validación la hacemos al final se convierte en un ciclo repetir, en donde la condición se valida al final (este también se puede trabajar con la estructura de control mientras, que la veremos después de esta).

# data[].attributes.body
Las estructuras selectivas múltiples o anidadas están compuesta múltiples selectivas simples que están unidas por el comando elsif el resultado que se obtiene con una selectiva multiple se puede obtener con varias selectivas simples, entonces, ¿cual es la diferencia? el codigo es mas pequeño, aunque, yo siempre he recomendado a mis alumnos que cuando recien se esta aprendiendo a programar es recomendable que al principio se trabaje con selectivas simples, a medida que se va aprendiendo y ganando destreza se puede comenzar a utilizar las selectivas multiples en los casos que ellos crean conveniente y necesarios.

if (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

elsif (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

elsif (condición)

acción (si la condición entre paréntesis es verdadera se ejecutara la acción o acciones, porque, puede estar conformado por varias lineas)

end