Source de l'image: pixabay.com

Langages de programmation pour l'apprentissage des algorithmes

Donc, avant de commencer avec mes trucs d'artillerie lourde sur les langues et leurs masques avec des algorithmes, faites d'abord savoir quels sont les algorithmes.

Vous l'avez peut-être entendu dans des films, en particulier des films comme The Swordfish, ou tout autre film de piratage wannabe dans lequel le pirate déclare quelque chose comme si je vais changer l'algorithme et ajouter bla bla et bla alors je pourrai pirater la CIA et d'autres choses.

Mais c'est du charabia. Il n'y a rien de tel comme ça. Les algorithmes ne sont pas uniquement destinés au piratage.

Tout d'abord, les algorithmes ne sont que des structures de données. Ils sont une méthode ou un moyen de faire les choses, plus susceptibles de résoudre des problèmes d'algorithmes. Toujours confus, permettez-moi de prendre cela d'une manière plus simple.

Considérez les algorithmes comme des formules. Des formules qui peuvent vous aider à poursuivre votre tâche sans trop tarder. Quelque chose comme ceci:

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

Mais ce sont assez simples. Les algorithmes appropriés sont beaucoup plus utiles que simplement (a + b). Ces algorithmes sont utilisés dans les banques, mais pas seulement pour la sécurité et d'autres choses, mais partout. Disons que vous ouvrez votre compte dans une banque.

Vous y insérez X montant d'argent et vous voulez connaître le montant d'intérêt que vous obtiendrez.

Le comptable de la banque vient alors de mettre les chiffres sur le montant, le nombre de périodes et le taux d'intérêt dans une boîte d'un logiciel. Le logiciel d'algorithmes s'exécute et vous donne la sortie.

Maintenant, cette sortie a été calculée par les algorithmes… le morceau de code qui a déjà les formules pour calculer l'intérêt. Dans notre cas de simple intérêt, ce serait:

A = P (1 + rt)

A = montant

P = Principal

R = taux d'intérêt

T = Temps ou n

Maintenant, vous avez probablement dû vous faire une idée des algorithmes. Juste une chose à garder à l'esprit si vous êtes un débutant en programmation, cela ne se confond pas et ne se confond jamais avec les fonctions et les algorithmes. Les deux sont deux choses différentes.

Si vous avez une confusion, faites-les simplement disparaître, puis continuez.

Langages, mathématiques et algorithme

Peu de choses à garder à l'esprit, que la compréhension des algorithmes mathématiques est la plus importante lorsque vous souhaitez écrire de meilleurs algorithmes. Il en va de même pour les algorithmes incassables ou infaillibles.

Ces algorithmes appelés incassables ne sont que des morceaux de code de mathématiques pures qui ne résoudront pas le problème sans les pièces requises. Disons par exemple: a + b = 20

Supposons que a est 5 ici. Maintenant, ici, si je sais que a vaut 5, alors cet algorithme peut être facilement cassé. Mais cependant, si je ne sais même pas ce qu'est un, alors il y a toujours une possibilité que je puisse casser cet algorithme.

Le moyen de craquer serait quelque chose comme je le forcerais brutalement. La force brute signifie essayer toutes les combinaisons possibles.

Donc ce que je ferais, c'est de commencer à deviner des nombres comme 1 + 19, 2 + 18, 3 + 17, 10 + 10 et ainsi de suite. Donc, maintenant, l'une ou l'autre des deux choses se produirait.

La première probabilité est que, comme toutes les combinaisons ci-dessus me donneraient la réponse 20, toutes pourraient casser cet algorithme. Mais, si le programmeur l'a codé en dur pour n'accepter que 5 + 15, toutes les combinaisons ne fonctionneraient pas.

Mais encore une fois, puisque j'essaie toutes les combinaisons possibles, il y aurait un moment où j'essaierais 5 + 15 et cela casserait l'algorithme.

Encore une fois, le programmeur pourrait essayer de garder le nombre limité d'essais et beaucoup plus de structure de sécurité entre les deux, mais même pour cela, nous avons beaucoup d'outils pour le contourner.

Algorithme ou mythe incassable?

Donc, la question est de savoir s'il existe quelque chose appelé algorithme incassable ou s'il s'agit simplement d'un mythe. La réponse est les deux. Je lisais récemment des trucs sur Internet, où j'ai lu une citation célèbre:

"Impossible signifie seulement qu'on n'a pas essayé toutes les solutions"

Ouais. Voilà comment fonctionnent les algorithmes. Prenons le cas ci-dessus. Supposons qu'il existe un autre algorithme qui se présente comme suit:

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

Oui. C'est ainsi que vous écrivez un algorithme incassable. La chose est qu'un ordinateur décent avec une bonne carte graphique peut facilement le casser avec oclhashcat. Mais ce n'est qu'un exemple. Ici, les combinaisons peuvent être comme n'importe quoi.

La réponse est un neuf négatif, ce qui signifie qu'en a, b, c, d, e et f, il peut y avoir quelques nombres négatifs, au moins un grand nombre étant soustrait par un petit nombre.

Cela me ramène à nos premiers exemples d'algorithmes de a + b = 20. Même ici, il peut y avoir beaucoup plus de combinaisons comme -1 + 21 ou -29354+ 29374. Comprendre.

Ainsi, la théorie des algorithmes incassables ne va que dans la mesure où l'esprit humain peut penser. Les algorithmes incassables ne sont pas un mythe. Un algorithme bien écrit peut prendre jusqu'à 2 ou 3 mois, voire plus, pour se fissurer même par un ordinateur, comme ce truc crypté WPA2.

La chose est, il faut avoir la patience de rester en paix mentale jusqu'à ce qu'il soit résolu. Selon les mathématiques, il n'existe pas d'algorithme de ce type qui ne puisse pas être fissuré. Il a juste besoin de quelqu'un pour s'y intéresser.

Meilleures langues pour écrire des algorithmes

Franchement, il n'y a officiellement aucun langage spécifique qui soit excellent pour écrire des algorithmes.

Les langages fonctionnels ont cependant un avantage, car ils sont beaucoup plus supérieurs en termes de calculs et de mathématiques que les autres langages orientés objet. Mais cependant, je voudrais simplement énumérer quelques algorithmes que je trouve assez bons pour coder les mathématiques dans:

  • Python et Ruby

Avant tout, je recommanderais des langues de haut niveau. Les langues de haut niveau sont plus faciles à utiliser. La raison pour laquelle ces langages sont plus faciles est que, contrairement au C ou à tout autre langage de bas niveau, ces langages sont plus faciles à lire.

Même leur syntaxe est si simple, qu'un simple débutant la comprendrait sans que personne ne leur enseigne.

Toutes les structures de données courantes dans ces langages ont des abstractions. Vous pouvez même créer vos propres versions implémentées et créer des structures de données sur des structures de données. Ces langues sont typées dynamiquement.

Mais il n'y a qu'un seul problème ici qui peut être plus facile pour un programmeur de commencer, mais quand ils exécutent des tests, ils peuvent voir beaucoup d'erreurs qu'ils ne voyaient pas avant l'exécution, contrairement à d'autres langages de bas niveau.

  • C

C est exactement l'opposé de Python ici. Vous pouvez même être confus ici parce que bien que C soit un langage de haut niveau, certaines personnes le considèrent même comme un langage de bas niveau en raison de sa façon de coder.

Même C est très bon en termes d'abstraction ici. Si vous aimez les algorithmes, vous devrez peut-être ultérieurement, un jour ou l'autre, apprendre des langages de bas niveau appropriés, comme l'assembly.

Le fait étant que si vous connaissez très bien C, il serait assez facile de migrer de C ou tout autre type de langage similaire vers le langage d'assemblage. La gestion de la mémoire est également très bonne en C et c'est très important pour les algorithmes.

  • Java

Beaucoup de gens détestent Java pour être trop bavard et trop strict. Même certaines personnes disent qu'il manque beaucoup de fonctionnalités disponibles dans les langages sophistiqués modernes. Mais cela ne veut pas vraiment être préoccupé.

Contrairement à Python, Java n'est pas un langage à typage dynamique. Il s'agit d'un langage typé de manière statique et a beaucoup de collecte de déchets.

Cela signifie que Java affichera réellement des erreurs lors de la compilation et même avant l'exécution. Et par rapport à d'autres langages de haut niveau, Java a une fuite de mémoire extrêmement faible qui peut évidemment être corrigée et n'a aucun défaut de segmentation.

  • C # et C ++

C # est presque similaire à Java. Il ressemble plus à Java avec les capacités du langage moderne. Certaines personnes aiment utiliser même C ++. Mais c'est extrêmement inutilement compliqué.

Certaines personnes l'utilisent parce que c'est difficile à comprendre, mais une fois que vous réussissez à le casser, les gens auront sérieusement du mal à comprendre vos algorithmes, ce qui le rend parfait pour le travail. C #, d'autre part, a une collecte de déchets similaire à celle de Java.

Il existe également d'autres langages fonctionnels comme Haskell (famille Lisp) et Scala (basé sur Java). Vous pouvez lire mes autres blogs sur eux où j'ai écrit en détail sur leur fonctionnement et leurs trucs. Java, C et C ++ s'exécutent tous sur l'une ou l'autre machine virtuelle.

Tandis que Ruby et Python sont des interprètes sur leur interprète.

Si vous me demandez, je préférerais C #, car il a toutes les capacités modernes et faciliterait également le portage vers des langages de programmation inférieurs. En termes scientifiques, il possède les propriétés de Java, Scala, C et des langages de niveau inférieur.

Si vous souhaitez simplement commencer avec des algorithmes, vous pourriez probablement envisager d'utiliser Visual Studio Community Edition ou Visual Studio Express. Vous devriez probablement l'acheter, sauf que dans le cas de python, la plupart des choses que vous voulez seraient gratuites.

Articles recommandés: -

Voici quelques articles qui vous aideront à obtenir plus de détails sur les langages de programmation pour l'apprentissage des algorithmes, alors suivez simplement le lien.

  1. 8 questions et réponses d'entrevue Awesome Algorithm
  2. Les meilleurs algorithmes et cryptographie (exemples)
  3. Meilleures structures de données et algorithmes C ++ | Les bases
  4. Entretien de Data Structures And Algorithms