Bildekilde: pixabay.com

Programmeringsspråk for å lære algoritmer

Så før jeg begynner med de tunge artillerifagene mine om språk og maskene deres med algoritmer, la meg først vite hva algoritmer er.

Du har kanskje hørt det i filmer, spesielt filmer som The Swordfish, eller en hvilken som helst annen wannabe-hacking-film der hackeren uttaler noe som om jeg går og endrer algoritmen og legger til bla bla og bla, så vil jeg kunne hacke inn i CIA og ting.

Men det er ganske søtt. Det er ikke noe slikt. Algoritmer er ikke bare ment for hacking.

Første ting først, algoritmer bare datastrukturer. De er en metode eller en måte å gjøre ting på, mer sannsynlig å løse problemer med algoritmer. Fortsatt forvirret, la meg ta dette på en enklere måte.

Tenk på algoritmer som formler. Formler som kan hjelpe deg med å utføre oppgaven din uten mye bløt. Noe som følgende:

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

Men disse er ganske enkle. Riktige algoritmer er mye mer nyttige enn bare (a + b). Disse algoritmene brukes i banker, men ikke bare for sikkerhet og sånt, men overalt. La oss si at du åpner kontoen din i en bank.

Du setter inn X mengde penger i det og vil vite hvor mye renter du vil få.

Regnskapsføreren i banken ville da bare legge tallene til beløp, antall perioder og rente i en boks i en programvare. Algoritmer-programvaren kjører og gir deg output.

Nå ble denne utgangen beregnet av algoritmene … kodestykket som allerede har formlene for beregning av interesse. I vårt tilfelle for enkel interesse, ville det være:

A = P (1 + rt)

A = Beløp

P = rektor

R = Interesse

T = Tid eller n

Nå, mest sannsynlig, må du ha fått en ide om hva algoritmer er. Bare en ting å huske på hvis du er nybegynner innen programmering, som ikke blir og aldri blir forvirret med funksjoner og algoritmer. Begge er to forskjellige ting.

Hvis du har noen forvirring, bare få dem ryddet og bare fortsett videre.

Språk, matematikk og algoritme

Få ting å huske på, at forståelse av algoritmer matte er det viktigste når du vil skrive bedre algoritmer. Tilsvarende er tilfelle med uknuselige eller lure-sikre algoritmer.

Disse algoritmene som kalles uknuselige er bare kodestykker av ren matematikk som ikke løser problemet uten de nødvendige delene. La oss for eksempel si: a + b = 20

La oss anta at a er 5 her. Nå, her hvis jeg vet at a er 5, kan denne algoritmen være lett ødeleggende. Men hvis jeg ikke en gang vet hva a er, så er det fortsatt en mulighet for at jeg kan knekke denne algoritmen.

Måten å sprekke ville være noe som om jeg ville tvinge den til. Brute force betyr å prøve alle mulige kombinasjoner.

Så det jeg vil gjøre er at jeg skulle begynne å gjette tall som 1 + 19, 2 + 18, 3 + 17, 10 + 10 og så videre. Så nå ville en av de to tingene skje.

Den første sannsynligheten er at siden alle de ovennevnte kombinasjonene vil gi meg svaret som 20, kan alle av dem knekke denne algoritmen. Men hvis programmereren har hardkodet den for å bare godta 5 + 15, ville ikke alle kombinasjoner fungere.

Men igjen, siden jeg prøver alle mulige kombinasjoner, ville det være en tid da jeg ville prøve 5 + 15 og det ville sprekke algoritmen.

Igjen, programmereren kunne prøve å holde det begrensede antallet forsøk og mye mer sikkerhetsstruktur i mellom, men selv for det har vi mange verktøy for å omgå det.

Ubrytelig algoritme eller myte?

Så er spørsmålet om det er noe som betegnes som en uknuselig algoritme, eller er det bare en myte. Svaret er begge deler. Jeg leste nylig noen ting på internett, der jeg leste et kjent sitat:

“Umulig betyr bare at man ikke har prøvd alle løsningene”

Yeah. Det er slik algoritmer fungerer. La oss ta saken ovenfor. La oss anta at det er en annen algoritme som går som:

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

Ja. Slik skriver du en uknuselig algoritme. Saken er at en anstendig datamaskin med et godt grafikkort lett kan sprekke dette med oclhashcat. Men det er bare et eksempel. Her kan kombinasjonene være som hva som helst.

Svaret er en negativ ni, noe som betyr at i a, b, c, d, e og f kan det være noen få tall som er negative, og at minst ett stort tall blir trukket fra med et lite tall.

Dette tar meg tilbake til våre første algoritmeeksempler på a + b = 20. Selv her kan det være mange flere kombinasjoner som -1 + 21, eller -29354+ 29374. Få poenget mitt.

Så, teorien om uknuselige algoritmer går bare så langt et menneskesinn kan tenke på. Ubrytbare algoritmer er ingen myte. En velskrevet algoritme kan ta opptil 2-3 eller flere måneder å sprekke, selv av en datamaskin, som WPA2-krypterte ting.

Saken er at man må ha tålmodighet til å holde seg i mental fred til det blir løst. I følge matematikk er det ingen slik algoritme som ikke kan knuses. Det trenger bare noen å faktisk interessere seg for det.

Beste språk å skrive algoritmer

Oppriktig sagt er det offisielt ikke noe spesifikt språk som er ypperlig for å skrive algoritmer.

Funksjonelle språk har imidlertid en overhånd, og grunnen til at de er mye mer overordnede når det gjelder beregninger og matematikk enn andre objektorienterte språk. Men jeg vil bare algoritmer liste opp noen få av dem som jeg synes er gode nok til å kode matematikk i:

  • Python og Ruby

Først og fremst vil jeg anbefale språk på høyt nivå. Språk på høyt nivå er mest lettere å komme videre med. Årsaken til at disse språkene er enklere er fordi, i motsetning til C eller andre språk på lavt nivå, er disse språkene lettere når det gjelder lesing.

Til og med syntaksene deres er så enkle at bare en ren nybegynner ville forstå det uten at noen lærte dem.

Alle de vanlige datastrukturene på disse språkene har abstraksjoner. Du kan til og med bygge dine egne implementerte versjoner og bygge datastrukturer på datastrukturer. Disse språkene er skrevet dynamisk.

Men det er bare ett problem her som det kan være enklere for en programmerer å begynne med, men når de kjører tester, kan de se mange feil de ikke så før løpetid, i motsetning til andre språk på lavt nivå.

  • C

C er akkurat det motsatte av Python her. Du kan til og med bli forvirret her fordi selv om C er et språk på høyt nivå, er det noen som til og med anser det som et lavnivåspråk på grunn av kodingsmåten.

Til og med C er veldig bra med tanke på abstraksjon her. Hvis du bruker algoritmer, kan det hende at du på et senere tidspunkt trenger å lære ordentlige språk på lavt nivå som forsamlingen.

Poenget er at hvis du kjenner C veldig godt, ville det være ganske enkelt å migrere fra C eller lignende språk til samlingsspråk. Minnehåndtering er også veldig bra i C, og dette er veldig viktig for algoritmer.

  • Java

Mange mennesker hater faktisk Java for å være for ordrett og streng. Selv noen mennesker sier at det mangler mange funksjoner som er tilgjengelige i moderne sofistikerte språk. Men dette peker faktisk ikke å være opptatt av.

Java, i motsetning til Python, er ikke et dynamisk maskinskrevet språk. Det er et statisk maskinskrevet språk og har masse søppelinnsamling.

Dette betyr at Java faktisk vil vise feil under kompilering og til og med før kjøretid. Og sammenlignet med andre språk på høyt nivå, har Java en ekstremt lav minne-lekkasje som åpenbart kan fikses og har ingen segmenteringsfeil.

  • C # og C ++

C # er nesten lik Java. Det ligner mer på Java med funksjonene til det moderne språket. Noen mennesker liker å bruke til og med C ++. Men det er ekstremt unødvendig komplisert.

Noen mennesker bruker det fordi siden det er vanskelig å forstå, men når du først klarer å knekke det, vil folk seriøst ha det vanskelig for å forstå algoritmene dine, noe som gjør det perfekt for jobben. C # har derimot søppelinnsamling som ligner på Java.

Det er også andre funksjonelle språk som Haskell (Lisp Family) og Scala (basert på Java). Du kan lese de andre bloggene mine på dem der jeg har skrevet i detalj om hvordan de fungerer og sånt. Java, C og C ++ kjører alle på den ene eller den andre virtuelle maskinen.

Mens Ruby og Python er tolk på tolk.

Hvis du spør meg, vil jeg foretrekke C #, siden det har alle moderne funksjoner, og også vil gjøre det lettere å port til lavere programmeringsspråk. I vitenskapelige termer har den egenskapene til Java, Scala, C og lavere nivå språk.

Hvis du bare vil starte med algoritmer, kan du sannsynligvis vurdere å bruke Visual Studio Community Edition eller Visual Studio Express. Du vil sannsynligvis måtte kjøpe det, bortsett fra at i tilfelle av python, ville de fleste tingene du ønsker være gratis.

Anbefalte artikler: -

Her er noen artikler som vil hjelpe deg å få mer detaljert informasjon om programmeringsspråk for å lære algoritmer, så bare gå gjennom lenken.

  1. 8 Fantastiske algoritmeintervju spørsmål og svar
  2. De beste algoritmer og kryptografi (eksempler)
  3. Beste datastrukturer og algoritmer C ++ | Grunnleggende
  4. Datastrukturer og algoritmer intervju