ალგორითმის სირთულე, პირველ რიგში, ორ რესურსს ეხება:
დრო
(შესრულების ხანგრძლივობა) და
სივრცე
(მეხსიერების გამოყენება). მიუხედავად იმისა, რომ დროის სირთულე ზომავს, თუ როგორ იზრდება შესრულების დრო შეყვანის ზომასთან ერთად (
ნ
), სივრცის სირთულე აფასებს მეხსიერების მოხმარებას. მაგალითად:
- ალგორითმი
O(n)
დროის სირთულე წრფივად მასშტაბირდება შეყვანის ზომასთან ერთად.
- ალგორითმი
O(1)
სივრცის სირთულე იყენებს მუდმივ მეხსიერებას შეყვანის ზომის მიუხედავად.
ორივე მეტრიკა აუცილებელია. სწრაფმა ალგორითმმა შეიძლება ამოწუროს მეხსიერება დიდ მონაცემთა ნაკრებებზე, მაშინ როდესაც მეხსიერების ეფექტური ალგორითმი შეიძლება ძალიან ნელი იყოს რეალურ დროში სამუშაო აპლიკაციებისთვის.
ეფექტურობა განსაზღვრავს მის შესაძლებლობას. განვიხილოთ 10 ნივთის სიის დახარისხება 10 მილიონის წინააღმდეგ:
- A
ბუშტის დახარისხება
(
O(n)
) შეიძლება საკმარისი იყოს მცირე მონაცემთა ნაკრებებისთვის, მაგრამ არაპრაქტიკული ხდება დიდი ნაკრებებისთვის.
- A
შერწყმის დახარისხება
(
O(n log n)
) უფრო დიდ მონაცემთა ნაკრებებს მოხდენილად ამუშავებს, მაგრამ დამატებით მეხსიერებას მოითხოვს.
სირთულის ანალიზი ალგორითმების შესადარებლად უნივერსალურ ენას გვთავაზობს, აპარატურულ-სპეციფიკური დეტალების აბსტრაქციით. ის დეველოპერებს საშუალებას აძლევს, იწინასწარმეტყველონ მასშტაბირება და თავიდან აიცილონ შეფერხებები კრიტიკულ სისტემებში.
ასიმპტოტური ნოტაციები აღწერს ფუნქციების შემზღუდველ ქცევას, რაც სირთულის შემოკლებულ განმარტებას გვთავაზობს. სამი ძირითადი ნოტაციაა:
დიდი O ნოტაცია განსაზღვრავს მაქსიმალურ დროს ან სივრცეს, რომელსაც ალგორითმი დაიკავებს. მაგალითად:
-
O(1)
: მუდმივი დრო (მაგ., მასივის ელემენტზე წვდომა ინდექსის მიხედვით).
-
O(n)
: ხაზოვანი დრო (მაგ., სიის იტერაცია).
-
O(n)
კვადრატული დრო (მაგ., ჩადგმული ციკლები ბუშტების სორტირებაში).
Big O ყველაზე ხშირად გამოყენებული მეტრიკაა, რადგან ის უზრუნველყოფს შესრულების ზღვრულ დონეს.
ომეგა აღწერს საჭირო მინიმალურ დროს. მაგალითად:
- წრფივ ძიებას აქვს
(1)
თუ სამიზნე პირველი ელემენტია.
ოპტიმისტურია, მაგრამ საუკეთესო შემთხვევის ანალიზი ნაკლებად ინფორმაციულია უარესი შემთხვევის დაგეგმვისთვის.
თეტა აერთიანებს დიდ O-სა და ომეგას, რაც ზუსტ ასიმპტოტურ ქცევას წარმოადგენს. თუ ალგორითმი საუკეთესო და ყველაზე ცუდი შემთხვევები ერთნაირია:
-
(n ლოგ 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-ის შესანარჩუნებლად.
კომპრომისებს მნიშვნელობა აქვს:
-
დრო vs. კოსმოსი
: გამოიყენეთ ჰეშ-რუპები (
O(1)
ძიებები) მეხსიერების ხარჯზე.
-
სიმარტივე vs. ოპტიმალურობა
: ჩასმის სორტირება (
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) ამისთვის n = 10 ზედნადები ხარჯების გამო.
მემორიალიზებული ფიბონაჩის ფუნქცია ( O(n) სივრცე) შეიძლება დიდი შეყვანის დროს გაითიშოს, განმეორებადი ვერსიისგან განსხვავებით ( O(1) სივრცე).
თვითბალანსირებადი BST ( O(log n) ძებნა) უფრო უსაფრთხოა, ვიდრე ჩვეულებრივი BST ( O(n) უარესი შემთხვევა) არასანდო მონაცემებისთვის.
ალგორითმის სირთულის ანალიზი არის კომპასი, რომელიც დეველოპერებს გამოთვლითი ეფექტურობის უზარმაზარ ლანდშაფტში წარმართავს. MTSC7196 სტუდენტებისთვის ამ დისციპლინის დაუფლება თეორიულ ცოდნასა და პრაქტიკულ გამოცდილებას აერთიანებს. დროისა და სივრცის მოთხოვნების ანალიზით, ასიმპტოტური საზღვრების შედარებით და რეალურ სამყაროში არსებული კომპრომისების გათვალისწინებით, დეველოპერებს შეუძლიათ შექმნან სისტემები, რომლებიც მოხდენილად მასშტაბირდება და საიმედოდ მუშაობს.
მონაცემებზე დაფუძნებული ინოვაციებით განსაზღვრულ ეპოქაში, ერთმანეთისგან გარჩევის უნარი O(n log n) და O(n) გამოსავალი მხოლოდ აკადემიური არ არის, ეს სტრატეგიული იმპერატივია. სწავლის პროცესში გახსოვდეთ: სირთულის ანალიზი მხოლოდ რიცხვებსა და სიმბოლოებს არ ეხება. საქმე თავად გამოთვლების გულისცემის გაგებას ეხება.
2019 წლიდან მოყოლებული, შეხვდა სამკაულები დაარსდა ჩინეთში, Guangzhou- ში, სამკაულების წარმოების ბაზაში. ჩვენ ვართ საიუველირო საწარმოს ინტეგრაციის დიზაინი, წარმოება და გაყიდვა.
+86-19924726359/+86-13431083798
სართული 13, გომის სმარტ სიტის დასავლეთის კოშკი, No. 33 ჯუქსინის ქუჩა, ჰაიზუს რაიონი, გუანჯოუ, ჩინეთი.