Ալգորիթմի բարդությունը հիմնականում վերաբերում է երկու ռեսուրսի:
ժամանակ
(կատարման տևողությունը) և
տարածություն
(հիշողության օգտագործումը): Մինչդեռ ժամանակային բարդությունը չափում է, թե ինչպես է աշխատաժամանակը աճում մուտքային չափի հետ մեկտեղ (
ն
), տարածական բարդությունը գնահատում է հիշողության սպառումը։ Օրինակ՝:
- Ալգորիթմ, որը պարունակում է
O(n)
ժամանակային բարդությունը գծայինորեն մասշտաբավորվում է մուտքային չափի հետ։
- Ալգորիթմ, որը պարունակում է
O(1)
Տարածության բարդությունը օգտագործում է հաստատուն հիշողություն՝ անկախ մուտքային չափից։
Երկու չափանիշներն էլ կարևոր են։ Արագ ալգորիթմը կարող է սպառել հիշողությունը մեծ տվյալների հավաքածուների վրա, մինչդեռ հիշողությունը արդյունավետ օգտագործող ալգորիթմը կարող է չափազանց դանդաղ լինել իրական ժամանակի կիրառությունների համար։
Արդյունավետությունը թելադրում է իրագործելիությունը։ Դիտարկեք 10 իրերի ցանկը 10 միլիոնի փոխարեն տեսակավորելը:
- A
պղպջակային տեսակավորում
(
O(n)
) կարող է բավարար լինել փոքր տվյալների հավաքածուների համար, բայց դառնում է անիրագործելի մեծ տվյալների հավաքածուների համար։
- A
միավորել տեսակավորումը
(
O(n log n)
)-ը նրբագեղ կերպով մշակում է ավելի մեծ տվյալների հավաքածուները, բայց պահանջում է լրացուցիչ հիշողություն։
Բարդության վերլուծությունը տրամադրում է համընդհանուր լեզու ալգորիթմները համեմատելու համար՝ վերացնելով սարքավորումներին բնորոշ մանրամասները։ Այն թույլ է տալիս մշակողներին կանխատեսել մասշտաբայնությունը և խուսափել կարևորագույն համակարգերում առկա խոչընդոտներից։
Ասիմպտոտիկ նշագրությունները նկարագրում են ֆունկցիաների սահմանափակող վարքագիծը՝ առաջարկելով բարդության համառոտագիր։ Երեք հիմնական նշումներն են:
Մեծ O նշագրությունը սահմանում է ալգորիթմի կողմից զբաղեցնվող առավելագույն ժամանակը կամ տարածությունը։ Օրինակ՝:
-
O(1)
Հաստատուն ժամանակ (օրինակ՝ մատրիցային տարրին ինդեքսով մուտք գործելը):
-
O(n)
Գծային ժամանակ (օրինակ՝ ցուցակի միջոցով իտերացիա):
-
O(n)
Քառակուսային ժամանակ (օրինակ՝ բշտիկային տեսակավորման մեջ ներդրված ցիկլեր):
Մեծ O-ն ամենատարածված չափանիշն է, քանի որ այն երաշխավորում է կատարողականի առաստաղներ։
Օմեգան նկարագրում է պահանջվող նվազագույն ժամանակը։ Օրինակ՝:
- Գծային որոնումն ունի
(1)
եթե թիրախը առաջին տարրն է։
Թեև լավատեսական է, լավագույն դեպքի վերլուծությունը պակաս տեղեկատվական է վատագույն դեպքի պլանավորման համար։
Թետան համատեղում է Մեծ O-ն և Օմեգան՝ ներկայացնելով ճշգրիտ ասիմպտոտիկ վարքագիծը։ Եթե ալգորիթմի լավագույն և վատագույն դեպքերը նույնն են, ապա:
-
(n log n)
վերաբերում է միաձուլման տեսակավորման միջին և վատագույն սցենարներին։
Այս նշագրությունները վերացնում են հաստատունները և ստորին կարգի անդամները՝ կենտրոնանալով աճի տեմպերի վրա։ Օրինակ, 2n + 3n + 4 պարզեցնում է O(n) քանի որ քառակուսային անդամը գերակշռում է մեծերի համար ն .
Բարդության դասերի ըմբռնումը օգնում է դասակարգել ալգորիթմները ըստ մասշտաբայնության։ Ահա հիերարխիա՝ ամենաարդյունավետից մինչև ամենաքիչ արդյունավետը:
Կատարման ժամանակը կամ հիշողությունը մնում է անփոփոխ, քանի որ
ն
աճում է։
-
Օրինակ
Հեշ աղյուսակի արժեքին մուտք գործելը բանալիով։
Գործողության ժամանակը լոգարիթմականորեն աճում է
ն
.
-
Օրինակ
Երկուական որոնումը յուրաքանչյուր իտերացիայի ընթացքում կիսով չափ կրճատում է մուտքագրման տարածքը։
Գործողության ժամանակը համաչափորեն մեծանում է
ն
.
-
Օրինակ
Գծային որոնում չդասակարգված ցուցակի միջոցով։
Տարածված է «բաժանիր և տիրիր» ալգորիթմներում։
-
Օրինակ
Միավորել տեսակավորումը և կույտային տեսակավորումը։
Ներկառուցված իտերացիաները հանգեցնում են պայթյունային աճի։
-
Օրինակ
Պղպջակների տեսակավորում և ընտրության տեսակավորում։
Գործողության ժամանակը կրկնապատկվում է յուրաքանչյուր լրացուցիչ մուտքային ազդանշանի հետ։
-
Օրինակ
Ռեկուրսիվ Ֆիբոնաչիի հաշվարկ առանց անգիր անելու։
Պերմուտացիայի վրա հիմնված ալգորիթմներ։
-
Օրինակ
Շրջիկ վաճառողի խնդրի լուծումը կոպիտ ուժի կիրառմամբ։
Տարբերությունը O(n log n) և O(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 linear_sum(arr):
ընդհանուր = 0
համարի համար arr-ում:
ընդհանուր += համար
ընդհանուր եկամտաբերություն
def quadratic_sum(arr):
ընդհանուր = 0
ես arr-ում եմ:
j-ի համար arr-ում:
ընդհանուր += i * j
ընդհանուր եկամտաբերություն
Մինչ O(n) վերացարկում է հաստատունները, ա 100ն Ալգորիթմը կարող է ավելի դանդաղ լինել, քան 0.01ն ալգորիթմ գործնական օգտագործման համար ն .
Ան O(n log n) ալգորիթմը կարող է թերի աշխատել O(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 Jouxin Street, Haizhu թաղամաս, Չինաստան Գուանչժոու.