Източник на изображението: pixabay.com

Езици за програмиране за изучаване на алгоритми

И така, преди да започна с тежките си артилерийски неща за езиците и техните маски с алгоритми, нека първо да разбера какви са алгоритмите.

Може би сте го чували във филми, особено във филми като The Swordfish или във всеки друг филм за хакерство на wannabe, в който хакерът заявява нещо като, ако отида и сменя алгоритъма и добавям бла и дрън, тогава ще мога да хакна в ЦРУ и други неща.

Но това е доста глупост. Няма такова нещо. Алгоритмите не са предназначени само за хакване.

Първо, първо, алгоритмите само структури от данни. Те са метод или начин да се правят нещата, по-вероятно е да се решат проблемите с алгоритмите. Все още объркан, нека да приема това по-опростен начин.

Помислете за алгоритмите като за формули. Формули, които могат да ви помогнат да изпълнявате задачата си без много обожание. Нещо като следното:

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

Но това са съвсем прости. Правилните алгоритми са много по-полезни от просто (a + b). Тези алгоритми се използват в банки, но не само за сигурност и други неща, но навсякъде. Да речем, че отваряте сметката си в банка.

Вмъквате X сума пари в нея и искате да знаете каква сума ще получите.

След това счетоводителят в банката просто би поставил числата за сумата, броя на периода и лихвата в кутия в софтуера. Софтуерът за алгоритми работи и ви дава изхода.

Сега този изход е изчислен от алгоритмите … парчето код, което вече има формулите за изчисляване на лихвата. В нашия случай за обикновен интерес ще бъде:

A = P (1 + rt)

A = сума

P = Главен

R = Лихвен процент

T = Време или n

Сега, най-вероятно трябва да имате представа за това какви са алгоритмите. Само едно нещо, което трябва да имате предвид, ако сте начинаещ в програмирането, това не и никога не се бърка с функции и алгоритми. И двете са две различни неща.

Ако имате някакво объркване, просто ги изчистете и едва тогава продължете по-нататък.

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

Малко неща, които трябва да имате предвид, че разбирането на математиката на алгоритмите е най-важното, когато искате да пишете по-добри алгоритми. Подобен е случаят с нечупливи или безупречни алгоритми.

Тези алгоритми, които се наричат ​​като нечупливи, са просто парчета код от чиста математика, който няма да реши проблема без необходимите части. Да кажем например: a + b = 20

Да предположим, че а е 5 тук. Сега, ако знам, че a е 5, тогава този алгоритъм може да бъде лесно разчупим. Но ако дори не знам какво е, тогава все още има възможност да пробия този алгоритъм.

Начинът да се напука би бил нещо като, че ще го насилвам грубо. Груба сила означава да се опитва всяка възможна комбинация.

Така че това, което бих направил, е да започна да гадая числа като 1 + 19, 2 + 18, 3 + 17, 10 + 10 и така нататък. И така, сега би се случило едно от двете неща.

Първата вероятност е, че тъй като всички горепосочени комбинации биха ми дали отговора като 20, всички те биха могли да пробият този алгоритъм. Но ако програмистът го е кодирал твърдо, за да приеме само 5 + 15, тогава всички комбинации няма да работят.

Но отново, тъй като опитвам всички възможни комбинации, щеше да има момент, в който да пробвам 5 + 15 и това би пропукало алгоритъма.

Отново програмистът би могъл да се опита да задържи ограничения брой опити и много по-голяма структура за сигурност между тях, но дори и за това имаме много инструменти, за да го заобиколим.

Нечуплив алгоритъм или мит?

И така, въпросът е дали има нещо, наречено като нечуплив алгоритъм, или е просто мит. Отговорът е и двете. Наскоро прочетох някои неща в интернет, където прочетох известен цитат:

„Невъзможно означава само, че човек не е изпробвал всички решения“

Да. Така работят алгоритмите. Да вземем горния случай. Да допуснем, че има друг алгоритъм, който става както следва:

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

Да. Ето как пишете нечуплив алгоритъм. Работата е в приличен компютър с добра графична карта, който лесно може да се счупи с oclhashcat. Но това е само пример. Тук комбинациите могат да бъдат като всичко.

Отговорът е отрицателен девет, което означава, че в a, b, c, d, e и f може да има няколко числа, които са отрицателни, са поне едно голямо число, което се изважда от малко число.

Това ме връща към първите ни примери за алгоритъм на a + b = 20. Дори тук може да има много повече комбинации като -1 + 21 или -29354+ 29374. Разбирам моето мнение.

И така, теорията за нечупливите алгоритми стига само дотам, доколкото човешкият ум може да мисли. Неразбиваемите алгоритми не са мит. Добре написаният алгоритъм може да отнеме 2-3 или дори повече месеца, за да се пропусне дори от компютър, като тези криптирани WPA2 неща.

Работата е там, че човек трябва да има търпение да остане в душевен мир, докато не се разреши. Според математиката няма такъв алгоритъм, който да не може да бъде пропукан. Просто има нужда някой, който всъщност да прояви интерес към него.

Най-добрите езици за писане на алгоритми

Честно казано, официално няма конкретен език, който да е превъзходен за писане на алгоритми.

Функционалните езици обаче имат предимство, като причината е, че те са много по-превъзходни по отношение на изчисленията и математиката в сравнение с другите обектно-ориентирани езици. Но обаче аз просто алгоритмите изброяват няколко от тях, които намирам достатъчно добри, за да кодирам математиката в:

  • Python and Ruby

На първо място, бих препоръчал езици на високо ниво. Езиците на високо ниво са най-лесни за работа. Причината, поради която тези езици са по-лесни, е, че за разлика от C или друг език на ниско ниво, тези езици са по-лесни по отношение на четенето.

Дори синтаксисът им е толкова лесен, че просто чист начинаещ би го разбрал, без никой да ги учи.

Всички общи структури на данни на тези езици имат абстракции. Можете дори да изградите свои собствени реализирани версии и да изграждате структури от данни върху структури от данни. Тези езици се въвеждат динамично.

Но тук има само един проблем, с който програмистът може да бъде по-лесен за начало, но когато тестват тестове, те могат да видят много грешки, които не са виждали преди изпълнение, за разлика от други езици на ниско ниво.

  • ° С

C е точно обратното на Python тук. Тук дори може да се объркате, защото макар C да е език на високо ниво, някои дори го смятат за език на ниско ниво поради начина на кодиране.

Дори C е много добър по отношение на абстракцията тук. Ако се занимавате с алгоритми, може по-късно един или друг ден да се наложи да научите правилни езици на ниско ниво като сглобяването.

Важно е, ако знаете C много добре, би било много лесно да мигрирате от C или друг подобен тип език към асемблиращ език. Управлението на паметта също е много добро в C и това е много важно за алгоритмите.

  • Ява

Много хора всъщност мразят Java, че е твърде многословен и строг. Дори някои хора казват, че му липсват много функции, които се предлагат на съвременни сложни езици. Но това всъщност не означава да се тревожим.

Java, за разлика от Python, не е динамично въведен език. Той е статично типизиран език и има много боклук за събиране.

Това означава, че Java всъщност ще показва грешки по време на компилиране и дори преди изпълнение. И в сравнение с други езици на високо ниво, Java има изключително ниско изтичане на памет, което очевидно може да бъде поправено и няма грешки в сегментацията.

  • C # и C ++

C # е почти подобен на Java. По-скоро прилича на Java с възможностите на съвременния език. Някои хора обичат да използват дори C ++. Но е изключително ненужно сложно.

Някои хора го използват, тъй като тъй като е трудно да се разбере, но след като успеете да го разбиете, хората сериозно ще имат трудно време да разберат алгоритмите ви, което го прави идеален за работата. C #, от друга страна, има сметосъбиране, подобно на това на Java.

Има и други функционални езици като Haskell (семейство Lisp) и Scala (базиран на Java). Можете да прочетете и други мои блогове в тях, където съм писал подробно за това как работят и какви неща. Java, C и C ++ всички работят на една или друга виртуална машина.

Докато Ruby и Python са преводачи на техния преводач.

Ако ме питате, бих предпочел C #, тъй като има всички съвременни възможности и също би улеснил пристанището към по-ниски езици за програмиране. В научно отношение той има свойствата на Java, Scala, C и езици от по-ниско ниво.

Ако просто искате да започнете с алгоритми, вероятно бихте могли да обмислите използването на визуално студио издание на общността или Visual studio express. Вероятно ще трябва да го купите, с изключение на това, че в случая на python, повечето от нещата, които искате, ще бъдат безплатни.

Препоръчителни статии: -

Ето няколко статии, които ще ви помогнат да получите повече подробности относно езиците за програмиране за изучаване на алгоритми, така че просто преминете през линка.

  1. 8 страхотни алгоритъм въпроси за интервю и отговор
  2. Най-добрите алгоритми и криптография (примери)
  3. Най-добри структури на данни и алгоритми C ++ | Основи
  4. Интервю на структури от данни и алгоритми