Fonte da imagem: pixabay.com

Linguagens de programação para aprender algoritmos

Portanto, antes de começar com meu material pesado de artilharia sobre idiomas e suas máscaras com algoritmos, informe primeiro o que são algoritmos.

Você pode ter ouvido isso em filmes, especialmente filmes como The Swordfish, ou qualquer outro filme sobre hackers em que o hacker declara algo como se eu mudar o algoritmo e adicionar blá blá e blá, então poderei invadir a CIA e outras coisas.

Mas isso é bastante sem sentido. Não existe algo assim. Algoritmos não são apenas para hackers.

Primeiras coisas primeiro, algoritmos apenas estruturas de dados. Eles são um método ou uma maneira de fazer as coisas, com maior probabilidade de resolver problemas de algoritmos. Ainda confuso, deixe-me entender isso de uma maneira mais simples.

Pense nos algoritmos como fórmulas. Fórmula que pode ajudá-lo a continuar sua tarefa sem muita demora. Algo como o seguinte:

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

Mas estes são bastante simples. Algoritmos adequados são muito mais úteis do que apenas (a + b). Esses algoritmos são usados ​​em bancos, mas não apenas para segurança e outras coisas, mas em todos os lugares. Digamos que você abra sua conta em um banco.

Você insere uma quantidade X de dinheiro e deseja saber a quantidade de juros que obteria.

O contador do banco colocaria apenas os números referentes à quantia, número de período e taxa de juros dentro de uma caixa de um software. O software de algoritmos é executado e fornece a saída.

Agora, essa saída foi calculada pelos algoritmos … o trecho de código que já possui as fórmulas para calcular o interesse. No nosso caso, por simples interesse, seria:

A = P (1 + rt)

A = Montante

P = Principal

R = Taxa de Juros

T = Tempo ou n

Agora, provavelmente você deve ter tido uma idéia de quais são os algoritmos. Apenas uma coisa a ter em mente se você é iniciante em programação, que nunca fica confuso com funções e algoritmos. Ambos são duas coisas diferentes.

Se você tiver alguma confusão, limpe-a e só então prossiga.

Idiomas, Matemática e Algoritmo

Lembre-se de que o entendimento da matemática dos algoritmos é o mais importante quando você deseja escrever algoritmos melhores. Semelhante é o caso de algoritmos inquebráveis ​​ou infalíveis.

Esses algoritmos que são chamados de inquebráveis ​​são apenas pedaços de código da matemática pura que não resolverão o problema sem as partes necessárias. Digamos, por exemplo: a + b = 20

Vamos supor que a é 5 aqui. Agora, aqui, se eu sei que a é 5, esse algoritmo pode ser facilmente quebrável. Mas, no entanto, se eu nem sei o que é, ainda há uma possibilidade de que eu possa quebrar esse algoritmo.

A maneira de quebrar seria algo como se eu fosse força bruta. Força bruta significa tentar todas as combinações possíveis.

Então, o que eu faria é começar a adivinhar números como 1 + 19, 2 + 18, 3 + 17, 10 + 10 e assim por diante. Então, agora qualquer uma das duas coisas aconteceria.

A primeira probabilidade é que, como todas as combinações acima me dariam a resposta como 20, todas elas poderiam decifrar esse algoritmo. Mas, se o programador o codificou para aceitar apenas 5 + 15, todas as combinações não funcionariam.

Mas, novamente, como estou tentando todas as combinações possíveis, haveria um momento em que tentaria 5 + 15 e isso quebraria o algoritmo.

Novamente, o programador poderia tentar manter o número limitado de tentativas e muito mais estrutura de segurança no meio, mas mesmo assim, temos muitas ferramentas para contorná-la.

Algoritmo inquebrável ou mito?

Portanto, a questão é se existe algo denominado algoritmo inquebrável ou se é apenas um mito. A resposta é ambas. Recentemente, eu estava lendo algumas coisas na internet, onde li uma citação famosa:

"Impossível significa apenas que não se tentou todas as soluções"

Sim. É assim que os algoritmos funcionam. Vamos considerar o caso acima. Vamos supor que existe outro algoritmo que é o seguinte:

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

Sim. É assim que você escreve um algoritmo inquebrável. O problema é que um computador decente com uma boa placa gráfica pode facilmente resolver isso com o oclhashcat. Mas isso é apenas um exemplo. Aqui as combinações podem ser como qualquer coisa.

A resposta é um nove negativo, o que significa que em a, b, c, d, eef, pode haver alguns números negativos, pelo menos um número grande sendo subtraído por um número pequeno.

Isso me leva de volta aos nossos primeiros exemplos de algoritmos de a + b = 20. Mesmo aqui, pode haver muito mais combinações como -1 + 21 ou -29354+ 29374. Entendendo o que quero dizer.

Assim, a teoria dos algoritmos inquebráveis ​​só chega ao ponto em que a mente humana pode pensar. Algoritmos inquebráveis ​​não são um mito. Um algoritmo bem escrito pode levar de 2 a 3 meses ou mais para quebrar mesmo em um computador, como esse material criptografado WPA2.

A questão é que é preciso ter paciência para permanecer em paz mental até que seja resolvido. De acordo com a matemática, não existe tal algoritmo que não possa ser quebrado. Só precisa que alguém se interesse por isso.

Melhores idiomas para escrever algoritmos

Francamente falando, não há oficialmente nenhuma linguagem específica que seja excelente para escrever algoritmos.

As linguagens funcionais têm uma vantagem, no entanto, a razão é que elas são muito mais superiores em termos de cálculos e matemática do que outras linguagens orientadas a objetos. Mas, no entanto, gostaria apenas de listar alguns deles que considero bons o suficiente para codificar matemática em:

  • Python e Ruby

Em primeiro lugar, eu recomendaria idiomas de alto nível. Os idiomas de alto nível são mais fáceis de seguir. A razão pela qual esses idiomas são mais fáceis é porque, diferentemente do C ou de qualquer outro idioma de baixo nível, esses idiomas são mais fáceis em termos de leitura.

Até a sintaxe deles é tão fácil, que apenas um iniciante puro entenderia isso sem que ninguém os ensinasse.

Todas as estruturas de dados comuns nessas linguagens têm abstrações. Você pode até criar suas próprias versões implementadas e construir estruturas de dados sobre estruturas de dados. Esses idiomas são digitados dinamicamente.

Mas há apenas um problema aqui que pode ser mais fácil para um programador, mas quando eles executam testes, podem ver muitos erros que não viram antes do tempo de execução, ao contrário de outras linguagens de baixo nível.

  • C

C é exatamente o oposto de Python aqui. Você pode até ficar confuso aqui porque, embora C seja uma linguagem de alto nível, algumas pessoas até a consideram uma linguagem de baixo nível devido à sua maneira de codificar.

Mesmo C é muito bom em termos de abstração aqui. Se você gosta de algoritmos, mais tarde, um ou outro dia, precisará aprender linguagens de baixo nível apropriadas, como o assembly.

Aponte que, se você conhece C muito bem, seria muito fácil migrar de C ou de qualquer tipo semelhante de linguagem para linguagem assembly. O gerenciamento de memória também é muito bom em C e isso é muito importante para algoritmos.

  • Java

Muitas pessoas realmente odeiam o Java por serem muito detalhadas e rigorosas. Até algumas pessoas dizem que faltam muitos recursos disponíveis em linguagens sofisticadas modernas. Mas isso realmente não indica preocupação.

Java, diferentemente do Python, não é uma linguagem de tipo dinâmico. É uma linguagem de tipo estaticamente e possui grande quantidade de coleta de lixo.

Isso significa que o Java realmente mostra erros durante a compilação e mesmo antes do tempo de execução. E, em comparação com outras linguagens de alto nível, o Java tem um vazamento de memória extremamente baixo que obviamente pode ser corrigido e sem falhas de segmentação.

  • C # e C ++

C # é quase semelhante ao Java. É mais como Java, com os recursos da Linguagem Moderna. Algumas pessoas gostam de usar C ++. Mas é extremamente desnecessariamente complicado.

Algumas pessoas o usam porque, como é difícil de entender, mas depois que você conseguir decifrá-lo, as pessoas terão muito tempo para entender seus algoritmos, o que o torna perfeito para o trabalho. O C #, por outro lado, possui uma coleta de lixo semelhante à do Java.

Existem também outras linguagens funcionais como Haskell (Lisp Family) e Scala (baseado em Java). Você pode ler meus outros blogs onde escrevi em detalhes sobre como eles funcionam e outras coisas. Java, C e C ++ são executados em uma ou outra máquina virtual.

Enquanto Ruby e Python são intérpretes no intérprete.

Se você me perguntar, eu preferiria o C #, pois ele possui todos os recursos modernos e também facilitaria a porta para linguagens de programação mais baixas. Em termos científicos, possui as propriedades de Java, Scala, C e linguagens de nível inferior.

Se você deseja apenas começar com algoritmos, provavelmente considere usar o Visual Studio Community Edition ou o Visual Studio Express. Você provavelmente teria que comprar isso, exceto que, no caso de python, a maioria das coisas que você deseja seria grátis.

Artigos recomendados: -

Aqui estão alguns artigos que ajudarão você a obter mais detalhes sobre as linguagens de programação para aprender algoritmos. Basta acessar o link.

  1. 8 perguntas e respostas impressionantes da entrevista do algoritmo
  2. Os melhores algoritmos e criptografia (exemplos)
  3. Melhores estruturas de dados e algoritmos C ++ | Fundamentos
  4. Entrevista sobre estruturas de dados e algoritmos