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

2.3 Складнiсть задач
Треба перевiрити n ( n − 1 )( n − 2 ) варiантiв , що вiдповiдає кубiчнiй складностi O ( n 3 ).
У загальному випадку , якщо ефективнiсть алгоритму визначається багаточленом фiксованого порядку k вiд обсягу вхiдних даних n , то вона задовольняються оцiнкою O ( n k ), не зважаючи , згiдно з властивiстю 2 , на старший коефiцiєнт i решту членiв полiнома .
O-оцiнювання дозволяє не використовувати конкретний обчислювальний пристрiй для аналiзу складностi .
Нехай є деяка вiртуальна машина M , яка обчислює функцiю f , i визначенi вхiднi данi : x – деяке двiйкове слово . Визначимо функцiю T ( M , x ) як кiлькiсть операцiй , що потрiбнi машинi M для роботи на вхiдному словi x . Справедлива така теорема , яка є наслiдком з так званоï теореми Блюма про прискорення ( 1967 ).
Теорема 2.1 . Iснує така всюди визначена на двiйкових словах обчислювана функцiя f , що будь-яку машину M , яка ïï обчислює , можна прискорити так : iснує iнша машина M ′ що також обчислює f , для якоï виконується нерiвнiсть t M ′( n ) ≤ log 2 t M ( n ) для майже всiх n ( тобто всiх натуральних чисел за виключенням елементiв деякоï скiнченоï множини натуральних чисел ), де t M ( n ) = max | x | ≤n T ( M , x ), | x | позначає довжину слова x .
За бiльш вiльного формулювання скажiмо так : iснує задача для якоï iснує багато алгоритмiв вирiшення , але неможливо придумати найшвидший алгоритм , оскiльки для кожного алгоритму вирiшення iснує ще швидший алгоритм , який ïï вирiшує . Слiд зауважити , що така властивiсть має мiсце не для кожноï задачi .

2.3 Складнiсть задач

Поняття складностi алгоритму пов ’ язане з поняттям складностi задачi . Iз теореми Блюма можна зробити висновок , що визначати складнiсть задачi через складнiсть найкращого алгоритму для ïï розв ’ я- зання – не найвдалiший спосiб .
Нехай необхiдно побудувати алгоритм для розв ’ язання такого класу задач : обчислити значення виразу a n x n +...+ a 1 x + a 0 у точцi x = b , де a i ∈ Z , b ∈ Z , а Z – множина цiлих чисел . Наведемо алгоритм для даного класу задач .
Вхiднi данi : ( a n , a n−1 , ..., a 0 ), де a i ∈ Z , b ∈ Z , ( a n , a n−1 , ..., a 0 ) – вектор з n + 1 цiлих чисел , b – цiле число . Результат : r = f ( b ), де f ( b ) = a n b n + ... + a 1 b + a 0 . Змiннi : i , x , r – цiлого типу .
33