Какви са компютърните алгоритми и как работят?
Освен ако не сте в математика или програмиране, думата „алгоритъм“ може да е гръцка за вас, но това е един от градивни елементи на всичко, което използвате, за да прочетете тази статия. Ето кратко обяснение за това какви са те и как работят.
Опровержение: Аз не съм учител по математика или компютърни науки, така че не всички термини, които използвам, са технически. Това е, защото се опитвам да обясня всичко на обикновен английски за хората, които не се чувстват добре с математиката. Като се има предвид това, има някаква математика, която е неизбежна. Математически маниаци, чувствайте се свободни да коригирате или по-добре обяснете в коментарите, но моля, поддържайте го просто за математически нежеланите сред нас.
Изображение от Иън Руоцала
Какво е алгоритъм?
Думата "алгоритъм" има етимология, подобна на "алгебра", с изключение на това, че това се отнася до самия арабски математик, Ал-Khwarizmi (просто интересно tidbit). Един алгоритъм, за непрограмистите сред нас, е набор от инструкции, които вземат вход, А и осигуряват изход, Б, който променя данните, включени по някакъв начин. Алгоритмите имат голямо разнообразие от приложения. В математиката те могат да помогнат за изчисляване на функции от точки в масив от данни, сред много по-напреднали неща. Освен използването им в самото програмиране, те играят главна роля в неща като компресиране на файлове и криптиране на данни.
Основен набор от инструкции
Да кажем, че вашият приятел се среща с вас в магазин за хранителни стоки и го насочвате към вас. Казвате неща като „влезте през вратите от дясната страна“, „прекарайте рибната секция отляво“ и „ако видите млечни продукти, вие минахте покрай мен“. Алгоритмите работят така. Можем да използваме блок-схема, за да илюстрираме инструкции, базирани на критерии, които познаваме предварително, или да разберем по време на процеса.
(изображение, озаглавено „Ледоразбиващ режим“ EDIT: с любезното съдействие на Trigger и Freewheel)
От СТАРТ ще тръгнете надолу по пътеката и в зависимост от това какво ще се случи, ще следвате „потока“ до крайния резултат. Блок-схемите са визуални инструменти, които по-разбираемо могат да представляват набор от инструкции, използвани от компютрите. Аналогично, алгоритмите помагат да направят същото и с по-математически модели.
Графики
Нека използваме графика, за да илюстрираме различните начини, по които можем да дадем насоки.
Можем да изразим тази графика като връзка между всички нейни точки. За да възпроизведем този образ, можем да дадем набор от инструкции на някой друг.
Метод 1
Можем да представим това като поредица от точки и информацията ще следва стандартната форма на графиката = (x1, y1), (x2, y2),…, (xn, yn).
графика = (0,0), (3,0), (3,3), (5,5), (7,10), (8,7), (9,4), (10,1)
Много е лесно да се зачертава всяка точка, една след друга, и да се свърже с предишната точка. Представете си обаче графика с хиляда точки или няколко сегмента, които вървят всеки път. Този списък ще има много данни, нали? И тогава трябва да свържете всеки един, един по един, може да бъде болка.
Метод 2
Друго нещо, което можем да направим, е да дадем начална точка, наклонът на линията между нея и следващата точка, и да посочим къде да очакваме следващата точка, използвайки стандартната форма на графиката = (начална точка, [m1, x1, h1] ],…, [Mn, xn, hn] Тук променливата 'm' представлява наклона на линията, 'x' представлява посоката, в която се брои (x или y), а 'h' ви казва как Можете също да запомните да начертаете точка след всяко движение.
граф = (0,0), [0, x, 3], [0, y, 3], [1, x, 2], [2.5, x, 2], [-3, x, 1], [-3, x, 1], [-3, x, 1]
Ще получите същата графика. Можете да видите, че последните три термина в този израз са едни и същи, така че може да сме в състояние да ги отрежем, като просто кажем „повтори това три пъти“ по някакъв начин. Да кажем, че когато попаднете на променливата 'R', това означава да повторите последното. Можем да направим това:
граф = (0,0), [0, x, 3], [0, y, 3], [1, x, 2], [2.5, x, 2], [-3, x, 1], [R = 2]
Ами ако отделните точки наистина нямат значение, а само самата графика? Можем да консолидираме последните три секции така:
граф = (0,0), [0, x, 3], [0, y, 3], [1, x, 2], [2.5, x, 2], [-3, x, 3]
Тя съкращава нещата малко от мястото, където са били преди.
Метод 3
Нека се опитаме да направим това по друг начин.
у = 0, 0≤x≤3
х = 0, 0≤y≤3
y = x, 3≤x≤5
у = 2.5х-7.5, 5≤x≤7
у = -3x + 29, 7≤x≤8
у = -3x + 29, 8≤x≤9
у = -3х + 29, 9≤x≤10
Тук го имаме в чисти алгебрични термини. Още веднъж, ако самите точки не са от значение и само графиката има, можем да консолидираме последните три позиции.
у = 0, 0≤x≤3
х = 0, 0≤y≤3
y = x, 3≤x≤5
у = 2.5х-7.5, 5≤x≤7
у = -3x + 29, 7≤x≤10
Сега кой метод избирате зависи от вашите способности. Може би сте страхотни с математика и графики, така че избирате последната опция. Може би сте добри в навигацията, така че избирате втората опция. В сферата на компютрите обаче правите много различни задачи и способностите на компютъра не се променят наистина. Следователно, алгоритмите са оптимизирани за задачите, които изпълняват.
Друг важен момент е, че всеки метод разчита на ключ. Всеки набор от инструкции е безполезен, освен ако не знаете какво да правите с тях. Ако не знаете, че трябва да зачертаете всяка точка и да свържете точките, първата група точки не означава нищо. Освен ако не знаете какво означава всяка променлива във втория метод, няма да знаете как да ги приложите, подобно на ключа към шифъра. Този ключ е също неразделна част от използването на алгоритми и често този ключ се намира в общността или чрез „стандарт“.
Компресиране на файлове
Когато изтеглите .zip файл, извличате съдържанието, за да можете да използвате каквото и да е вътре в него. В днешно време повечето операционни системи могат да се потопят в .zip файлове, като нормални папки, правейки всичко във фонов режим. На моя Windows 95 машина преди повече от десетилетие, аз трябваше да извлечете всичко ръчно, преди да мога да видя нещо повече от имената на файловете вътре. Това е така, защото това, което е съхранено на диска като .zip файл, не е в използваема форма. Помислете за разтегателен диван. Когато искате да го използвате като легло, трябва да махнете възглавниците и да ги разгънете, което заема повече място. Когато не ви е необходима или искате да я транспортирате, можете да я сгънете обратно.
Алгоритмите за компресия се регулират и оптимизират специално за типовете файлове, към които са насочени. Аудио форматите, например, използват различен начин за съхраняване на данни, които, когато се декодират от аудиокодека, ще дадат звуков файл, подобен на оригиналната форма на вълната. За повече информация относно тези разлики, вижте нашата предишна статия: Какви са разликите между всички тези аудио формати? Загубените аудио формати и .zip файловете имат едно общо нещо: и двата получават оригиналните данни в точната си форма след процеса на декомпресия. Загубените аудиокодеци използват други средства, за да спестят дисково пространство, като например подрязване на честоти, които не могат да бъдат чути от човешките уши и изглаждане на формата на вълната в секции, за да се отървете от някои подробности. В крайна сметка, макар да не можем наистина да чуем разликата между MP3 и CD песен, определено има дефицит на информация в бившия.
Шифроване на данни
Алгоритми се използват и при обезопасяване на данни или комуникационни линии. Вместо да съхранява данни, така че да използва по-малко дисково пространство, то се съхранява по начин, който не може да се открие от други програми. Ако някой открадне твърдия ви диск и започне да го сканира, те могат да получат данни, дори когато изтривате файлове, защото самите данни все още са там, въпреки че мястото за препращане към него е изчезнало. Когато данните са криптирани, това, което се съхранява, не изглежда като това. Обикновено изглежда случайно, сякаш фрагментацията се е натрупала с времето. Можете също така да съхранявате данни и да ги показвате като друг тип файл. Файловете с изображения и музикалните файлове са добри за това, тъй като те могат да бъдат доста големи, без да се налага подозрение, например. Всичко това става с помощта на математически алгоритми, които приемат някакъв вид вход и го превръщат в друг, много специфичен вид изход. За повече информация за това как работи криптирането, вижте HTG обяснява: Какво е криптиране и как работи?
Алгоритмите са математически инструменти, които предоставят разнообразни приложения в компютърните науки. Те работят, за да осигурят път между начална и крайна точка по последователен начин и да осигурят инструкции, които да го следват. Знаете ли повече от това, което подчертахме? Споделете обясненията си в коментарите!