Сложеноста на алгоритмот првенствено се однесува на два ресурси:
време
(времетраење на извршување) и
простор
(користење на меморијата). Додека временската комплексност мери како времето на извршување расте со големината на влезот (
н
), комплексноста на просторот ја проценува потрошувачката на меморија. На пример:
- Алгоритам со
О(n)
временската сложеност се скалира линеарно со големината на влезот.
- Алгоритам со
O(1)
Просторната сложеност користи константна меморија без оглед на големината на влезот.
И двете метрики се неопходни. Брз алгоритам може да ја исцрпи меморијата на големи множества податоци, додека алгоритам што ефикасно ја користи меморијата може да биде премногу бавен за апликации во реално време.
Ефикасноста диктира изводливост. Размислете за сортирање на листа од 10 артикли наспроти 10 милиони:
- A
сортирање со меурчиња
(
О(n)
) може да биде доволен за мали множества податоци, но станува непрактичен за големи.
- A
спојување сортирање
(
O(n log n)
) грациозно обработува поголеми множества податоци, но бара дополнителна меморија.
Анализата на комплексноста обезбедува универзален јазик за споредување на алгоритми, апстрахирајќи ги деталите специфични за хардверот. Им овозможува на програмерите да ја предвидат скалабилноста и да избегнат тесни грла во критичните системи.
Асимптотските нотации го опишуваат ограничувачкото однесување на функциите, нудејќи кратенка за сложеност. Трите основни нотации се:
Нотацијата Големо О го дефинира максималното време или простор што ќе го заземе еден алгоритам. На пример:
-
O(1)
: Константно време (на пр., пристап до елемент од низа преку индекс).
-
О(n)
Линеарно време (на пр., итерирање низ листа).
-
О(n)
Квадратно време (на пр., вгнездени јамки во меурчесто сортирање).
Големото О е најчесто користената метрика, бидејќи гарантира максимални перформанси.
Омега го опишува минималното потребно време. На пример:
- Линеарното пребарување има
(1)
ако целта е првиот елемент.
Иако е оптимистичка, анализата на најдобар случај е помалку информативна за планирањето во најлош случај.
Тета ги комбинира Големото О и Омега, претставувајќи го точното асимптотско однесување. Ако еден алгоритам, најдобриот и најлошиот случај се исти:
-
(n логаритам n)
се однесува на просечни и најлоши сценарија за спојување сорти.
Овие нотации ги апстрахираат константите и членовите од понизок ред, фокусирајќи се на стапките на раст. На пример, 2n + 3n + 4 поедноставува на О(n) бидејќи квадратниот термин доминира за големи н .
Разбирањето на класите на сложеност помага да се категоризираат алгоритмите според скалабилност. Еве хиерархија од најефикасен до најмалку ефикасен:
Времето на извршување или меморијата остануваат непроменети како
н
расте.
-
Пример
Пристап до вредност на хеш-табелата со клуч.
Времето на извршување расте логаритамски со
н
.
-
Пример
Бинарното пребарување го преполови влезниот простор со секоја итерација.
Времето на извршување се зголемува пропорционално со
н
.
-
Пример
Линеарно пребарување низ несортирана листа.
Вообичаено кај алгоритмите „раздели па владеј“.
-
Пример
Спојување на сортирање и сортирање на куп.
Вгнездените итерации водат до експлозивен раст.
-
Пример
: Сортирање по меурчиња и сортирање по селекција.
Времето на извршување се дуплира со секој дополнителен влез.
-
Пример
Рекурзивна Фибоначиева пресметка без меморирање.
Алгоритми базирани на пермутација.
-
Пример
Решавање на проблемот со патувачкиот продавач преку груба сила.
Разликата помеѓу O(n log n) и О(n) станува остар за n = 10 : првиот може да се изврши за милисекунди, додека вториот може да потрае со денови.
Алгоритмите функционираат различно врз основа на конфигурациите на влезот. Анализирањето на сите случаи обезбедува робусност:
Оптимизатор на барања во базата на податоци може да избере помеѓу хеш-приклучување ( О(n + m) ) и спојување на вгнездена јамка ( O(nm) ) врз основа на дистрибуцијата на податоци. Анализата на најлошиот случај е критична за безбедносните критични системи (на пр., софтвер за воздухопловство), каде што непредвидливоста е неприфатлива.
Истиот проблем може да се реши со користење на различни алгоритми. На пример, проблемот со пребарување на целна вредност во листа на вредности може да се реши со користење на различни алгоритми, како што се линеарно пребарување, бинарно пребарување или пребарување во хеш-табела.
Табелата подолу ги споредува временската и просторната сложеност на овие алгоритми за пребарување на целна вредност во листа од н вредности.
Изборот на алгоритам зависи од големината на проблемот, карактеристиките на влезните податоци и достапните ресурси. На пример, ако листата е мала и несортирана, линеарното пребарување може да биде најдобриот избор. Ако листата е голема и сортирана, бинарното пребарување може да биде најдобриот избор. Ако листата е голема и несортирана, пребарувањето во хеш-табела може да биде најдобриот избор.
Амортизираната анализа го пресметува просечното време во текот на низа операции.
-
Пример
Динамичките низи го дуплираат капацитетот кога се полни. Додека еден
турка
операцијата може да потрае
О(n)
време, амортизираната цена останува
O(1)
.
Алгоритми како
Монте Карло
и
Лас Вегас
Користете случајност за ефикасност.
-
Пример
Тестот на прималност на Милер-Рабин има веројатносни гаранции, но е побрз од детерминистичките методи.
Некои проблеми (на пр., булова задоволителност) се NP-завршено , што значи дека не постои познато полиномно временско решение. Докажувањето на NP-комплетноста преку редукции помага во класификацијата на пресметковната тврдост.
Ан О(n) Алгоритмот за групирање би можел да стане тесно грло за огромни множества податоци, предизвикувајќи премин кон приближни методи како kd дрвја ( O(n log n) ).
Системите со јавен клуч се потпираат на тврдоста на O(2) проблеми (на пр., факторизација на цели броеви) за да се спротивстават на нападите.
Моторите за рендерирање во реално време даваат приоритет O(1) алгоритми за физички симулации за одржување на 60+ FPS.
Компромисите се важни:
-
Време наспроти Вселена
: Користи хаш-мапи (
O(1)
пребарувања) по цена на меморијата.
-
Едноставност наспроти Оптималност
: Вметнување сортирање (
О(n)
) може да биде подобро за мали, речиси сортирани множества податоци.
За рекурзивни алгоритми, рекурентните односи моделираат време на извршување. На пример, повторување на спојување сорти:
[ T(n) = 2T(n/2) + O(n) ] се претвора во
O(n log n)
преку
Мастер теорема
.
Емпириското тестирање ја надополнува теоретската анализа. Алатките за профилирање (на пр., Valgrind, perf) откриваат тесни грла во реалниот свет.
питон
def linear_sum(arr):
вкупно = 0
за број во arr:
вкупно += број
вкупен принос
def quadratic_sum(arr):
вкупно = 0
за јас во arr:
за j во arr:
вкупно += i * j
вкупен принос
Додека О(n) апстрахира константи, а 100н алгоритмот може да биде побавен од 0.01н алгоритам за практично н .
Ан O(n log n) алгоритмот може да не работи добро О(n) за n = 10 поради режиски трошоци.
Меморисизирана Фибоначиева функција ( О(n) простор) може да се сруши при големи влезни податоци, за разлика од итеративната верзија ( O(1) простор).
Самобалансирачки BST ( O(log n) пребарување) е побезбедно од обичниот BST ( О(n) најлош случај) за недоверливи податоци.
Анализата на сложеноста на алгоритмите е компасот што ги води програмерите низ огромниот пејзаж на пресметковна ефикасност. За студентите на MTSC7196, совладувањето на оваа дисциплина ги поврзува теоретското знаење и практичното искуство. Со анализа на временските и просторните барања, споредување на асимптотските граници и навигација низ компромиси во реалниот свет, програмерите можат да создадат системи кои се скалираат елегантно и работат сигурно.
Во ера дефинирана од иновации базирани на податоци, способноста да се направи разлика помеѓу O(n log n) и еден О(n) Решението не е само академско, туку стратешки императив. Додека напредувате низ вашите студии, запомнете: анализата на сложеноста не е само за броеви и симболи. Станува збор за разбирање на срцевиот ритам на самото пресметување.
Од 2019 година, запознаени се со накит во Гуангжу, Кина, база за производство на накит. Ние сме претпријатие за накит што интегрира дизајн, производство и продажба.
+86-19924726359/+86-13431083798
Подот 13, Западната кула на Гоме Смарт Сити, бр. Улица 33 Јуксин, област Хаизху, Гуангжу, Кина.