Извор слике: пикабаи.цом

Програмски језици за учење алгоритама

Дакле, пре него што почнем са својим тешким артиљеријским стварима о језицима и њиховим маскама с алгоритмима, нека прво знате који су то алгоритми.

Можда сте је чули у филмовима, посебно у филмовима попут Свордфисх или било којег другог филма о хакерском хакирању у којем хакер наводи нешто попут ако одем и променим алгоритам и додам бла и бла, онда ћу моћи да нападнем ЦИА и остало.

Али то је прилична глупост. Не постоји тако нешто. Алгоритми нису намењени само хаковању.

Прво прво, алгоритми само структуре података. Они су метода или начин да се ствари раде, вероватније да се решавају проблеми алгоритама. Још увек збуњен, дозволите ми да ово схватим на једноставнији начин.

Замислите алгоритме као формуле. Формуле које вам могу помоћи да без задршке наставите са задатком. Нешто попут следећег:

(а + б) 2 = а 2 + 2аб + б 2

Али ове су врло једноставне. Правилни алгоритми су много кориснији од пуког (а + б). Ови алгоритми се користе у банкама, али не само за сигурност и ствари, већ и свуда. Рецимо да отворите свој рачун у банци.

У њега уметнете Кс износ новца и желите знати колико бисте добили камате.

Рачуновођа у банци би тада у софтвер само унела бројеве који се односе на износ, број периода и каматну стопу. Софтвер за алгоритме покреће и даје вам излаз.

Сада је овај излаз израчунао алгоритмима … део кода који већ има формуле за израчун камате. У нашем случају за једноставан интерес, то би било:

А = П (1 + рт)

А = Износ

П = главни

Р = каматна стопа

Т = Време или н

Сада сте вероватно добили идеју о томе који су алгоритми. Само једна ствар коју треба имати на уму ако сте почетник у програмирању, а то се не смета и никада не меша са функцијама и алгоритмима. Обоје су две различите ствари.

Ако имате било какве забуне, само их очистите и тек тада наставите даље.

Језици, математика и алгоритам

Мало је ствари које треба имати на уму да је разумевање математике алгоритама најважније када желите да пишете боље алгоритме. Слично је и у случају нераскидивих или безгрешних алгоритама.

Ови алгоритми који се називају нераскидивим само су делови кода чисте математике који неће решити проблем без тражених делова. Рецимо на пример: а + б = 20

Претпоставимо да је овде 5. Сада, ако знам да је а 5, онда се овај алгоритам може лако покварити. Али, ако и не знам шта је то, и даље постоји могућност да могу да испукнем овај алгоритам.

Начин пуцања био би нешто попут чега бих га силио. Груба сила значи испробавање сваке могуће комбинације.

Дакле, оно што бих урадио је да бих започео погађати бројеве попут 1 + 19, 2 + 18, 3 + 17, 10 + 10 и тако даље. Дакле, сада би се догодила било која од двије ствари.

Прва вероватноћа је да, пошто би ми све горе наведене комбинације дале одговор као 20, све би могле покварити овај алгоритам. Али, ако је програмер тврдо кодирао да прихвата само 5 + 15, тада све комбинације не би функционисале.

Али опет, пошто покушавам све могуће комбинације, било би времена када бих пробао 5 + 15 и то би покварило алгоритам.

Опет, програмер би могао покушати да задржи ограничен број покушаја и много већу безбедносну структуру између себе, али чак и за то, имамо пуно алата да га заобиђу.

Нераскидиви алгоритам или мит?

Дакле, питање је постоји ли нешто што се назива нераскидивим алгоритмом или је то само мит. Одговор је обоје. Недавно сам читао неке ствари на интернету, где сам прочитао познати цитат:

„Немогуће само значи да неко није испробао сва решења“

Да. Тако раде алгоритми. Узмимо горњи случај. Претпоставимо да постоји још један алгоритам који иде као:

а + б + ц + д + е + ф = (-9)

Да. Овако пишете нераскидиви алгоритам. Ствар је у томе што пристојни рачунар са добром графичком картицом ово лако може покварити оцлхасхцат. Али то је само пример. Овде комбинације могу бити као било шта.

Одговор је негативан девет, што значи да у а, б, ц, д, е и ф може бити неколико бројева који су негативни, барем један велики број који се одузима од малог броја.

Ово ме враћа на наше прве примере алгоритма а + б = 20. Чак и овде, може бити пуно више комбинација попут -1 + 21 или -29354+ 29374. Упознавање са тим.

Дакле, теорија нераскидивих алгоритама иде само онолико колико људски ум може да замисли. Нераскидиви алгоритми нису мит. Добро написан алгоритам може потрајати 2-3 или чак више месеци да се чак и рачунар поквари, као што су ВПА2 шифроване ствари.

Ствар је у томе што неко мора имати стрпљења да остане у менталном миру док се не реши. Према математици, не постоји такав алгоритам који се не може пробити. Потребан је само неко ко ће се заинтересовати за то.

Најбољи језици за писање алгоритама

Искрено говорећи, званично не постоји одређени језик који је врхунски за писање алгоритама.

Међутим, функционални језици имају предност јер су рачунање и математика много супериорнији од осталих објектно оријентисаних језика. Али, само бих алгоритам набројао неколико њих за које сматрам да су довољно добре за кодирање математике у:

  • Питхон анд Руби

Прво и најважније, препоручио бих језике високог нивоа. Језици на високом нивоу су најлакши за употребу. Разлог зашто су ови језици лакши је тај што су за разлику од језика Ц или било којег другог језика ниског нивоа лакши у погледу читања.

Чак је и њихова синтакса тако лака да би је тек чисти почетник разумео без да их итко подучава.

Све уобичајене структуре података на овим језицима имају апстракције. Можете чак и да изградите сопствене имплементиране верзије и да на њима изградите структуре података. Ови језици се уносе динамички.

Али овде постоји само један проблем који програмеру може бити лакше, али када покрену тестове, могу видети пуно грешака које нису видели пре времена извођења, за разлику од других језика ниског нивоа.

  • Ц

Ц је управо супротно од Питхона овде. Овде се чак можете и збунити јер иако је Ц језик високог нивоа, неки га чак сматрају и језиком ниског нивоа због начина кодирања.

Цак је и Ц овде врло добар у погледу апстракције. Ако се бавите алгоритмима, касније ћете можда требати један или други дан да научите одговарајуће језике ниског нивоа, попут монтаже.

Ако је Ц добро познат, било би лако прећи са Ц или било које сличне врсте језика на језик монтаже. Управљање меморијом је такође веома добро за Ц и то је веома важно за алгоритме.

  • Јава

Много људи заправо мрзи Јаву јер је превише сложена и строга. Чак неки кажу да му недостаје мноштво функција које су доступне на савременим софистицираним језицима. Али то у ствари не треба да се брине.

Јава, за разлику од Питхона, није динамички куцани језик. То је статички куцати језик и има пуно одвоза смећа.

То значи да ће Јава заправо приказивати грешке током компилације, па чак и пре извршења. А у поређењу са другим језицима високог нивоа, Јава има изузетно низак ниво цурења меморије који очигледно може да се поправи и нема грешке у сегментацији.

  • Ц # и Ц ++

Ц # је скоро сличан Јави. Више личи на Јава са могућностима модерног језика. Неки воле да користе чак и Ц ++. Али је изузетно непотребно компликовано.

Неки га користе зато што је то тешко разумети, али једном кад то успете да пробијете, људи ће озбиљно имати времена да разумеју ваше алгоритме, што га чини савршеним за посао. Ц #, са друге стране, има смеће слично ономе на Јави.

Постоје и други функционални језици попут Хаскелл-а (породица Лисп) и Сцала (заснованог на Јава-у). На њима можете читати остале моје блогове, где сам детаљно написао о томе како функционишу и како то раде. Јава, Ц и Ц ++ сви раде на једној или другој виртуелној машини.

Док су Руби и Питхон преводиоци.

Ако ме питате, више бих волио Ц #, јер има све модерне могућности и такође би олакшао пријенос на ниже програмске језике. Научно гледано, она има својства Јава, Сцала, Ц и језика нижег нивоа.

Ако само желите да започнете алгоритмима, вероватно бисте могли да размислите о коришћењу издања визуелне заједнице у заједници или Висуал студио екпресс. То бисте вероватно морали да купите, осим што би у случају питона већина ствари које желите била бесплатна.

Препоручени чланци: -

Ево неколико чланака који ће вам помоћи да сазнате више детаља о језицима програмирања за учење алгоритама, зато само прођите кроз линк.

  1. 8 Авесоме Алгоритхм Питања и одговори за интервју
  2. Најбољи алгоритми и криптографија (примери)
  3. Најбоље структуре података и алгоритми Ц ++ | Основе
  4. Интервју структура података и алгоритама

Категорија: