If you're seeing this message, it means we're having trouble loading external resources on our website.

Եթե գտնվում ես վեբ զտիչի հետևում, խնդրում ենք համոզվել, որ *.kastatic.org և *.kasandbox.org տիրույթները հանված են արգելափակումից։

Հիմնական նյութ

Big-O նշագրում

Մենք օգտագործում ենք big-Θ նշագրումը, որ ասիմպտոտային կերպով հաստատուն թվերով սահմանափակենք աշխատելու ժամանակի աճը։ Երբեմն մեզ պետք կգա սահմանափակել միայն վերևից։
Օրինակ՝ չնայած, որ երկուական որոնման վատագույն աշխատելու ժամանակը Θ(log2n) է, սխալ կլինի ասել, որ երկուական որոնումն աշխատում է Θ(log2n) ժամանակում բոլոր դեպքերում։ Իսկ ի՞նչ կլինի, եթե գտնենք պետք եկած արժեքն առաջին գուշակումից։ Ուրեմն այն աշխատեց Θ(1) ժամանակում։ Երկուական որոնման աշխատելու ժամանակը երբեք Θ(log2n)-ից վատ չէ, բայց հաճախ դրանից լավ է։
Ճիշտ կլինի կազմել ասիմպտոտային նշագրում, որը ցույց կտա, որ «աշխատելու ժամանակն աճում է այսքան, բայց այն ավելի դանդաղ էլ կարող է աճել»։ Այս դեպքերի համար օգտագործում ենք big-O նշագրումը։
Եթե աշխատելու ժամանակը O(f(n)) է, ապա բավականաչափ մեծ n-ի համար աշխատելու ժամանակն առավելագույնս kf(n) է ինչ-որ հաստատուն k-ի համար։ Ահա թե ինչպես կարող ենք հասկանալ O(f(n))-ի աշխատելու ժամանակը․
6n^2-ն ընդդեմ 100n+300-ի
Մենք ասում ենք, որ աշխատելու ժամանակը «f(n) ֆունկցիայի big-O» է կամ ուղղակի «f(n)-ի O»։ Մենք օգտագործում ենք big-O նշագրումը ասիմպտոտոյին վերին սահմանների համար, քանի որ այն վերևից սահմանափակում է աշխատելու ժամանակի աճը մուտքագրված արժեքների բոլոր չափերի համար։
Հիմա մենք բոլոր դեպքերի համար կարող ենք ցույց տալ երկուական որոնման աշխատելու ժամանակը։ Կարող ենք ասել, որ երկուական որոնման աշխատելու ժամանակը միշտ O(log2n) է։ Կարող ենք ավելի լավ սահմանում տալ վատագույն աշխատելու ժամանակի համար՝ Θ(log2n)։ Բայց ապահով պնդումը կլինի այն, որը ճիշտ կլինի բոլոր դեպքերի համար, և այս դեպքում մենք կարող ենք ասել, որ երկուական որոնումն աշխատում է O(log2n) ժամանակում։
Եթե վերադառնանք big-Θ նշագրման սահմանմանը, կարող ես նկատել, որ այն շատ նման է big-O նշագրմանը, միայն թե big-Θ նշագրումը սահմանափակում է աշխատելու ժամանակը ներքևից ու վերևից, ոչ թե միայն վերևից։ Եթե ասենք, որ աշխատելու ժամանակը Θ(f(n)) է ինչ-որ կոնկրետ դեպքում, ապա այն նաև O(f(n)) է։ Օրինակ՝ կարող ենք ասե՝ քանի որ երկուական որոնման վատագույն աշխատելու ժամանակը Θ(log2n) է, այն նաև O(log2n) է։
Հակառակը ոչ միշտ է ճիշտ․ ինչպես տեսել ենք, կարող ենք ասել, որ երկուական որոնումը միշտ աշխատում է O(log2n) ժամանակում, բայց ոչ միշտ է աշխատում Θ(log2n) ժամանակում։
Քանի որ big-O նշագրումը տալիս է միայն ասիմպտոտային վերին սահման, այլ ոչ թե ասիմպտոտային մոտ սահման, մենք կարող ենք ասել պնդումներ, որոնք առաջին հայացքից սխալ են թվում, բայց տեխնիկապես ճիշտ են։ Օրինակ՝ լրիվ ճիշտ կլինի, եթե ասենք, որ երկուական որոնումն աշխատում է O(n) ժամանակում, քանի որ աշխատելու ժամանակն աճում է ոչ ավել, քան n արագությամբ, նույնիսկ ավելի դանդաղ։
Այսպես մտածիր։ Պատկերացրու՝ գրպանումդ ունես 10 դոլար։ Գնում ես ընկերոջդ մոտ և ասում ես․ «Իմ գրպանում գումար կա, և վստահեցնում եմ, որ այն մեկ միլիոն դոլարից քիչ է»։ Քո պնդումը ճիշտ է, բայց ոչ այնքան հստակ։
Մեկ միլիոն դոլարը 10 դոլարի վերին սահման է այնպես, ինչպես O(n)-ն է երկուական որոնման վերին սահման։ Մեկ այլ՝ ոչ հստակ վերին սահման երկուական որոնման համար O(n2)-ն է, կամ O(n3)-ը, կամ էլ O(2n)-ը։ Բայց երկուական որոնման աշխատելու ժամանակը Θ(n)-ով, Θ(n2)-ով, Θ(n3)-ով կամ Θ(2n)-ով նկարագրելը սխալ կլինի։

Նյութը ստեղծվել է Դարթմութի համակարգչային գիտությունների դասախոսներ Թոմաս Քորմենի և Դեվին Բալկքոմի, ինչպես նաև «Քան» ակադեմիայի ծրագրավորման թիմի կողմից։ Նյութը լիցենզավորվել է CC-BY-NC-SA-ի կողմից։

Ուզո՞ւմ ես միանալ խոսակցությանը։

Առայժմ հրապարակումներ չկան։
Անգլերեն հասկանո՞ւմ ես: Սեղմիր այստեղ և ավելի շատ քննարկումներ կգտնես «Քան» ակադեմիայի անգլերեն կայքում: