Алгоритъмът е поредица от инструкции, които се изпълняват в предварително определена последователност, за да се реши проблем или да се завърши работа. Функцията е блок от код, който може да бъде извикан и изпълнен от други части на програмата.
Набор от инструкции за разрешаване на проблем или извършване на определена дейност. В компютърните науки алгоритмите се използват за широк спектър от операции, от фундаментална математика до сложна обработка на данни.
Един от често срещаните алгоритми, използвани в C, е алгоритъмът за сортиране. Алгоритъмът за сортиране подрежда колекция от елементи в определен ред, например по числа или по азбучен ред.
Има много алгоритми за сортиране, всеки от които има предимства и недостатъци. Най-често срещаните алгоритми за сортиране в C са бързо сортиране, сливане и сортиране.
Една от ключовите характеристики на C е поддръжката на указател. Това позволява ефективно манипулиране на структури от данни като масиви, опашки и т.н. Това го прави подходящ за прилагане на алгоритми, които изискват сложна манипулация на данни, като сортиране и алгоритмично търсене.
Един от известните примери за софтуерна библиотека, реализирана в C, е Standard Template Library (STL). Тази библиотека предоставя голямо разнообразие от алгоритми за задачи като сортиране, търсене и манипулиране на структури от данни.
Характеристики на алгоритъма
Той определя няколко важни характеристики на алгоритъма, включително:
Анализ на алгоритъма
Алгоритмичният анализ е процес на оценка на ефективността на алгоритъма по отношение на ефективност, сложност и други критерии. Обикновено това се прави, за да се оценят много алгоритми и да се избере оптималното решение за определен проблем или софтуер.
Анализът на алгоритмите обикновено включва измерване на тяхната времева и пространствена сложност.
Както при пространствената сложност, която описва необходимото количество памет или дисково пространство, времевата сложност описва колко време алгоритъмът определя за изпълнение на задача.
Има различни начини за анализиране на времевата сложност на алгоритмите, като нотация Big O и Omega. Символът Омега осигурява горна граница за времевата сложност на алгоритъма, докато символът Омега осигурява долна граница.
В допълнение към измерването на сложността на времето и пространството, анализът на алгоритмите включва и други критерии като стабилност, паралелизъм и мащабируемост.
Те включват два вида анализи.
те са:-
- Предварителен анализ.
- Заден анализ.
Предварителен анализ
Prior е метод за анализ на алгоритъм, който се фокусира върху оценяване на ефективността на алгоритъм въз основа на неговите математически свойства, без реално да се изпълнява алгоритъмът.
Този подход ви позволява да анализирате времевата и пространствената сложност на алгоритмите и други показатели, без да е необходимо да внедрявате и изпълнявате алгоритмите.
Заден анализ
Задният анализ, от друга страна, е метод за анализ на алгоритъм, който действително изпълнява алгоритъма и измерва неговата ефективност.
Този подход предоставя по-точна и подробна информация за работата на алгоритъма, но изисква внедряване и изпълнение на алгоритъма.
Сложност на алгоритъма
Алгоритмичната сложност е мярка за измерване на ефективността и производителността на алгоритъма. Алгоритмите обикновено се оценяват по отношение на времето и пространството, необходими за решаване на проблем или постигане на конкретна цел.
В сложността на алгоритъма се използват два фактора.
те са:-
- Времеви фактор.
- Космически фактор.
Времеви фактор
- Времето, което алгоритъмът трябва да изпълни дадена задача, се нарича времева сложност. Обикновено се измерва с броя операции или стъпки, които алгоритъмът трябва да изпълни, за да реши проблем.
- Времевата сложност на алгоритъма е важна, защото определя колко време отнема изпълнението му и може да има значително влияние върху производителността на програмата и системата.
- Времевата сложност на алгоритъм може да бъде изразена с помощта на нотация Big O, начин за изразяване на горна граница на времевата сложност на алгоритъм.
- Алгоритъм с времева сложност O(n) означава, че времето, необходимо за изпълнение на алгоритъма, е право пропорционално на размера на входните данни (n).
- Други често срещани времеви сложности са O(n^2) квадратична сложност и O(log n) логаритмична сложност.
Космически анализ
- От друга страна, пространствената сложност се отнася до количеството памет или място за съхранение, необходимо за изпълнение на алгоритъма.
- Това е важно, защото определя броя на ресурсите, необходими за изпълнение на алгоритми, които могат да повлияят на цялостната производителност на вашето приложение или система.
- Ако пространствената сложност на алгоритъма е O(n), той използва количество памет, което расте линейно с размера на входа.
- Ако алгоритъмът има O(1) пространствена сложност, той използва фиксирано количество памет, независимо от размера на входа.
Как се пише алгоритъм
1. Първо дефинирайте проблема, който искате алгоритъмът да разреши.
Да предположим например, че искаме да напишем алгоритъм за намиране на максималната стойност от списък с числа.
2. Разбийте проблема на по-малки, управляеми стъпки.
- Инициализирайте променливата 'max' до първата стойност в списъка.
- За всяка следваща стойност в списъка сравнете с „max“.
- Ако стойността е по-голяма от „max“, задайте „max“ на тази стойност.
- Продължете да правите това, докато всяка стойност в списъка бъде сравнена.
- Връща крайната „максимална“ стойност.
3. Напишете вашия алгоритъм на псевдокод или език за програмиране.
конвенция за именуване за java
Алгоритъм, написан на псевдокод:
MAX (list) max = list[0] For i = 1 the length of the list list IF[i] > max max = list[i] End for Maximum return Maximum end
4. Тествайте алгоритъма си, за да се уверите, че е правилен и ефективен.
Можете да тествате алгоритъма, като въведете различни списъци с числа и проверите дали връща максималната правилна стойност. Можете също така да анализирате времевата сложност на вашия алгоритъм, за да определите колко добре се мащабира за по-големи входове.
Пример:-
Вход: [1, 5, 2, 7, 3]
Резултат: 7.
Обяснение: 7 е максималната стойност в списъка.
5. Оптимизирайте алгоритъма.
Търсете начини да оптимизирате алгоритмите, за да ги направите по-бързи и по-ефективни. Това може да включва модифициране на псевдокод или прилагане на по-ефективни структури от данни или алгоритми.
Основно писане на алгоритми
Пример: - Сумата от две цели числа.
Етап 1 - Първи стъпки
Стъпка 2 - Декларирайте три цели числа a, b, c
Стъпка 3 - Определете стойностите на a и b
Стъпка 4 - Добавете стойностите на a и b
Стъпка 5 - Запазете резултата от стъпка 4 в c
Стъпка 6 - Печат c
Стъпка 7 - Спри се
Тип алгоритми, използвани в езика C.
1. Алгоритми за сортиране
C предоставя богат набор от типове данни и оператори, които могат да се използват за прилагане на различни алгоритми за сортиране като балонно сортиране, сортиране чрез вмъкване и бързо сортиране.
Тези алгоритми са полезни в много приложения, тъй като могат да се използват за сортиране на данни с различни размери и типове.
Има различни алгоритми за сортиране.
те са:-
(i) Сортиране на мехурчета: Неусложнен алгоритъм за сортиране, който сравнява близките компоненти многократно и ги изключва, ако не са в ред.
статична ключова дума в java
Алгоритъмът за балонно сортиране е: -
- Започнете с несортиран списък от елементи.
- Сравнете първите два елемента в списъка. Ако първият елемент е по-голям от втория елемент, разменете ги.
- Преминете към следващата двойка елементи и повторете стъпка 2, докато стигнете до края на списъка.
- За всеки елемент от списъка повторете стъпки 2 и 3 още веднъж. което се нарича пропуски.
- Повторете стъпки 2-4 за целия списък. Докато повтаряте преминаванията, елементите ще се „издигнат“ до правилната си позиция в сортирания списък.
- След като преминаването е завършено и не са направени суапове, списъкът се сортира и алгоритъмът може да спре.
- Връща се окончателният сортиран списък.
(ii) Сортиране на вмъкване : метод за сортиране, който създава сортиран списък един по един отделен елемент чрез поставяне на всеки един на съответното място.
Алгоритъмът за сортиране на вмъкване е: -
- Инициализирайте празен сортиран списък и несортиран списък на елементите, които трябва да бъдат сортирани.
- Първият член от несортирания списък трябва да бъде взет и поставен на подходящата позиция в сортирания списък.
- Повторете стъпка 2 за всеки следващ елемент в несортирания списък.
- Сравнете текущия елемент с елементите в сортирания списък, като започнете с елемента непосредствено вляво.
- Разменете двата елемента, ако текущият елемент е по-малък от елемента отляво.
- Ако текущият елемент е по-голям от елемента отляво, вмъкнете го на правилната му позиция в сортирания списък.
- Повторете стъпки 4-6 за всеки следващ елемент в несортирания списък.
- След като всички елементи бъдат обработени, сортираният списък ще съдържа всички елементи в правилния ред.
- Процесът на сортиране е завършен.
(iii) Сортиране на селекцията : метод за сортиране, който последователно започва сортирания списък с най-малкия детайл от неподредения списък.
Алгоритъмът за сортиране на селекция е: -
- Започнете, като зададете основния елемент на списъка като min елемент.
- Повторете през останалите елементи в списъка, като сравнявате всеки един с текущия минимум.
- Задайте нов минимум, ако се установи, че даден елемент е по-малък от съществуващия.
- Променете текущия минимум до първия елемент от списъка, когато стигне до края си.
- За останалата несортирана част от списъка повторете стъпки 2-4, но започнете с втория елемент в списъка (тъй като първият елемент вече е сортиран).
- Продължете да сортирате списъка по този начин, докато не бъде сортиран.
(iv) Бързо сортиране : Алгоритъм за сортиране разделяй и владей, който избира осев елемент и разделя списъка на подсписъци в зависимост от това дали елементите са по-малко или повече от осевата точка. След това подсписъците се сортират многократно, докато се сортира пълният списък.
Алгоритъмът за бързо сортиране е:
- Изберете осев елемент от списъка. Това обикновено е първият елемент, но може да бъде и случаен елемент или медианата на списъка.
- Разделете списъка на два подсписъка: един, съдържащ елементи, по-малки от опорната точка, и един, съдържащ елементи, по-големи от опорната точка.
- Рекурсивно сортирайте подсписъка, съдържащ елементи, по-малко от опорната точка, като използвате същия процес.
- Използвайте същата процедура, за да сортирате рекурсивно подсписъка от записи, по-големи от опорната точка.
- Свържете сортираните подсписъци с основния елемент между тях, за да образувате напълно сортиран списък.
- Върнете напълно сортирания списък.
(v) Лотът отива : Алгоритъмът за сортиране разделяй и владей разделя списъка на две половини, сортира всяка половина и след това обединява двете половини в сортиран ред.
Алгоритъм за сортиране чрез сливане:
- Направете два подсписъка от списъка: един с елементи под централната точка и един с елементи над централната точка.
- Създава нов сортиран подсписък чрез итеративно обединяване на подсписъци, докато съществува само един подсписък. Това ще бъде вашият сортиран списък.
- Стъпки за обединяване на две поддиректории:-
- Създайте празен списък за съхранение на сортираните елементи.
- Сравнява първия елемент от всеки подсписък.
- Добавя по-малкия елемент към новия списък и го премахва от родителския подсписък.
- Повторете стъпки 2 и 3, докато списъкът е напълно празен.
- Добавя останалите елементи от други подсписъци към нов списък.
- Заменя обединения подсписък с новия сортиран списък.
- Повторете този процес, докато всички подсписъци се обединят в един сортиран списък.
(vi) Сортиране на купчина : Алгоритъм за сортиране, който сортира елементи, използвайки структура от данни, наречена куп.
Това е алгоритъмът за класификация:
- Подредете останалите елементи. Започвайки от корена, всеки възел се сравнява със своите деца, като възлите се разменят с техните по-големи деца, докато не бъде изпълнено свойството за максимална купчина.
- Повторете стъпки 2 и 3 с новоподредените елементи, с изключение на последния елемент в правилната позиция.
- Повторете този процес, докато в стека остане само един елемент. Това вече е сортирано.
(vii) Сортиране по радикс : Алгоритъм за сортиране, който сортира елементи въз основа на цифрите или цифрите от тяхното двоично представяне.
Алгоритъмът за сортиране по Radix е: -
- определи колко цифри се съдържат в най-големия елемент на входния списък.
- Инициализирайте променлива, да речем цифрено място, до 1, което представлява текущото цифрово място.
- Създайте празен списък за всяка възможна цифрена стойност от 0 до 9.
- Преминете през входния списък и добавете всеки елемент към подходящия списък въз основа на стойността на текущото място на цифрата.
- Свържете всички списъци заедно, за да образувате новия списък в реда на списъците с цифри.
- Умножете digitPlace по 10, за да преминете към следващото място на цифрата.
- Повторете стъпки 4-6 за всяко място на цифрата, докато не бъдат разгледани всички цифри в най-големия елемент.
- Окончателният списък ще бъде сортиран във възходящ ред по цифрите на елементите.
- Връща окончателно сортирания списък.
2. Алгоритми за търсене
C също така предоставя инструментите, необходими за прилагане на различни алгоритми за търсене, като линейно търсене и двоично търсене. Тези алгоритми могат бързо да намерят конкретни елементи в набор от данни, което ги прави полезни за широк набор от приложения.
Има много видове алгоритми за търсене.
Те са:-
(i) Линейно търсене : Основен алгоритъм за търсене, който разглежда всеки елемент в списъка един по един, докато намери желания елемент.
Алгоритъм за линейно търсене: -
- Дефинирайте входа за алгоритъма: Входът за алгоритъм за линейно търсене е списък от елементи (или масив) и целеви елемент, който търсим.
- Инициализирайте променлива, наречена „индекс“, на -1: Тази променлива ще се използва за съхраняване на индекса на целевия елемент, ако бъде намерен.
- Прегледайте списъка с елементи: Започвайки от първия елемент, проверете всеки елемент в списъка един по един.
- Сравнете настоящия елемент с желания елемент за оценка: Запазете индекса на текущия елемент в променливата индекс и излезте от цикъла, ако модерният елемент и целевият елемент са идентични.
- Върнете индекса на целевия елемент: След като цикълът завърши, върнете стойността, съхранена в индексната променлива. Ако целевият елемент не бъде намерен, стойността на индекса ще бъде -1.
(ii) Двоично търсене : Алгоритъм за търсене, който работи чрез разделяне на списъка на половини и търсене в рамките на тези половини, е по-вероятно да включи елемента.
Алгоритъм за двоично търсене: -
- Вход: Сортиран списък от n елемента и целеви елемент x.
- Инициализиране на променливи: Задайте ниския индекс на 0, високия индекс на n-1 и средния на (нисък+висок)/2.
- Стартиране на цикъл: Докато ниският индекс е по-малък или равен на високия индекс, повторете следните стъпки.
- Сравнете средния елемент с x: Ако средният елемент е равен на x, върнете средния индекс.
- Актуализирайте ниския или високия индекс: Ако x е по-голям от средния елемент, задайте ниския индекс на среден + 1. В противен случай задайте високия индекс на среден - 1.
- Актуализирайте средния индекс: Mid = (нисък+висок)/2.
- Край на цикъла: Ако ниският индекс е по-голям от високия индекс, тогава x не е в списъка и алгоритъмът връща грешка.
- Изход: Индексът на x в списъка или съобщението за грешка.
(iii) Търсене първо в дълбочина : Алгоритъм за търсене, който изследва всеки клон, доколкото е възможно, преди да се обърне.
Следните насоки се прилагат за търсене в дълбочина:
- изберете началния връх или възел на графиката, с който да започнете.
- Добавете знак за посещение към първия връх.
- Директно поставете началния връх в стек.
- Докато стекът се изпразни, повтаряйте следните действия: -
- Премахнете горния връх на стека.
- Маркирайте като посетени и вмъкнете в стека всеки непосетен съсед на изскочения връх.
- Продължете този процес, докато не бъдат посетени всички върхове в графиката.
- След като всички върхове бъдат посетени, алгоритъмът е завършен и на графиката се извършва първо търсене в дълбочина.
(iv) Търсене в широчината : Алгоритъм за търсене, който изследва всички съседи на възел, преди да премине към следващото ниво.
Алгоритъмът за търсене в ширина е:
- Започнете с коренния възел или първоначалното състояние.
- Добавяне на основния възел към опашка.
- Проверете дали опашката е празна; ако да, тогава прекратете алгоритъма.
- Вземете първия елемент от опашката и го маркирайте като посетен.
- Разширете съвременния възел, като добавите всички негови непосетени съседи към опашката.
- Докато се намери желаният възел или опашката се изпразни, повторете стъпки от 3 до 5.
- Върнете пътя от предварителното състояние към целевото състояние, ако целевият възел бъде намерен.
- Прекратете набора от правила и докладвайте, че състоянието на целта не е идентифицирано, ако опашката е празна.
(v) Интерполационно търсене : Алгоритъм за търсене, който използва стойностите на търсените елементи, за да оцени позицията в индекса.
Важно е масивът да е равномерно разпределен. В противен случай това е алгоритъм.
Работи според очакванията.
Алгоритъмът може да се обобщи по следния начин.
- Вземете списъка с входни данни и ключовата стойност за търсене.
- Инициализирайте долните и горните променливи в първия и последния индекс на списъка.
- Ако долната стойност е по-малка или равна на по-високата стойност, тогава:-
- Изчислете очакваното местоположение, като използвате следната формула:
pos = ниско + ((високо - ниско) / (arr[високо] - arr[ниско])) * (x - arr[ниско]). - Връща позицията, ако очакваната стойност на позицията е ключова стойност.
- c) Ако очакваната стойност на позицията е по-малка от ключовата стойност, задайте я по-ниска.
Позиция + 1. - г) Ако стойността на прогнозната позиция е по-голяма от зададената стойност на ключа, позиция - 1 нагоре.
- Изчислете очакваното местоположение, като използвате следната формула:
- Ако стойността на ключа не е намерена, върнете -1, за да посочите, че стойността не е в списъка.
(vi) Прескачащо търсене : Метод за търсене, който обикаля списъка на стъпки с постоянна дължина, докато намери съответния елемент или установи, че той вече не присъства.
Алгоритъмът за търсене на скок е както следва:
- Първо, задайте размера на скока на корен квадратен от броя на елементите на масива.
- Задава променлива с име 'current' на първия елемент от масива.
- Преминава през масива, като скача по размер на скока, докато увеличава променлива, наречена „скок“.
- Преминете към следващия скок, ако съществуващият елемент е по-малък от желания елемент.
- Ако текущият елемент е по-голям от целевия елемент, извършете линейно търсене между текущия елемент и предишния скок, за да намерите целевия елемент.
- Ако целевият елемент не е намерен в масива, той връща -1, за да покаже, че не е в масива.
- Ако елементът бъде намерен, той връща индекса на елемента в масива.
3. Графични алгоритми
Поддръжката на C за указатели и структури от данни като масиви и свързани списъци го прави подходящ за прилагане на алгоритми, които манипулират графики, като например намиране на най-краткия път между два възела в графика.
Има различни видове графични алгоритми.
те са:-
4. Криптографски алгоритми
C поддържа операции на ниско ниво и ефективно манипулиране на данни, което го прави идеален за прилагане на алгоритми, използвани в криптографията, като алгоритми за криптиране и декриптиране на данни.
Има различни видове алгоритми за криптиране.
валидни идентификатори в java
Те са:-
Предимства на алгоритъма
Алгоритмите имат много предимства.
те са:-
Недостатъци на алгоритъма
Алгоритмите са много полезни за програмиране, но алгоритмите имат недостатъци.
те са:-