Fonte immagine: pixabay.com

Linguaggi di programmazione per l'apprendimento degli algoritmi

Quindi, prima di iniziare con la mia roba pesante di artiglieria sui linguaggi e le loro maschere con algoritmi, fate prima sapere quali sono gli algoritmi.

Potresti averlo sentito in film, in particolare film come The Swordfish o qualsiasi altro film di hacking in cui l'hacker afferma qualcosa come se andassi a cambiare l'algoritmo e aggiungessi blah blah e blah, allora potrò hackerare la CIA e cose.

Ma è piuttosto incomprensibile. Non esiste una cosa del genere. Gli algoritmi non sono pensati solo per l'hacking.

Per prima cosa, gli algoritmi sono solo strutture di dati. Sono un metodo o un modo di fare le cose, più propensi a risolvere i problemi degli algoritmi. Ancora confuso, lasciami prendere questo in un modo più semplice.

Pensa agli algoritmi come a quelli delle formule. Le formule che possono aiutarti a svolgere il tuo compito senza troppi indugi. Qualcosa di simile al seguente:

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

Ma questi sono abbastanza semplici. Gli algoritmi corretti sono molto più utili del semplice (a + b). Questi algoritmi sono utilizzati nelle banche, ma non solo per la sicurezza e altro, ma ovunque. Diciamo che apri il tuo conto in una banca.

Inserisci X quantità di denaro in esso e vuoi sapere la quantità di interesse che otterresti.

Il contabile della banca inseriva quindi i numeri relativi all'importo, al numero di periodi e al tasso di interesse all'interno di una scatola di un software. Il software degli algoritmi viene eseguito e ti dà l'output.

Ora, questo output è stato calcolato dagli algoritmi … il pezzo di codice che ha già le formule per il calcolo degli interessi. Nel nostro caso per semplice interesse, sarebbe:

A = P (1 + rt)

A = Importo

P = Principale

R = Tasso di interesse

T = Tempo o n

Ora, molto probabilmente devi aver avuto un'idea di cosa siano gli algoritmi. Solo una cosa da tenere a mente se sei un principiante nella programmazione, che non si confonde con funzioni e algoritmi. Entrambe sono due cose diverse.

Se hai qualche confusione, falli sparire e solo allora procedi oltre.

Lingue, matematica e algoritmo

Poche cose da tenere a mente, che capire la matematica degli algoritmi è la cosa più importante quando si desidera scrivere algoritmi migliori. Simile è il caso degli algoritmi infrangibili o infallibili.

Questi algoritmi che sono definiti infrangibili sono solo pezzi di codice di pura matematica che non risolveranno il problema senza le parti richieste. Diciamo ad esempio: a + b = 20

Supponiamo che a sia qui 5. Ora, qui se so che a è 5, allora questo algoritmo può essere facilmente fragile. Ma comunque, se non so nemmeno cosa sia, allora c'è ancora una possibilità che posso rompere questo algoritmo.

Il modo di craccare sarebbe qualcosa di simile a una forza bruta. Forza bruta significa provare ogni possibile combinazione.

Quindi quello che vorrei fare è iniziare a indovinare numeri come 1 + 19, 2 + 18, 3 + 17, 10 + 10 e così via. Quindi, ora una delle due cose sarebbe accaduta.

La prima probabilità è che dal momento che tutte le combinazioni precedenti mi danno la risposta come 20, tutte potrebbero decifrare questo algoritmo. Ma se il programmatore lo ha programmato per accettare solo 5 + 15, allora tutte le combinazioni non funzionerebbero.

Ma ancora una volta, dal momento che sto provando tutte le possibili combinazioni, ci sarebbe un momento in cui proverei 5 + 15 e questo romperebbe l'algoritmo.

Ancora una volta, il programmatore potrebbe tentare di mantenere il numero limitato di tentativi e molta più struttura di sicurezza, ma anche per questo, abbiamo molti strumenti per aggirarlo.

Algoritmo o mito indistruttibile?

Quindi, la domanda è se esiste qualcosa chiamato algoritmo indistruttibile o è solo un mito. La risposta è entrambe. Recentemente stavo leggendo alcune cose su Internet, dove ho letto una famosa citazione:

"Impossibile significa solo che non si sono provate tutte le soluzioni"

Si. Ecco come funzionano gli algoritmi. Prendiamo il caso sopra. Supponiamo che ci sia un altro algoritmo che va come:

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

Sì. Ecco come si scrive un algoritmo indistruttibile. Il fatto è che un computer decente con una buona scheda grafica può facilmente rompere questo con oclhashcat. Ma questo è solo un esempio. Qui le combinazioni possono essere come qualsiasi cosa.

La risposta è un nove negativo, il che significa che in a, b, c, d, e, ef, ci possono essere alcuni numeri che sono negativi, almeno un numero grande viene sottratto da un piccolo numero.

Questo mi riporta ai nostri primi esempi di algoritmo di a + b = 20. Anche qui, ci possono essere molte più combinazioni come -1 + 21 o -29354+ 29374. Ottenere il mio punto.

Quindi, la teoria degli algoritmi indistruttibili arriva solo a una mente umana. Gli algoritmi infrangibili non sono un mito. Un algoritmo ben scritto può richiedere fino a 2-3 o anche più mesi per decifrare anche da un computer, come quello roba crittografato WPA2.

Il fatto è che bisogna avere la pazienza di rimanere in pace mentale fino a quando non viene risolto. Secondo la matematica, non esiste un tale algoritmo che non possa essere decifrato. Ha solo bisogno che qualcuno si interessi davvero a questo.

Le migliori lingue per scrivere algoritmi

Francamente, non esiste ufficialmente un linguaggio specifico che sia eccellente per la scrittura di algoritmi.

I linguaggi funzionali hanno comunque il sopravvento, in quanto sono molto più superiori in termini di calcoli e matematica rispetto ad altri linguaggi orientati agli oggetti. Tuttavia, vorrei solo elencare alcuni algoritmi che trovo abbastanza validi per codificare la matematica in:

  • Python e Ruby

Innanzitutto, consiglierei lingue di alto livello. Le lingue di alto livello sono più facili da imparare. Il motivo per cui queste lingue sono più facili è perché, a differenza di C o di qualsiasi altra lingua di basso livello, queste lingue sono più facili in termini di lettura.

Anche la loro sintassi è così semplice, che solo un puro principiante potrebbe capirlo senza che nessuno gli insegni.

Tutte le strutture dati comuni in queste lingue hanno astrazioni. Puoi persino creare le tue versioni implementate e costruire strutture di dati su strutture di dati. Queste lingue vengono digitate in modo dinamico.

Ma c'è solo un problema qui per cui può essere più facile per un programmatore iniziare, ma quando eseguono i test, possono vedere molti errori che non hanno visto prima del runtime, a differenza di altri linguaggi di basso livello.

  • C

C è esattamente l'opposto di Python qui. Qui potresti anche essere confuso perché, sebbene C sia un linguaggio di alto livello, alcune persone lo considerano addirittura come un linguaggio di basso livello a causa del suo modo di codificare.

Anche C è molto buono in termini di astrazione qui. Se ti piacciono gli algoritmi, in un secondo momento potresti dover imparare le lingue appropriate di basso livello come l'assembly.

Indica che, se conosci C molto bene, sarebbe abbastanza facile migrare da C o qualsiasi tipo di linguaggio simile al linguaggio assembly. Anche la gestione della memoria è molto buona in C e questo è molto importante per gli algoritmi.

  • Giava

Molte persone odiano Java per essere troppo prolisso e rigoroso. Persino alcune persone affermano che manca molte funzionalità disponibili in linguaggi moderni e sofisticati. Ma questo non significa in realtà preoccuparsi.

Java, a differenza di Python, non è un linguaggio tipizzato in modo dinamico. È un linguaggio tipicamente statico e ha un sacco di immondizia.

Ciò significa che Java mostrerà effettivamente errori durante la compilazione e anche prima del runtime. E rispetto ad altri linguaggi di alto livello, Java ha una perdita di memoria estremamente bassa che ovviamente può essere riparata e senza errori di segmentazione.

  • C # e C ++

C # è quasi simile a Java. È più simile a Java con le capacità del linguaggio moderno. Ad alcune persone piace usare anche il C ++. Ma è estremamente inutilmente complicato.

Alcune persone lo usano perché dal momento che è difficile da capire, ma una volta che riesci a decifrarlo, le persone avranno seriamente un momento difficile per capire i tuoi algoritmi che lo rendono perfetto per il lavoro. C #, d'altra parte, ha una garbage collection simile a quella di Java.

Esistono anche altri linguaggi funzionali come Haskell (famiglia Lisp) e Scala (basato su Java). Puoi leggere altri miei blog su di loro in cui ho scritto in dettaglio su come funzionano e cose del genere. Java, C e C ++ vengono eseguiti su una o sull'altra macchina virtuale.

Considerando che Ruby e Python sono interpreti sul loro interprete.

Se me lo chiedi, preferirei C #, poiché ha tutte le funzionalità moderne e renderebbe più facile il porting su linguaggi di programmazione inferiori. In termini scientifici, ha le proprietà di Java, Scala, C e linguaggi di livello inferiore.

Se vuoi solo iniziare con gli algoritmi, probabilmente potresti considerare di utilizzare Visual Studio Community Edition o Visual Studio Express. Probabilmente dovresti acquistarlo, tranne che nel caso di Python, la maggior parte delle cose che vorresti sarebbero gratuite.

Articoli consigliati: -

Ecco alcuni articoli che ti aiuteranno a ottenere maggiori dettagli sui linguaggi di programmazione per l'apprendimento degli algoritmi, quindi passa attraverso il link.

  1. 8 domande e risposte di intervista sull'algoritmo eccezionale
  2. I migliori algoritmi e crittografia (esempi)
  3. Migliori strutture dati e algoritmi C ++ | Nozioni di base
  4. Intervista su algoritmi e strutture dati

Categoria: