Fuente de la imagen: pixabay.com

Lenguajes de programación para el aprendizaje de algoritmos

Entonces, antes de comenzar con mi material de artillería pesada sobre idiomas y sus máscaras con algoritmos, primero sepa qué son los algoritmos.

Es posible que lo hayas escuchado en películas, especialmente películas como The Swordfish, o cualquier otra película de piratería en la que el pirata informático diga algo como si voy y cambio el algoritmo y agrego bla, bla y bla, entonces podré hackear la CIA y esas cosas

Pero eso es bastante galimatías. No hay tal cosa como eso. Los algoritmos no son solo para hackear.

Primero lo primero, los algoritmos solo estructuras de datos. Son un método o una forma de hacer cosas, más propensos a resolver problemas de algoritmos. Todavía confundido, déjame tomar esto de una manera más simple.

Piense en los algoritmos como fórmulas. Fórmulas que pueden ayudarlo a llevar a cabo su tarea sin mucha dificultad. Algo como lo siguiente:

(a + b) 2 = a 2 + 2ab + b 2

Pero estos son bastante simples. Los algoritmos adecuados son mucho más útiles que solo (a + b). Estos algoritmos se usan en bancos, pero no solo para seguridad y demás, sino en todas partes. Digamos que abre su cuenta en un banco.

Inserta X cantidad de dinero en él y desea saber la cantidad de interés que obtendría.

El contador en el banco simplemente pondría los números en cuanto a la cantidad, el número de período y la tasa de interés dentro de una caja en un software. El software de algoritmos se ejecuta y le da la salida.

Ahora, esta salida fue calculada por los algoritmos … el fragmento de código que ya tiene las fórmulas para calcular el interés. En nuestro caso por simple interés, sería:

A = P (1 + rt)

A = cantidad

P = Principal

R = Tasa de interés

T = Tiempo o n

Ahora, lo más probable es que haya tenido una idea de qué algoritmos son. Solo, una cosa a tener en cuenta si es un principiante en programación, que no se confunda y nunca se confunda con funciones y algoritmos. Ambas son dos cosas diferentes.

Si tiene alguna confusión, simplemente elimínelos y solo luego continúe.

Lenguajes, Matemáticas y Algoritmo

Pocas cosas a tener en cuenta, que la comprensión de los algoritmos matemáticos es lo más importante cuando desea escribir mejores algoritmos. Similar es el caso con algoritmos irrompibles o infalibles.

Estos algoritmos que se llaman irrompibles son solo piezas de código de matemática pura que no resolverán el problema sin las partes requeridas. Digamos por ejemplo: a + b = 20

Supongamos que a es 5 aquí. Ahora, si sé que a es 5, entonces este algoritmo puede ser fácilmente rompible. Sin embargo, si ni siquiera sé qué es, entonces todavía existe la posibilidad de que pueda descifrar este algoritmo.

La forma de descifrar sería algo así como la fuerza bruta. La fuerza bruta significa probar todas las combinaciones posibles.

Entonces, lo que haría es comenzar a adivinar números como 1 + 19, 2 + 18, 3 + 17, 10 + 10 y así sucesivamente. Entonces, ahora cualquiera de las dos cosas sucedería.

La primera probabilidad es que, dado que todas las combinaciones anteriores me darían la respuesta como 20, todas podrían descifrar este algoritmo. Pero, si el programador lo ha codificado para aceptar solo 5 + 15, entonces todas las combinaciones no funcionarían.

Pero de nuevo, como estoy probando todas las combinaciones posibles, habría un momento en que probaría 5 + 15 y eso rompería el algoritmo.

Una vez más, el programador podría intentar mantener el número limitado de intentos y mucha más estructura de seguridad en el medio, pero incluso para eso, tenemos muchas herramientas para evitarlo.

Algoritmo o mito irrompible?

Entonces, la pregunta es si hay algo llamado algoritmo irrompible o si es solo un mito. La respuesta es ambas. Recientemente estuve leyendo algunas cosas en Internet, donde leí una cita famosa:

"Imposible solo significa que uno no ha probado todas las soluciones"

Si. Así funcionan los algoritmos. Tomemos el caso anterior. Supongamos que hay otro algoritmo que funciona como:

a + b + c + d + e + f = (-9)

Si. Así es como se escribe un algoritmo irrompible. La cosa es que una computadora decente con una buena tarjeta gráfica puede descifrar esto fácilmente con oclhashcat. Pero eso es solo un ejemplo. Aquí las combinaciones pueden ser como cualquier cosa.

La respuesta es un Negativo nueve, lo que significa que en a, b, c, d, e y f, puede haber algunos números que son negativos, al menos un número grande se resta por un número pequeño.

Esto me lleva de vuelta a nuestros primeros ejemplos de algoritmos de a + b = 20. Incluso aquí, puede haber muchas más combinaciones como -1 + 21 o -29354+ 29374. Entendiendo mi punto.

Entonces, la teoría de los algoritmos irrompibles solo llega tan lejos como la mente humana pueda pensar. Los algoritmos irrompibles no son un mito. Un algoritmo bien escrito puede demorar hasta 2-3 o incluso más meses en descifrarse incluso por una computadora, como esas cosas encriptadas con WPA2.

La cuestión es que uno debe tener la paciencia para permanecer en paz mental hasta que se resuelva. Según las matemáticas, no existe tal algoritmo que no pueda ser descifrado. Solo necesita que alguien realmente se interese por él.

Los mejores idiomas para escribir algoritmos

Francamente, oficialmente no existe un lenguaje específico que sea excelente para escribir algoritmos.

Sin embargo, los lenguajes funcionales tienen una ventaja, ya que son mucho más superiores en términos de cálculos y matemáticas que otros lenguajes orientados a objetos. Pero, sin embargo, solo los algoritmos enumerarían algunos de ellos, que encuentro lo suficientemente buenos para codificar las matemáticas:

  • Python y Ruby

En primer lugar, recomendaría idiomas de alto nivel. Los idiomas de alto nivel son más fáciles de seguir. La razón por la cual estos lenguajes son más fáciles es porque, a diferencia de C o cualquier otro lenguaje de bajo nivel, estos lenguajes son más fáciles en términos de lectura.

Incluso su sintaxis es tan fácil, que solo un principiante puro la entendería sin que nadie les enseñe.

Todas las estructuras de datos comunes en estos idiomas tienen abstracciones. Incluso puede construir sus propias versiones implementadas y construir estructuras de datos sobre estructuras de datos. Estos idiomas se escriben dinámicamente.

Pero aquí solo hay un problema con el que puede ser más fácil para un programador comenzar, pero cuando ejecutan pruebas, pueden ver muchos errores que no vieron antes del tiempo de ejecución, a diferencia de otros lenguajes de bajo nivel.

  • C

C es exactamente lo contrario de Python aquí. Incluso puede confundirse aquí porque, aunque C es un lenguaje de alto nivel, algunas personas incluso lo consideran como un lenguaje de bajo nivel debido a su forma de codificación.

Incluso C es muy bueno en términos de abstracción aquí. Si le gustan los algoritmos, es posible que uno u otro día necesite aprender idiomas adecuados de bajo nivel como el ensamblado.

Señale que, si conoce muy bien C, sería bastante fácil migrar de C o cualquier tipo similar de lenguaje a lenguaje ensamblador. La administración de memoria también es muy buena en C y esto es muy importante para los algoritmos.

  • Java

Mucha gente realmente odia a Java por ser demasiado detallado y estricto. Incluso algunas personas dicen que carece de muchas características que están disponibles en lenguajes modernos y sofisticados. Pero esto no apunta realmente a preocuparse.

Java, a diferencia de Python, no es un lenguaje de tipo dinámico. Es un lenguaje de tipo estático y tiene mucha recolección de basura.

Esto significa que Java realmente mostrará errores durante la compilación e incluso antes del tiempo de ejecución. Y en comparación con otros lenguajes de alto nivel, Java tiene una pérdida de memoria extremadamente baja que obviamente puede repararse y no tiene fallas de segmentación.

  • C # y C ++

C # es casi similar a Java. Se parece más a Java con las capacidades del lenguaje moderno. A algunas personas les gusta usar incluso C ++. Pero es extremadamente innecesariamente complicado.

Algunas personas lo usan porque es difícil de entender, pero una vez que logras descifrarlo, la gente tendrá dificultades para entender tus algoritmos, lo que lo hace perfecto para el trabajo. C #, por otro lado, tiene recolección de basura similar a la de Java.

También hay otros lenguajes funcionales como Haskell (Familia Lisp) y Scala (basado en Java). Puedes leer mis otros blogs en ellos donde he escrito en detalle sobre cómo funcionan y esas cosas. Java, C y C ++ se ejecutan en una u otra máquina virtual.

Mientras que Ruby y Python son intérpretes en su intérprete.

Si me preguntas, preferiría C #, ya que tiene todas las capacidades modernas y también facilitaría la transferencia a lenguajes de programación más bajos. En términos científicos, tiene las propiedades de Java, Scala, C y lenguajes de nivel inferior.

Si solo desea comenzar con algoritmos, probablemente podría considerar usar Visual Studio Community Edition o Visual Studio Express. Probablemente tendrías que comprar eso, excepto que en el caso de Python, la mayoría de las cosas que deseas serían gratis.

Artículos recomendados:-

Aquí hay algunos artículos que lo ayudarán a obtener más detalles acerca de los lenguajes de programación para el aprendizaje de algoritmos, así que simplemente vaya al enlace.

  1. 8 preguntas y respuestas impresionantes de la entrevista del algoritmo
  2. Los mejores algoritmos y criptografía (ejemplos)
  3. Las mejores estructuras de datos y algoritmos C ++ | Lo esencial
  4. Entrevistas de estructuras de datos y algoritmos