ძირითადი მასალა
კომპიუტერული მეცნიერება
კურსი: კომპიუტერული მეცნიერება > თემა 1
გაკვეთილი 3: ასიმპტოტური ჩანაწერიასიმპტოტური ჩანაწერი
აქამდე ჩვენ გავაანალიზეთ წრფივი ძებნა და ორობითი ძებნა ვარაუდების მაქსიმალური რაოდენობის დათვლით. მაგრამ რაც ნამდვილად გვაინტერესებს, არის რამდენი ხანი სჭირდება ამ ალგორითმების მუშაობას. ჩვენ გვაინტერესებს დრო და არა — მხოლოდ ვარაუდები. წრფივი ძებნისა და ორობითი ძებნის სამუშაო დროები მოიცავს დროს, რომელიც საჭიროა ვარაუდების გასაკეთებლად და შესამოწმებლად, მაგრამ სულ ეს არაა.
ალგორითმის სამუშაო დრო დამოკიდებულია იმაზე, თუ რამდენი ხანი სჭირდება კომპიუტერს ამ ალგორითმის კოდის ხაზების შესასრულებლად — და ეს დამოკიდებულია კომპიუტერის სიჩქარეზე, პროგრამირების ენაზე და კომპილატორზე, რომელიც პროგრამას თარგმნის პროგრამირების ენიდან კოდზე, რომელიც პირდაპირ კომპიუტერზე ეშვება, სხვა ფაქტორებთან ერთად.
მოდით, ფრთხილად დავფიქრდეთ ალგორითმის სამუშაო დროზე. შეგვიძლია, ორი იდეის კომბინაცია გამოვიყენოთ. პირველ ყოვლისა, ჩვენ უნდა გავარკვიოთ, რამდენი ხანი ესაჭიროება ალგორითმს შემომავალი მონაცემების ზომასთან მიმართებით. ეს იდეა ინტუიციურად სწორია, არა? უკვე ვნახეთ, რომ ვარაუდების მაქსიმალური რაოდენობა წრფივ ძებნაში და ორობით ძებნაში იზრდება, როცა მასივის სიგრძე იზრდება. ან იფიქრეთ GPS-ზე. თუ მხოლოდ შტატთაშორისი გზატკეცილების სისტემის შესახებ იცის და არ იცის ყველა პატარა-პატარა ქუჩა, უფრო სწრაფად უნდა იპოვოს ორ წერტილს შორის გზა, არა? ანუ, ალგორითმის სამუშაო დროზე ისევე ვფიქრობთ, როგორც მისი შემომავალი მონაცემების ზომის ფუნქციაზე.
მეორე იდეა არის შემდეგი: ყურადღება უნდა გავამახვილოთ იმაზე, თუ რამდენად სწრაფად იზრდება ფუნქცია მისი შემომავალი მონაცემების ზომის ზრდასთან ერთად. ამას ზრდის სიჩქარეს ვეძახით. ყველაფერი ძალიან რომ გავართულოთ, ფუნქცია უნდა გავამარტივოთ, რათა თვალ-ყური ვადევნოთ მეტად მნიშვნელოვან ნაწილს და მოვიშოროთ ნაკლებ მნიშვნელოვანი ნაწილები. მაგალითად, ვთქვათ, ალგორითმი, რომელიც ზომის მქონე შემომავალ მონაცემებზე მუშაობს, იყენებს მანქანურ ინსტრუქციას. ხდება უფრო დიდი, ვიდრე დანარჩენი წევრები, , როგორც კი ხდება საკმარისად დიდი, ამ შემთხვევაში - 20. აი, დიაგრამა, რომელიც გაჩვენებთ -სა და -ს -ის მნიშვნელობებისთვის 0-იდან 100-მდე:
ჩვენ ვიტყოდით, რომ ეს ალგორითმი მუშაობს დროში, ვიშორებთ კოეფიციენტ 6-ს და დანარჩენ წევრებს: . მნიშვნელობა არა აქვს, რა კოეფიციენტებს ვიყენებთ; თუ მუშაობის დრო არის რიცხვებისთვის , და , ყოველთვის იარსებებს ისეთი მნიშვნელობა , რომლისთვისაც არის მეტი, ვიდრე და ეს სხვაობა იზრდება, როცა იზრდება. მაგალითად, აი, დიაგრამა, რომელზეც ნაჩვენებია -ისა და -ის მნიშვნელობები, სადაც ჩვენ -ის კოეფიციენტი 10-ჯერ შევამცირეთ და დანარჩენი ორი კოეფიციენტი გავზარდეთ 10-ჯერ:
მუდმივი კოეფიციენტებისა და ნაკლებად მნიშვნელოვანი წევრების მოშორებით შეგვიძლია ყურადღება გავამახვილოთ ალგორითმის მუშაობის დროის მნიშვნელოვან ნაწილზე — მისი ზრდის სიჩქარეზე — თან თავიდან ავირიდებთ ზედმეტ დეტალებში ჩასვლას, რომელიც აღქმას გვირთულებს. როდესაც ვიშორებთ მუდმივ კოეფიციენტებს და ნაკლებად მნიშვნელოვან წევრებს, შეგვიძლია, გამოვიყენოთ ასიმპტოტური ნოტაცია. მის სამნაირ ფორმას ვიხილავთ: big- ნოტაცია, big-O ნოტაცია და big- ნოტაცია.
ამ მასალის შინაარსი შექმნილია დარტმუთის კომპიუტერული მეცნიერების პროფესორების თომას კორმენისა და დევინ ბალკომის, ასევე ხანის აკადემიის კომპიუტერული ჯგუფის მიერ. მასალის ლიცენზიაა CC-BY-NC-SA.
გსურთ, შეუერთდეთ დისკუსიას?
პოსტები ჯერ არ არის.