logo

Алгоритам на језику Ц

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

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

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

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

Једна од кључних карактеристика Ц-а је подршка показивача. Ово омогућава ефикасну манипулацију структурама података као што су низови, редови итд. Ово га чини погодним за имплементацију алгоритама који захтевају сложену манипулацију подацима, као што је сортирање и алгоритамско претраживање.

Један од познатих примера софтверске библиотеке имплементиране у Ц је Стандард Темплате Либрари (СТЛ). Ова библиотека пружа широк спектар алгоритама за задатке као што су сортирање, претраживање и манипулација структурама података.

Карактеристике алгоритма

Он дефинише неколико важних карактеристика алгоритма, укључујући:

скл сервер пивот
    Инпутс: Алгоритми морају да примају улазе који се могу представити као вредности или подаци.Излаз: Алгоритам би требало да произведе неки излаз. То може бити последица проблема или решења дизајнираног да га реши.Јасноћа: Алгоритми морају бити прецизно дефинисани, користећи недвосмислена упутства која рачунар или други систем може недвосмислено пратити.Коначност: Алгоритам захтева ограничене кораке. То значи да из њега треба изаћи након извршења одређеног броја команди.Пуноважност: Алгоритам мора бити валидан. Другим речима, требало би да буде у стању да произведе решење за проблем који је алгоритам дизајниран да реши у разумном временском периоду.Ефикасност:Алгоритам мора бити ефикасан, што значи да мора бити у стању да произведе решење проблема за који је дизајниран да реши у разумном временском периоду.општост:Алгоритам мора бити општи, што значи да се може применити на широк спектар проблема уместо да буде специфичан за један проблем.

Алгоритамска анализа

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

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

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

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

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

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

Они укључују две врсте анализе.

су:-

  1. Претходна анализа.
  2. Постериорна анализа.

Претходна анализа

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

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

Постериорна анализа

Постериорна анализа је, с друге стране, метод анализе алгоритама који заправо извршава алгоритам и мери његове перформансе.

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

Сложеност алгоритма

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

Два фактора се користе у сложености алгоритма.

су:-

  1. Фактор времена.
  2. Фактор простора.

Фактор времена

  • Количина времена потребног алгоритму да изврши задатак назива се временском сложеношћу. Обично се мери бројем операција или корака које алгоритам мора да изврши да би решио проблем.
  • Временска сложеност алгоритма је важна јер одређује колико дуго је потребно да се изврши и може имати значајан утицај на перформансе програма и система.
  • Временска сложеност алгоритма може се изразити коришћењем Биг О нотације, начина изражавања горње границе временске сложености алгоритма.
  • Алгоритам са временском сложеношћу О(н) значи да је време потребно за покретање алгоритма директно пропорционално величини улазних података (н).
  • Друге уобичајене временске сложености су О(н^2) квадратна сложеност и О(лог н) логаритамска сложеност.

Анализа простора

  • С друге стране, комплексност простора се односи на количину меморије или простора за складиштење која је потребна за извршавање алгоритма.
  • Ово је важно јер одређује број ресурса потребних за покретање алгоритама који могу утицати на укупне перформансе ваше апликације или система.
  • Ако је просторна сложеност алгоритма О(н), он користи количину меморије која расте линеарно са величином улаза.
  • Ако алгоритам има О(1) комплексност простора, он користи фиксну количину меморије без обзира на величину улаза.

Како написати алгоритам

1. Прво дефинишите проблем који желите да алгоритам реши.

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

2. Раздвојите проблем на мање кораке којима се може управљати.

  • Иницијализујте променљиву 'мак' на прву вредност на листи.
  • За сваку следећу вредност на листи, упоредите са 'мак'.
  • Ако је вредност већа од 'мак', подесите 'мак' на ту вредност.
  • Наставите са овим све док се све вредности на листи не упореде.
  • Враћа коначну вредност 'мак'.

3. Напишите свој алгоритам у псеудокоду или неком програмском језику.

Алгоритам написан у псеудо коду:

 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 - Декларисати три цела броја а, б, ц

Корак 3 - Дефинисати вредности а и б

Корак 4 - Додајте вредности а и б

Корак 5 - Сачувајте резултат корака 4 у ц

Корак 6 - Штампа ц

Корак 7 - Зауставити

Тип алгоритама који се користи у језику Ц.

1. Алгоритми за сортирање

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

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

Постоје различити алгоритми сортирања.

су:-

(и) Сортирање мехурића: Једноставан алгоритам за сортирање који више пута упоређује оближње компоненте и искључује их ако нису у реду.

Алгоритам за сортирање мехурића је:-

  1. Почните са несортираном листом елемената.
  2. Упоредите прва два елемента на листи. Ако је први елемент већи од другог, замените их.
  3. Пређите на следећи пар елемената и поновите корак 2 док се не дође до краја листе.
  4. За сваку ставку на листи поновите кораке 2 и 3 још једном. то се назива пропусницама.
  5. Поновите кораке 2-4 за целу листу. Док понављате пролазе, елементи ће се 'подићи' на своју тачну позицију на сортираној листи.
  6. Када је пролаз завршен и ниједна замена није извршена, листа се сортира и алгоритам може да се заустави.
  7. Враћа се коначна сортирана листа.

(ии) Сортирање уметањем : метода сортирања која креира сортирану листу један по појединачни елемент тако што се сваки поставља на одговарајуће место.

Алгоритам за сортирање уметањем је:-

  1. Иницијализујте празну сортирану листу и несортирану листу елемената које треба сортирати.
  2. Првог члана са несортиране листе треба узети и поставити на одговарајућу позицију у сортираној листи.
  3. Поновите корак 2 за сваки следећи елемент у несортираној листи.
  4. Упоредите тренутни елемент са елементима у сортираној листи, почевши од елемента одмах са леве стране.
  5. Замените два елемента ако је тренутни елемент мањи од елемента са леве стране.
  6. Ако је тренутни елемент већи од елемента са његове леве стране, уметните га на његову тачну позицију у сортираној листи.
  7. Поновите кораке 4-6 за сваки следећи елемент на несортираној листи.
  8. Када су сви елементи обрађени, сортирана листа ће садржати све елементе у исправном редоследу.
  9. Процес сортирања је завршен.

(иии) Селекционо сортирање : метода сортирања која доследно почиње сортирани листинг са најмањим детаљима од неуређеног листинга.

Алгоритам за сортирање селекције је:-

  1. Почните тако што ћете поставити примарни елемент листе као минимални елемент.
  2. Поновите низ преосталих ставки на листи, упоређујући сваку са тренутним минимумом.
  3. Поставите нови минимум ако се утврди да је елемент мањи од постојећег.
  4. Промените тренутни минимум на први елемент листе кад год дође до закључка.
  5. За преостали несортирани део листе, поновите кораке 2-4, али почните са другом ставком на листи (пошто је први елемент већ сортиран).
  6. Наставите да сортирате листу на овај начин док се све не сортира.

(ив) Брзо сортирање : Алгоритам за сортирање завади и владај који бира централни елемент и дели листу на подлисте у зависности од тога да ли је елемената мање или више од централе. Након тога, подлисте се сортирају више пута док се не сортира цела листа.

Алгоритам за брзо сортирање је:

  1. Изаберите стожерни елемент са листе. Ово је обично први елемент, али може бити и насумични елемент или медијана листе.
  2. Поделите листу на две подлисте: једну која садржи елементе мање од стожера и једну која садржи елементе веће од стожера.
  3. Рекурзивно сортирајте подлисту која садржи елементе мање од стожера користећи исти процес.
  4. Користите исту процедуру да рекурзивно сортирате подлисту уноса већих од стожера.
  5. Спојите сортиране подлисте са централним елементом између да бисте формирали потпуно сортирану листу.
  6. Вратите потпуно сортирану листу.

(в) Лот иде : Алгоритам сортирања завади и владај дели листу на две половине, сортира сваку половину, а затим спаја две половине сортираним редоследом.

Алгоритам сортирања спајањем:

.нект јава
  1. Направите две подлисте од листе: једну са елементима испод стожера и једну са елементима изнад осовине.
  2. Производи нову сортирану подлисту итеративним спајањем подлиста све док не постоји само једна подлиста. Ово ће бити ваша сортирана листа.
  3. Кораци за спајање два поддиректоријума:-
  4. Направите празну листу за држање сортираних елемената.
  5. Упоређује први елемент сваке подлисте.
  6. Додаје мањи елемент на нову листу и уклања га са надређене подлисте.
  7. Понављајте кораке 2 и 3 док листа не буде потпуно празна.
  8. Додаје преостале елементе са других подлиста на нову листу.
  9. Замењује спојену подлисту новом сортираном листом.
  10. Понављајте овај процес док се све подлисте не споје у једну сортирану листу.

(ви) Сортирање гомиле : Алгоритам за сортирање који сортира елементе користећи структуру података која се зове хеап.

Ово је класификациони алгоритам:

    Направите максималну хрпу: Почевши од првог чвора без листа, упоредите сваки чвор са његовим подређеним чворовима и замените чворове највећим од његових потомака да бисте задовољили својство мак хеап-а.Замените корен са последњим елементом: Замените корен (највећи елемент) са последњим елементом у стеку.
  1. Сложите остале елементе. Почевши од корена, сваки чвор се пореди са својим потомцима, замењујући чворове са њиховом старијом децом док се не задовољи својство мак хеап-а.
  2. Поновите кораке 2 и 3 са новим наслаганим елементима, осим за последњи елемент у исправном положају.
  3. Понављајте овај процес док само један елемент не остане у хрпи. Ово је сада сређено.
  4. Хеапифи Довн: Почевши од основног чвора, упоређује елементе са својим потомцима и мења их већим од та два све док се не задовољи својство мак хеап-а.Хеапифи Уп: Почните са последњим елементом у хрпи, упоредите га са његовим родитељем и замените га са родитељем да бисте задовољили својство мак хеап-а.

(вии) Радик сортирање : Алгоритам за сортирање који сортира елементе на основу цифара или цифара њихове бинарне репрезентације.

Алгоритам за Радик сортирање је:

  1. одредите колико цифара се налази у највећем елементу уноса.
  2. Иницијализујте променљиву, рецимо место цифара, на 1, која представља тренутно место цифара.
  3. Направите празну листу за сваку могућу вредност цифара од 0 до 9.
  4. Итерирајте кроз листу уноса и додајте сваки елемент одговарајућој листи на основу вредности тренутног места цифара.
  5. Спојите све листе заједно да бисте формирали нову листу по редоследу листа цифара.
  6. Помножите дигитПлаце са 10 да бисте прешли на место следеће цифре.
  7. Поновите кораке 4-6 за свако место цифара док се не узму у обзир све цифре у највећем елементу.
  8. Коначна листа ће бити сортирана у растућем редоследу према цифрама елемената.
  9. Врати коначну сортирану листу.

2. Алгоритми претраживања

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

Постоји много врста алгоритама за претрагу.

Су:-

(и) Линеарна претрага : Основни алгоритам претраге који испитује сваку ставку на листи једну по једну док не пронађе жељену ставку.

Алгоритам за линеарну претрагу:-

  1. Дефинишите улаз за алгоритам: Улаз за алгоритам линеарне претраге је листа елемената (или низ) и циљни елемент који тражимо.
  2. Иницијализујте променљиву под називом 'индекс' на -1: Ова променљива ће се користити за складиштење индекса циљног елемента ако се пронађе.
  3. Прођите кроз листу елемената: Почевши од првог елемента, проверите сваки елемент на листи један по један.
  4. Упоредите садашњи елемент са жељеним елементом за процену: Задржите индекс тренутног елемента у променљивој индекса и изађите из петље ако су савремени елемент и циљни елемент идентични.
  5. Вратите индекс циљног елемента: Након што се петља заврши, вратите вредност сачувану у променљивој индекса. Ако циљни елемент није пронађен, вредност индекса ће бити -1.

(ии) Бинарно претраживање : Алгоритам претраге који ради тако што се листа дели на половине и претраге унутар тих половина ће вероватно укључити елемент.

Алгоритам за бинарну претрагу:-

  1. Улаз: сортирана листа од н елемената и циљног елемента к.
  2. Иницијализујте променљиве: Поставите ниски индекс на 0, високи индекс на н-1, а средњи на (ниски+висок)/2.
  3. Започните петљу: Док је ниски индекс мањи или једнак високом, поновите следеће кораке.
  4. Упоредите средњи елемент са к: Ако је средњи елемент једнак к, вратите средњи индекс.
  5. Ажурирајте ниски или високи индекс: Ако је к већи од средњег елемента, поставите ниски индекс на средину + 1. У супротном, поставите високи индекс на средину - 1.
  6. Ажурирајте средњи индекс: Средња = (ниска+висока)/2.
  7. Крај петље: Ако је нижи индекс већи од високог, онда к није на листи и алгоритам враћа грешку.
  8. Излаз: Индекс к у листи или поруци о грешци.

(иии) Претрага у дубину : Алгоритам за претрагу који испитује сваку грану колико је то изводљиво пре него што се окрене.

Следеће смернице се примењују на претрагу у дубину:

  1. изаберите почетни врх или чвор графа за почетак.
  2. Додајте ознаку посете првом врху.
  3. Директно ставите почетни врх у стек.
  4. Док се стек не испразни, поновите следеће радње: -
    • Уклоните горњи врх стека.
    • Означите као посећено и убаците у стек сваког непосећеног суседа искоченог темена.
  5. Наставите са овим процесом док се не посете сви врхови графа.
  6. Када су сви врхови посећени, алгоритам је завршен и на графу се врши претрага у дубину.

(ив) Претрага у ширину : Алгоритам за претрагу који истражује све суседе чвора пре преласка на следећи ниво.

Алгоритам за претрагу у ширину је:-

  1. Почните са основним чвором или почетним стањем.
  2. Додајте основни чвор у ред.
  3. Проверите да ли је ред празан; ако да, онда прекинути алгоритам.
  4. Узмите први елемент из реда и означите га као посећеног.
  5. Појачајте савремени чвор додавањем свих његових непосећених суседа у ред.
  6. Док се жељени чвор не пронађе или док ред не буде празан, поновите кораке од 3 до 5.
  7. Врати путању из прелиминарног стања у циљно стање ако се пронађе циљни чвор.
  8. Прекините скуп правила и пријавите да циљно стање није идентификовано ако је ред празан.

(в) Интерполациона претрага : Алгоритам за претрагу који користи вредности тражених елемената за процену позиције у индексу.

Важно је да је низ равномерно распоређен. Иначе, то је алгоритам.

Ради како се очекивало.

Алгоритам се може сажети на следећи начин.

  1. Добијте улазну листу и вредност кључа за претрагу.
  2. Иницијализујте доњу и горњу променљиву на првом и последњем индексу листе.
  3. Ако је доња вредност мања или једнака вишој вредности, онда:-
    1. Израчунајте процењену локацију користећи следећу формулу:
      пос = ниско + ((високо - ниско) / (арр[високо] - арр[ниско])) * (к - арр[ниско]).
    2. Врати позицију ако је процењена вредност позиције кључна вредност.
    3. ц) Ако је процењена вредност позиције мања од кључне вредности, подесите је ниже.
      Положај + 1.
    4. д) Ако је вредност процењене позиције већа од кључне Сет валуе, позиција - 1 горе.
  4. Ако вредност кључа није пронађена, вратите -1 да бисте означили да вредност није на листи.

(ви) Прескакање претраге : Метода претраге која понавља листу у корацима константне дужине док не пронађе релевантни елемент или утврди да више није присутан.

Алгоритам за прескакање је следећи:

  1. Прво, подесите величину скока на квадратни корен броја елемената низа.
  2. Поставља променљиву под називом 'цуррент' на први елемент низа.
  3. Итерира низ тако што скаче по величини скока док повећава променљиву која се зове 'скок'.
  4. Пређите на следећи скок ако је постојећи елемент мањи од жељеног елемента.
  5. Ако је тренутни елемент већи од циљног елемента, извршите линеарну претрагу између тренутног елемента и претходног елемента за скок да бисте пронашли циљни елемент.
  6. Ако циљни елемент није пронађен у низу, он враћа -1 како би указао да се не налази у низу.
  7. Ако је елемент пронађен, враћа индекс елемента у низу.

3. Алгоритми графова

Подршка Ц-а за показиваче и структуре података као што су низови и повезане листе чини га погодним за имплементацију алгоритама који манипулишу графовима, као што је проналажење најкраће путање између два чвора у графу.

Постоје различите врсте алгоритама графова.

су:-

    Дијкстрин алгоритам: Алгоритам који проналази најкраћи пут између два чвора на графу континуираним ажурирањем најкраће удаљености од сваког чвора.Алгоритам А*: Метода која непрекидно ажурира најкраћи курс до сваког чвора на графу како би одредила најкраћу руту између њих.Примов алгоритам: Приступ за откривање најмањег разапињућег стабла пондерисаног повезаног графа.Крускалов алгоритам: Приступ за идентификацију најнижег разапињућег стабла повезаног пондерисаног графа.Беллман-Форд алгоритам: Алгоритам који, чак и када граф има негативне ивице тежине, приказује најкраћи пут између одређеног чвора снабдевања и сваког другог чвора у мрежи.

4. Криптографски алгоритми

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

Постоје различите врсте алгоритама за шифровање.

Су:-

    Хаш алгоритми: Ови алгоритми производе излазе фиксне величине (хеш) из улаза произвољне величине. Примери укључују МД5, СХА-1 и СХА-2.Алгоритми симетричног кључа: Кораци шифровања и дешифровања у таквим алгоритмима користе исти приватни кључ. АЕС, ДЕС и Бловфисх су неколико примера.Алгоритми асиметричног кључа: Те методе користе јавни кључ и нејавни кључ као одвојене кључеве за шифровање и дешифровање. Неки примери укључују РСА, ЕЦЦ и ДСА.Алгоритми за размену кључева: Ови алгоритми омогућавају две стране да безбедно размењују кључеве преко несигурног канала. На пример, можемо поменути Диффие-Хеллман и елиптична кривуља Диффие-Хеллман.

Предности алгоритма

Алгоритми имају много предности.

су:-

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

Недостаци алгоритма

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

су:-

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