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

თუ ვებფილტრს იყენებთ, დარწმუნდით, რომ *.kastatic.org და *.kasandbox.org დომენები არ არის დაბლოკილი.

ძირითადი მასალა

ფუნქციები ასიმპტოტურ ჩანაწერში

როდესაც ალგორითმის მუშაობის დროის ზრდის ტემპს შემომავალი მონაცემის ზომა n-ის მიხედვით გამოვსახავთ და ამისათვის ასიმპტოტურ ნოტაციას ვიყენებთ, კარგი იქნება, თუ რაღაცებს გავითვალისწინებთ.
Let's start with something easy. Suppose that an algorithm took a constant amount of time, regardless of the input size. For example, if you were given an array that is already sorted into increasing order and you had to find the minimum element, it would take constant time, since the minimum element must be at index 0. Since we like to use a function of n in asymptotic notation, you could say that this algorithm runs in Θ(n0) time. რატომ? Because n0=1, and the algorithm's running time is within some constant factor of 1. In practice, we don't write Θ(n0), however; we write Θ(1).
ახლა წარმოიდგინეთ, რომ ალგორითმს დასჭირდა Θ(log10n) დრო. აგრეთვე შეგიძლიათ, თქვათ, რომ მას დასჭირდა Θ(log2n) დრო. როდესაც ლოგარითმის ფუძე არის მუდმივი, მნიშვნელობა არა აქვს, რა ფუძეს გამოვიყენებთ ასიმპტოტურ ნოტაციაში. რატომ? რადგან არსებობს მათემატიკური ფორმულა, რომელიც ამბობს
logan=logbnlogba
ყველა დადებითი რიცხვისთვის a, b და n. ასე რომ, თუ a და b ორივე მუდმივაა, მაშინ logan და logbn განსხვავდება მხოლოდ logba-თი და ეს მუდმივი მამრავლია, რომლის უგულებელყოფაც შეგვიძლია ასიმპტოტურ ნოტაციაში.
მაშასადამე, შეგვიძლია, ვთქვათ, რომ ორობითი ძებნის ყველაზე უარესი სამუშაო დრო არის Θ(logan) ნებისმიერი დადებითი მუდმივა a-სთვის. რატომ? ვარაუდების რაოდენობა არის მაქსიმუმ log2n+1, თითოეული ვარაუდის გენერაცია და შემოწმება საჭიროებს მუდმივ დროს, შექმნა და დაბრუნება საჭიროებს მუდმივ დროს. თუმცა, პრაქტიკაში ხშირად ვწერთ, რომ ორობით ძებნას ესაჭიროება Θ(log2n), რადგან კომპიუტერულ მეცნიერებს უყვართ 2-ის ხარისხებში ფიქრი.
როცა ალგორითმებს ასიმპტოტურად ვაანალიზებთ, უნდა ვიცოდეთ ხშირად შემხვედრ ფუნქციებზე არსებული წესები. თუ a და b მუდმივებია და a<b, მაშინ Θ(na)-ს სამუშაო დრო იზრდება უფრო ნელა, ვიდრე Θ(nb)-ს სამუშაო დრო. მაგალითად, Θ(n)-ის სამუშაო დრო, რომელიც არის Θ(n1), იზრდება უფრო ნელა, ვიდრე Θ(n2)-ს სამუშაო დრო. არ არის აუცილებელი, რომ ხარისხის მაჩვენებლები იყვნენ მთელი რიცხვები. მაგალითად, Θ(n2)-ს მუშაობის დრო იზრდება უფრო ნელა, ვიდრე Θ(n2n)-ს მუშაობის დრო, რომელიც არის Θ(n2.5).
შემდეგი გრაფი ადარებს n-ის,n2-ისა და n2.5-ის ზრდას:
ლოგარითმები უფრო ნელა იზრდებიან, ვიდრე მრავალწევრები. ანუ, Θ(log2n) იზრდება უფრო ნელა, ვიდრე Θ(na) ნებისმიერი დადებითი მუდმივი a-სთვის. მაგრამ, ვინაიდან log2n-ის მნიშვნელობა იზრდება n-ის ზრდასთან ერთად, Θ(log2n) იზრდება უფრო სწრაფად, ვიდრე Θ(1).
შემდეგი გრაფი ადარებს 1-ის, n-ისა და log2n:-ის ზრდას:
აი, ფუნქციების ჩამონათვალი (ასიმპტოტურ ნოტაციაში), რომელთაც ხშირად ვხვდებით ალგორითმების ანალიზის დროს. დალაგებულია ყველაზე ნელიდან ყველაზე სწრაფამდე ზრდადობით.
  1. Θ(1)
  2. Θ(log2n)
  3. Θ(n)
  4. Θ(nlog2n)
  5. Θ(n2)
  6. Θ(n2log2n)
  7. Θ(n3)
  8. Θ(2n)
  9. Θ(n!)
აღვნიშნოთ, რომ მაჩვენებლიანი ფუნქცია an, სადაც a>1, იზრდება უფრო სწრაფად, ვიდრე მრავალწევრა ფუნქცია nb, სადაც b არის ნებისმიერი მუდმივა.
ზემოთ მოცემული სია ყველაფერს არ მოიცავს. არსებობს ბევრი ფუნქცია, რომელთა მუშაობის დროებიც არ არის ზემოთ ჩამოთვლილი. იმედია, კომპიუტერული მეცნიერების შესწავლისას მათაც გადაეყრებით.
ამ მასალის შინაარსი შექმნილია დარტმუთის კომპიუტერული მეცნიერების პროფესორების, თომას კორმენისა და დევინ ბალკომის, ასევე ხანის აკადემიის კომპიუტრეული ჯგუფის მიერ. მასალის ლიცენზიაა CC-BY-NC-SA.

გსურთ, შეუერთდეთ დისკუსიას?

პოსტები ჯერ არ არის.
გესმით ინგლისური? დააწკაპუნეთ აქ და გაეცანით განხილვას ხანის აკადემიის ინგლისურენოვან გვერდზე.