Джерело зображення: pixabay.com

Мови програмування для вивчення алгоритмів

Отже, перш ніж розпочати мої важкі артилерійські речі про мови та їх маски з алгоритмами, дайте спочатку дізнатися, що таке алгоритми.

Ви, можливо, чули це у фільмах, особливо у таких фільмах, як "Меч", або будь-який інший фільм про зловмисне бажання, в якому хакер заявляє щось на кшталт, якщо я заходжу і зміню алгоритм і додаю бла-бла-бла, тоді я зможу вступити в ЦРУ. і інше.

Але це досить химерно. Немає подібного. Алгоритми призначені не лише для злому.

По-перше, спочатку Алгоритми лише структури даних. Вони є методом чи способом робити речі, швидше вирішувати проблеми алгоритмів. Ще розгублений, дозвольте мені прийняти це більш простим способом.

Розгляньте алгоритми як формули. Формули, які можуть допомогти вам виконувати завдання без особливих прихильниць. Щось таке:

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

Але ці досить прості. Власні алгоритми набагато корисніші, ніж просто (a + b). Ці алгоритми використовуються в банках, але не тільки для безпеки та ін., Але і скрізь. Скажімо, ви відкрили свій рахунок у банку.

Ви вставляєте в нього суму X і хочете дізнатися, яку суму ви отримаєте.

Потім бухгалтер у банку просто вводить цифри щодо суми, кількості періоду та процентної ставки всередину коробки в програмне забезпечення. Програмне забезпечення алгоритмів працює і дає результат.

Тепер цей вихід був обчислений алгоритмами … фрагмент коду, який вже має формули для обчислення відсотків. У нашому випадку для простого інтересу було б:

A = P (1 + rt)

A = сума

Р = головний

R = процентна ставка

T = Час або n

Тепер, швидше за все, ви, мабуть, здобули уявлення про алгоритми. Просто одне, що потрібно пам’ятати, якщо ви новачок у програмуванні, це не і ніколи не плутати з функціями та алгоритмами. Обидва - це дві різні речі.

Якщо у вас є плутанина, просто очистіть їх і лише потім продовжуйте далі.

Мови, математика та алгоритм

Мало що слід пам’ятати, що розуміння математики алгоритмів є найважливішим, коли потрібно писати кращі алгоритми. Аналогічний випадок із алгоритмами, які не мають зламу чи дурня.

Ці алгоритми, які називаються непорушними, - це лише фрагменти коду чистої математики, який не вирішить проблему без необхідних частин. Скажімо для прикладу: a + b = 20

Припустимо, це a 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 матеріал.

Річ у тому, що треба мати терпіння, щоб залишатися в душевному спокої, поки воно не вирішиться. Згідно математики, не існує такого алгоритму, який би неможливо було зламати. Просто потрібно, щоб хтось насправді зацікавився цим.

Кращі мови для написання алгоритмів

Відверто кажучи, офіційно не існує конкретної мови, яка була б чудовою для написання алгоритмів.

Однак функціональні мови мають перевагу, тому що вони є значно вищими з точки зору обчислень та математики, ніж інші об'єктно-орієнтовані мови. Але я б просто перелічив декілька з них, які мені здаються досить хорошими для кодування математики:

  • Пітон і Рубі

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

Навіть їх синтаксис настільки простий, що просто чистий початківець зрозумів би це, не навчаючи їх.

Усі загальні структури даних цими мовами мають абстракції. Ви навіть можете створювати власні реалізовані версії та будувати структури даних на структурах даних. Ці мови вводяться динамічно.

Але тут є лише одна проблема, що програмісту може бути простіше почати, але коли вони виконують тести, вони можуть побачити безліч помилок, яких вони не бачили до часу виконання, на відміну від інших мов низького рівня.

  • С

З - якраз протилежний Python. Тут ви навіть можете заплутатися, оскільки, хоча C є мовою високого рівня, деякі люди навіть вважають це мовою низького рівня через спосіб кодування.

Навіть C дуже хороший з точки зору абстракції. Якщо ви переймаєтесь алгоритмами, то, можливо, пізніше в той чи інший день вам доведеться вивчити належні мови низького рівня, як збірка.

Зрозуміло, що якщо ви дуже добре знаєте С, було б досить просто перейти з C або будь-якого подібного типу мови на мову складання. Управління пам'яттю також дуже добре в С, і це дуже важливо для алгоритмів.

  • Java

Багато людей насправді ненавидять Java за те, що вона занадто багатослівна і сувора. Навіть деякі люди кажуть, що йому бракує безлічі функцій, які доступні в сучасних складних мовах. Але це насправді не означає турбуватися.

Java, на відміну від Python, не є динамічно набраною мовою. Це статично набрана мова та має безліч сміття.

Це означає, що Java насправді відображатиме помилки під час компіляції та навіть перед виконанням. А порівняно з іншими мовами високого рівня, Java має надзвичайно низький рівень витоку пам’яті, який, очевидно, може бути виправлений і не має помилок сегментації.

  • C # і C ++

C # майже схожий на Java. Він більше схожий на Java з можливостями сучасної мови. Дехто любить використовувати навіть C ++. Але це вкрай зайво складно.

Деякі люди використовують його, оскільки, оскільки це важко зрозуміти, але коли вам це вдасться зламати, люди серйозно сприймуть важкий час для розуміння ваших алгоритмів, що робить його ідеальним для роботи. З іншого боку, C # має збір сміття, подібний до Java.

Існують також інші функціональні мови, такі як Haskell (сімейство Lisp) та Scala (засновані на Java). Ви можете прочитати інші мої блоги на них, де я детально писав про те, як вони працюють та інше. Java, C та C ++ усі працюють на одній або іншій віртуальній машині.

Тоді як Рубі та Пітон є перекладачами свого перекладача.

Якщо ви запитаєте мене, я б віддав перевагу C #, оскільки він має всі сучасні можливості, а також полегшив би порти на нижчі мови програмування. У науковому відношенні він має властивості Java, Scala, C та мов нижчого рівня.

Якщо ви просто хочете почати з алгоритмів, ви, можливо, можете подумати про використання візуального спільноти студійного видання або Visual studio express. Ймовірно, вам доведеться купувати це, за винятком того, що у випадку з пітоном більшість речей, які ви хочете, були б безкоштовними.

Рекомендовані статті: -

Ось кілька статей, які допоможуть вам отримати більш детальну інформацію про мови програмування для вивчення алгоритмів, тому просто перейдіть за посиланням.

  1. 8 дивовижних алгоритмів інтерв'ю на запитання та відповіді
  2. Найкращі алгоритми та криптографія (приклади)
  3. Найкращі структури даних та алгоритми C ++ | Основи
  4. Інтерв'ю структур даних та алгоритмів