Складанасць алгарытму ў першую чаргу тычыцца двух рэсурсаў:
час
(працягласць выканання) і
прастора
(выкарыстанне памяці). Хоць складанасць часу вымярае, як расце час выканання з памерам уваходных дадзеных (
н
), складанасць прасторы ацэньвае спажыванне памяці. Напрыклад:
- Алгарытм з
O(n)
Часовая складанасць лінейна маштабуецца з памерам уваходных дадзеных.
- Алгарытм з
O(1)
Прасторавая складанасць выкарыстоўвае пастаянную памяць незалежна ад памеру ўваходных дадзеных.
Абедзве метрыкі важныя. Хуткі алгарытм можа вычарпаць памяць пры працы з вялікімі наборамі дадзеных, у той час як эфектыўны па выкарыстанні памяці алгарытм можа быць занадта павольным для прыкладанняў рэальнага часу.
Эфектыўнасць дыктуе мэтазгоднасць. Уявіце сабе сартаванне спісу з 10 элементаў у параўнанні з 10 мільёнамі:
- A
бурбалкавая сартаванне
(
O(n)
) можа быць дастаткова для невялікіх набораў дадзеных, але становіцца непрактычным для вялікіх.
- A
сартаванне зліццём
(
O(n log n)
) лёгка апрацоўвае вялікія наборы дадзеных, але патрабуе дадатковай памяці.
Аналіз складанасці забяспечвае ўніверсальную мову для параўнання алгарытмаў, абстрагуючыся ад спецыфічных для абсталявання дэталяў. Гэта дазваляе распрацоўшчыкам прагназаваць маштабаванасць і пазбягаць вузкіх месцаў у крытычна важных сістэмах.
Асімптатычныя натацыі апісваюць лімітавую паводзіны функцый, прапаноўваючы скарочаную форму для абазначэння складанасці. Тры асноўныя абазначэнні - гэта:
Абазначэнне Big O вызначае максімальны час або прастору, якія зойме алгарытм. Напрыклад:
-
O(1)
Пастаянны час (напрыклад, доступ да элемента масіва па індэксе).
-
O(n)
Лінейны час (напрыклад, перабор спісу).
-
O(n)
Квадратычны час (напрыклад, укладзеныя цыклы ў бурбалкавай сартоўцы).
Вялікі О — найбольш часта выкарыстоўваная метрыка, бо яна гарантуе максімальныя паказчыкі прадукцыйнасці.
Амега апісвае мінімальны неабходны час. Напрыклад:
- Лінейны пошук мае
(1)
калі мэтай з'яўляецца першы элемент.
Нягледзячы на аптымізм, аналіз найлепшага сцэнарыя менш інфарматыўны для планавання ў найгоршым выпадку.
Тэта спалучае ў сабе Вялікае О і Амегу, прадстаўляючы дакладную асімптатычную паводзіну. Калі найлепшы і найгоршы выпадкі алгарытму супадаюць:
-
(n log n)
прымяняецца да сярэдніх і найгоршых сцэнарыяў сартавання зліццём.
Гэтыя абазначэнні абстрагуюць канстанты і члены ніжэйшага парадку, засяроджваючыся на тэмпах росту. Напрыклад, 2n + 3n + 4 спрашчае да O(n) таму што квадратычны член дамінуе пры вялікіх н .
Разуменне класаў складанасці дапамагае класіфікаваць алгарытмы па маштабаванасці. Вось іерархія ад найбольш да найменш эфектыўнага:
Час выканання або памяць застаюцца нязменнымі, паколькі
н
расце.
-
Прыклад
Доступ да значэння хэш-табліцы па ключы.
Час выканання расце лагарыфмічна з
н
.
-
Прыклад
Бінарны пошук напалову скарачае ўваходную прастору на кожнай ітэрацыі.
Час выканання маштабуецца прапарцыйна
н
.
-
Прыклад
Лінейны пошук па несартаваным спісе.
Распаўсюджана ў алгарытмах "падзяляй і ўладар".
-
Прыклад
Сартаванне зліццём і сартаванне кучай.
Укладзеныя ітэрацыі прыводзяць да выбуховага росту.
-
Прыклад
Бурбалкавая сартаванне і сартаванне выбарам.
Час выканання падвойваецца з кожным дадатковым уваходным сігналам.
-
Прыклад
Рэкурсіўнае вылічэнне Фібаначы без мемаізацыі.
Алгарытмы на аснове перастановак.
-
Прыклад
Рашэнне задачы коміваяжора метадам грубай сілы.
Розніца паміж O(n log n) і O(n) становіцца рэзкім для n = 10 : першы можа выконвацца за мілісекунды, а другі — за некалькі дзён.
Алгарытмы працуюць па-рознаму ў залежнасці ад канфігурацыі ўводу. Аналіз усіх выпадкаў забяспечвае надзейнасць:
Аптымізатар запытаў да базы дадзеных можа выбраць паміж хэш-злучэннем ( O(n + m) ) і ўкладзенае цыклічнае злучэнне ( O(нм) ) на аснове размеркавання дадзеных. Аналіз найгоршага выпадку мае вырашальнае значэнне для сістэм, крытычна важных для бяспекі (напрыклад, авіяцыйнага праграмнага забеспячэння), дзе непрадказальнасць непрымальная.
Адну і тую ж задачу можна вырашыць, выкарыстоўваючы розныя алгарытмы. Напрыклад, задачу пошуку мэтавага значэння ў спісе значэнняў можна вырашыць з дапамогай розных алгарытмаў, такіх як лінейны пошук, бінарны пошук або пошук па хэш-табліцы.
У табліцы ніжэй параўноўваюцца складанасці часу і прасторы гэтых алгарытмаў для пошуку мэтавага значэння ў спісе н каштоўнасці.
Выбар алгарытму залежыць ад памеру праблемы, характарыстык уваходных дадзеных і даступных рэсурсаў. Напрыклад, калі спіс невялікі і неадсартаваны, лінейны пошук можа быць найлепшым выбарам. Калі спіс вялікі і адсартаваны, бінарны пошук можа быць найлепшым выбарам. Калі спіс вялікі і неадсартаваны, пошук па хэш-табліцы можа быць найлепшым выбарам.
Амартызаваны аналіз ўсярэдняе час па паслядоўнасці аперацый.
-
Прыклад
Дынамічныя масівы падвойваюць ёмістасць пры запаўненні. Пакуль адзін
штурхаць
аперацыя можа заняць
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 лінейная_сума(arr):
агульная сума = 0
для колькасці ў прыбыцці:
агульная сума += колькасць
агульны вяртанне
def квадратычная_сума(arr):
агульная сума = 0
для мяне ў прыбыцці:
для j у прыб.:
агульная сума += i * j
агульны вяртанне
Пакуль O(n) абстрагуе канстанты, а 100н алгарытм можа быць павольнейшым, чым 0.01н алгарытм для практычнага н .
Ан 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 года ў ювелірных вырабах "Знаёмства U" былі заснаваны ў Гуанчжоу, Кітай, упрыгожванне ювелірных вырабаў. Мы ўпрыгожванне ювелірных прадпрыемстваў, якія інтэгруюць дызайн, вытворчасць і продаж.
+86-19924726359/+86-13431083798
Падлога 13, Заходняя вежа Гоме Смарт -Сіці, №. 33 Вуліца Джуксіна, раён Хайджу, Гуанчжоу, Кітай.