Алгоритм күрделілігі ең алдымен екі ресурсты қарастырады:
уақыт
(орындау ұзақтығы) және
кеңістік
(жадты пайдалану). Уақыттың күрделілігі кіріс өлшемімен орындалу уақыты қалай өсетінін өлшейді (
n
), кеңістік күрделілігі жадты тұтынуды бағалайды. Мысалы:
- бар алгоритм
O(n)
уақыт күрделілігі кіріс өлшемімен сызықты түрде таралады.
- бар алгоритм
O(1)
кеңістік күрделілігі кіріс өлшеміне қарамастан тұрақты жадты пайдаланады.
Екі көрсеткіш те маңызды. Жылдам алгоритм үлкен деректер жиынындағы жадты тауысуы мүмкін, ал жадты тиімді пайдаланатын алгоритм нақты уақыттағы қолданбалар үшін тым баяу болуы мүмкін.
Тиімділік іске асыруды талап етеді. 10 миллионнан 10 элементтен тұратын тізімді сұрыптауды қарастырыңыз:
- A
көпіршікті сұрыптау
(
O(n)
) шағын деректер жиындары үшін жеткілікті болуы мүмкін, бірақ үлкендер үшін іс жүзінде мүмкін емес.
- A
біріктіру сұрыптау
(
O(n log n)
) үлкенірек деректер жиынын жақсы өңдейді, бірақ қосымша жадты қажет етеді.
Күрделілік талдауы аппараттық құралдарға тән мәліметтерді алып тастап, алгоритмдерді салыстыру үшін әмбебап тілді қамтамасыз етеді. Ол әзірлеушілерге ауқымдылықты болжауға және маңызды жүйелердегі кедергілерді болдырмауға мүмкіндік береді.
Асимптотикалық белгілер күрделіліктің стенографиясын ұсына отырып, функциялардың шектеуші әрекетін сипаттайды. Үш негізгі белгілер:
Big O белгісі алгоритм алатын максималды уақытты немесе кеңістікті анықтайды. Мысалы:
-
O(1)
: Тұрақты уақыт (мысалы, индекс бойынша жиым элементіне қатынасу).
-
O(n)
: Сызықтық уақыт (мысалы, тізім арқылы қайталау).
-
O(n)
: Квадраттық уақыт (мысалы, көпіршікті сұрыптаудағы кірістірілген циклдар).
Big O - ең жиі қолданылатын метрика, өйткені ол өнімділік төбелеріне кепілдік береді.
Омега қажетті ең аз уақытты сипаттайды. Мысалы:
- Сызықтық іздеу бар
(1)
егер мақсат бірінші элемент болса.
Оптимистік болғанымен, ең жақсы жағдайды талдау ең нашар жағдайды жоспарлау үшін аз ақпарат береді.
Тета дәл асимптотикалық мінез-құлықты білдіретін Big O және Omega-ны біріктіреді. Алгоритмдердің ең жақсы және ең нашар жағдайлары бірдей болса:
-
(n log n)
Орташа және ең нашар сценарийлерді біріктіру үшін қолданылады.
Бұл белгілер өсу қарқынына назар аудара отырып, тұрақтыларды және төменгі ретті мүшелерді абстракциялайды. Мысалы, 2n + 3n + 4 дейін жеңілдетеді O(n) өйткені квадраттық термин үлкен үшін үстемдік етеді n .
Күрделілік сыныптарын түсіну алгоритмдерді масштабтау бойынша санаттарға бөлуге көмектеседі. Мұнда ең тиімдіден ең азға дейінгі иерархия:
Орындау уақыты немесе жады ретінде өзгеріссіз қалады
n
өседі.
-
Мысал
: хэш кестесінің мәніне кілт арқылы қатынасу.
Орындалу уақыты логарифмдік түрде өседі
n
.
-
Мысал
: Екілік іздеу әрбір итерацияда енгізу кеңістігін екі есе азайтады.
Орындалу уақыты пропорционалды масштабталады
n
.
-
Мысал
: Сұрыпталмаған тізім арқылы сызықтық іздеу.
Бөлу және жеңу алгоритмдерінде жиі кездеседі.
-
Мысал
: Сұрыптау және үйме сұрыптауды біріктіру.
Кірістірілген итерациялар жарылғыш өсуге әкеледі.
-
Мысал
: Көпіршікті сұрыптау және таңдауды сұрыптау.
Әрбір қосымша кіріспен орындалу уақыты екі еселенеді.
-
Мысал
: Есте сақтаусыз рекурсивті Фибоначчи есебі.
Орын ауыстыруға негізделген алгоритмдер.
-
Мысал
: Қатыгез күш арқылы саяхатшы сатушы мәселесін шешу.
арасындағы айырмашылық O(n log n) және O(n) үшін қатал болады n = 10 : біріншісі миллисекундтарда орындалуы мүмкін, ал екіншісі күн алуы мүмкін.
Алгоритмдер енгізу конфигурацияларына негізделген әртүрлі орындалады. Барлық жағдайларды талдау сенімділікті қамтамасыз етеді:
Дерекқор сұрауын оңтайландырушы хэшті біріктіру арасында таңдауы мүмкін ( O(n+m) ) және кірістірілген циклды біріктіру ( О(нм) ) деректерді таратуға негізделген. Ең нашар жағдайды талдау қауіпсіздік үшін маңызды жүйелер (мысалы, авиациялық бағдарламалық қамтамасыз ету) үшін өте маңызды, мұнда болжау мүмкін емес.
Бірдей мәселені әртүрлі алгоритмдер арқылы шешуге болады. Мысалы, мәндер тізімінде мақсатты мәнді іздеу мәселесін сызықтық іздеу, екілік іздеу немесе хэш кестесін іздеу сияқты әртүрлі алгоритмдер арқылы шешуге болады.
Төмендегі кесте тізімнен мақсатты мәнді іздеуге арналған осы алгоритмдердің уақыт пен кеңістік күрделіліктерін салыстырады. n құндылықтар.
Алгоритмді таңдау мәселе өлшеміне, кіріс сипаттамаларына және қолжетімді ресурстарға байланысты. Мысалы, тізім шағын және сұрыпталмаған болса, сызықтық іздеу ең жақсы таңдау болуы мүмкін. Тізім үлкен және сұрыпталған болса, екілік іздеу ең жақсы таңдау болуы мүмкін. Тізім үлкен және сұрыпталмаған болса, хэш кестесін іздеу ең жақсы таңдау болуы мүмкін.
Амортизацияланған талдау операциялар тізбегі бойынша орташа уақытты көрсетеді.
-
Мысал
: Толған кезде динамикалық массивтер сыйымдылықты екі есе арттырады. Бойдақ кезінде
Басыңыз
операция алуы мүмкін
O(n)
уақытта амортизацияланған құн қалады
O(1)
.
сияқты алгоритмдер
Монте-Карло
және
Лас-Вегас
тиімділік үшін кездейсоқтықты пайдаланыңыз.
-
Мысал
: Миллер-Рабин біріншілік сынағы ықтималдық кепілдіктерге ие, бірақ детерминирленген әдістерге қарағанда жылдамырақ.
Кейбір мәселелер (мысалы, логикалық қанағаттандыру). NP-толық , яғни белгілі полиномдық уақыт шешімі жоқ. NP толықтығын азайту арқылы дәлелдеу есептеу қаттылығын жіктеуге көмектеседі.
Ан O(n) кластерлеу алгоритмі kd ағаштары сияқты шамамен әдістерге ауысуға түрткі болатын үлкен деректер жиыны үшін кедергі болуы мүмкін ( O(n log n) ).
Ашық кілтті жүйелер қаттылығына сүйенеді O(2) шабуылдарға қарсы тұру мәселелері (мысалы, бүтін сандарды көбейту).
Нақты уақыттағы көрсету қозғалтқыштары басымдыққа ие O(1) 60+ FPS сақтау үшін физика модельдеу алгоритмдері.
Келіссөздер маңызды:
-
Уақытқа қарсы Ғарыш
: хэш карталарын пайдаланыңыз (
O(1)
іздеулер) жад құны бойынша.
-
Қарапайымдылықпен салыстырғанда. Оңтайлылық
: кірістіру сұрыптауы (
O(n)
) шағын, дерлік сұрыпталған деректер жиындары үшін қолайлы болуы мүмкін.
Рекурсивті алгоритмдер үшін қайталану қатынастары үлгісінің орындалу уақыты. Мысалы, қайталануды біріктіру сұрыптауы:
[ T(n) = 2T(n/2) + O(n) ] шешіледі
O(n log n)
арқылы
Негізгі теорема
.
Эмпирикалық тестілеу теориялық талдауды толықтырады. Профильдеу құралдары (мысалы, Valgrind, perf) нақты әлемдегі кедергілерді көрсетеді.
питон
def linear_sum(arr):
жалпы = 0
arr саны үшін:
жалпы += сан
жалпы қайтару
деф квадраттық_қосынды(мән):
жалпы = 0
мен үшін:
үшін j in arr:
жалпы += i * j
жалпы қайтару
Әзірге O(n) тұрақтыларды абстракциялайды, а 100n алгоритм а қарағанда баяу болуы мүмкін 0.01n практикалық алгоритм n .
Ан O(n log n) алгоритм дұрыс жұмыс істемеуі мүмкін O(n) үшін n = 10 үстеме шығындарға байланысты.
Есте сақталған Фибоначчи функциясы ( O(n) бос орын) итеративті нұсқаға қарағанда үлкен кірістерде бұзылуы мүмкін ( O(1) кеңістік).
Өзін-өзі теңестіретін BST ( O(log n) іздеу) кәдімгі BST-ге қарағанда қауіпсіз ( O(n) ең нашар жағдай) сенімсіз деректер үшін.
Алгоритмнің күрделілігін талдау - есептеу тиімділігінің кең пейзажында әзірлеушілерге жетекшілік ететін компас. MTSC7196 студенттері үшін бұл пәнді меңгеру теориялық білім мен практикалық тәжірибені біріктіреді. Уақыт пен кеңістік талаптарын бөлу, асимптотикалық шекараларды салыстыру және нақты әлемдегі сауда-саттықтарды шарлау арқылы әзірлеушілер әдемі масштабталатын және сенімді жұмыс істейтін жүйелерді жасай алады.
Деректерге негізделген инновациялармен анықталған дәуірде, бір-бірінен ажырата білу O(n log n) және а O(n) шешім тек академиктер үшін стратегиялық императив емес. Оқу барысында алға жылжу барысында есте сақтаңыз: күрделілік талдауы тек сандар мен белгілерге қатысты емес. Бұл есептеудің жүрек соғуын түсіну туралы.
2019 жылдан бастап кездесіп, кездескен зергерлік бұйымдар Гуанчжоу, Қытай, зергерлік бұйымдар базасында құрылған. Біз зергерлік бұйымдармыз интеграцияланған дизайн, өндіріс және сату.
+86-19924726359/+86-13431083798
13-қабат, Гомның Батыс мұнарасы, Жоқ. 33 Джусин көшесі, Хайзу ауданы, Гуанчжоу, Қытай.