algorithmEmpezando con el algoritmo


Observaciones

Introducción a los algoritmos

Los algoritmos son omnipresentes en Ciencias de la Computación e Ingeniería de Software. La selección de algoritmos y estructuras de datos adecuados mejora la eficiencia de nuestro programa en costos y tiempo.

¿Qué es un algoritmo? Informalmente, un algoritmo es un procedimiento para realizar una tarea específica. [Skiena: 2008: ADM: 1410219] Específicamente, un algoritmo es un procedimiento computacional bien definido , que toma algún valor (o conjunto de valores) como entrada y produce algún valor, o un conjunto de valores, como salida . Un algoritmo es, por lo tanto, una secuencia de pasos computacionales que transforman la entrada en la salida. Cormen et. Alabama. no comenta explícitamente que un algoritmo no necesariamente requiere una entrada. [Cormen: 2001: IA: 580470]

Formalmente, un algoritmo debe satisfacer cinco características: [Knuth: 1997: ACP: 260999]

  1. Finitud Un algoritmo siempre debe terminar después de un número finito de pasos.
  2. La definición Cada paso de un algoritmo debe ser definido con precisión; Las acciones a realizar deben ser especificadas rigurosamente. Es esta cualidad a la que [Cormen: 2001: IA: 580470] se refiere con el término "bien definido".
  3. Entrada Un algoritmo tiene cero o más entradas . Estas son cantidades que se le dan al algoritmo inicialmente antes de que comience o dinámicamente mientras se ejecuta.
  4. Salida . Un algoritmo tiene una o más salidas . Estas son cantidades que tienen una relación específica con las entradas. Esperamos que un algoritmo produzca la misma salida cuando se le dé la misma entrada una y otra vez.
  5. Efectividad También se espera que un algoritmo sea efectivo . Sus operaciones deben ser lo suficientemente básicas como para que se puedan hacer exactamente en principio y en un tiempo finito por alguien que use lápiz y papel.

Un procedimiento que carece de finitud pero que satisface todas las demás características de un algoritmo puede denominarse método computacional . [Knuth: 1997: ACP: 260999]

Un problema algorítmico de muestra.

Un problema algorítmico se especifica al describir el conjunto completo de instancias en las que debe trabajar y su salida después de ejecutarse en una de estas instancias. Esta distinción, entre un problema y una instancia de un problema, es fundamental. El problema algorítmico conocido como clasificación se define de la siguiente manera: [Skiena: 2008: ADM: 1410219]

  • Problema: la clasificación
  • Entrada: Una secuencia de n teclas, a_1, a_2, ..., a_n .
  • Salida: la reordenación de la secuencia de entrada tal que a'_1 <= a'_2 <= ... <= a'_{n-1} <= a'_n

Una instancia de clasificación podría ser una matriz de cadenas, como { Haskell, Emacs } o una secuencia de números como { 154, 245, 1337 } .

Comenzando con el algoritmo de zumbido simple de Fizz en Swift

Para aquellos de ustedes que son nuevos en la programación en Swift y aquellos que vienen de diferentes bases de programación, como Python o Java, este artículo debería ser muy útil. En este post, discutiremos una solución simple para implementar algoritmos swift.

Fizz Buzz

Es posible que haya visto a Fizz Buzz escrito como Fizz Buzz, FizzBuzz o Fizz-Buzz; Todos se refieren a lo mismo. Esa "cosa" es el tema principal de discusión hoy. En primer lugar, ¿qué es FizzBuzz?

Esta es una pregunta común que surge en las entrevistas de trabajo.

Imagina una serie de un número del 1 al 10.

1 2 3 4 5 6 7 8 9 10
 

Fizz y Buzz se refieren a cualquier número que sea múltiplo de 3 y 5 respectivamente. En otras palabras, si un número es divisible por 3, se sustituye por fizz; si un número es divisible por 5, se sustituye por un zumbido. Si un número es simultáneamente un múltiplo de 3 y 5, el número se reemplaza con "zumbido de fizz". En esencia, emula el famoso juego infantil "fizz buzz".

Para solucionar este problema, abra Xcode para crear un nuevo campo de juego e inicie una matriz como la siguiente:

// for example 
let number  = [1,2,3,4,5]
// here 3 is fizz and 5 is buzz
 

Para encontrar todo el fizz y el zumbido, debemos recorrer la matriz y comprobar qué números son fizz y cuáles son el zumbido. Para hacer esto, cree un bucle for para iterar a través de la matriz que hemos inicializado:

for num in number {
  // Body and calculation goes here
}
 

Después de esto, simplemente podemos usar la condición "si no" y el operador del módulo en swift, es decir -% para localizar el fizz y el zumbido

for num in number {
  if num % 3 == 0 {
    print("\(num) fizz")
  } else {
    print(num)
  }
}
 

¡Genial! Puedes ir a la consola de depuración en el área de juegos de Xcode para ver el resultado. Encontrarás que los "fizzes" se han resuelto en tu matriz.

Para la parte Buzz, usaremos la misma técnica. Inténtelo antes de desplazarse por el artículo: puede comparar sus resultados con este artículo una vez que haya terminado de hacer esto.

for num in number {
  if num % 3 == 0 {
    print("\(num) fizz")
  } else if num % 5 == 0 {
    print("\(num) buzz")
  } else {
    print(num)
  }
}
 

Compruebe la salida!

Es bastante sencillo: dividiste el número entre 3, efervescencia y dividiste el número entre 5, zumbido. Ahora, aumenta los números en la matriz

let number = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
 

Aumentamos el rango de números de 1-10 a 1-15 para demostrar el concepto de "zumbido de fizz". Dado que 15 es un múltiplo de 3 y 5, el número debe reemplazarse con "zumbido de chispa". Pruébalo tú mismo y comprueba la respuesta!

Aquí está la solución:

for num in number {
  if num % 3 == 0 && num % 5 == 0 {
    print("\(num) fizz buzz")
  } else if num % 3 == 0 {
    print("\(num) fizz")
  } else if num % 5 == 0 {
    print("\(num) buzz")
  } else {
    print(num)
  }
}
 

Espera ... ¡aún no ha terminado! Todo el propósito del algoritmo es personalizar el tiempo de ejecución correctamente. Imagínese si el rango aumenta de 1-15 a 1-100. El compilador verificará cada número para determinar si es divisible entre 3 o 5. Luego volverá a revisar los números para verificar si los números son divisibles entre 3 y 5. El código esencialmente tendría que pasar por cada número en la matriz dos veces - tendría que ejecutar los números por 3 primero y luego por 5. Para acelerar el proceso, simplemente podemos decirle a nuestro código que divida los números por 15 directamente.

Aquí está el código final:

for num in number {
  if num % 15 == 0 {
    print("\(num) fizz buzz")
  } else if num % 3 == 0 {
    print("\(num) fizz")
  } else if num % 5 == 0 {
    print("\(num) buzz")
  } else {
    print(num)
  }
}
 

Tan simple como eso, puede usar cualquier idioma de su elección y comenzar

Disfrutar de la codificación