Основы объектно-ориентированного программирования на языке C# book | Page 35

2.3 Складнiсть задач
Таким чином , другий алгоритм ефективнiший за перший .
Пiд складнiстю задачi розумiтимемо час , необхiдний для обчислення функцiï , за допомогою якоï знаходиться ïï розв ’ язок . Пiд складнiстю розумiтимемо складнiсть алгоритму у найгiршому випадку . Oскiльки не можна побудувати для кожноï функцiï найкращоï машини , що ïï обчислює , то введемо поняття класу складностi .
Означення 2.7 . Клас складностi мiстить функцiï f , для яких iснує машина M , що обчислює f , така , що функцiя T ( M , x ) за часом обмежена функцiєю t ( n ) iз точнiстю до мультиплiкативноï константи , тобто
O ( t ( n )) = { f | ∃M : ( M обчислює f &( t M ( n ) = O ( t ( n )))}, де t ( n ) – порядок класу .
Класом задач складностi t ( n ) назвемо сукупнiсть задач , якi розв ’ я- зуються за час порядку t ( n ).
O-оцiнки виражають вiдносну швидкiсть алгоритму залежно вiд початкових даних . Розглянемо класи O-складностi алгоритмiв . Нехай N – кiлькiсть оброблюваних даних ( табл . 2.1 ).
Розглянемо прийоми проведення аналiзу алгоритмiв i визначення ïх складностi . Тимчасова складнiсть алгоритму може бути порахована , виходячи з аналiзу його керувальних структур . Ми пам ’ ятаємо , що до керувальних структур належать лiнiйнi та умовнi вирази , цикли ( табл . 2.2 ).
Якщо немає рекурсiï й циклiв , то всi керувальнi структури можуть бути зведенi до структур константноï складностi . Oтже , i весь алгоритм також характеризується константною складнiстю . Тому визначення складностi алгоритму в основному зводиться до аналiзу циклiв i рекурсивних викликiв . Розглянемо алгоритм обробки елементiв масиву .
Алгоритм :
1 . Для i = 1 до N виконувати 2 . початок 3 . { Простий вираз } 4 . кiнець ;
Складнiсть цього алгоритму становить O ( N ), оскiльки тiло циклу виконується N разiв , а складнiсть тiла циклу дорiвнює O ( 1 ).
35