Не існує жодного уніфікованого визначення того, що таке «швидший алгоритм». Не існує керівного органу, який вирішує, чи алгоритм швидший за інший.
Щоб зазначити, чому це, я хотів би запропонувати два різні сценарії, які демонструють цю мутну концепцію.
Перший приклад - алгоритм, який шукає пов'язаний список не упорядкованих даних. Якщо я можу виконати ту саму операцію з масивом, я не маю змін у великій мірі продуктивності. Обидва пошуку є O (n). Якщо я просто дивлюся на великі значення О, я можу сказати, що я зовсім не покращив. Однак відомо, що пошук масивів швидше, ніж ходити по зв'язаному списку в більшості випадків, тому можна вирішити, що це зробило алгоритм "швидшим", навіть якщо великий О не змінився.
Якщо я можу використовувати традиційний приклад програмування робота, щоб зробити сендвіч PBJ, я можу показати, що я маю на увазі іншим способом. Розглянемо лише той момент, коли можна відкрити банку з арахісовим маслом.
Pick up the jar
Grab the lid
Unscrew the lid
Проти
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Grab the lid
Unscrew the lid
Навіть у найбільш академічній теоретичній обстановці, про яку я можу придумати, ви побачите, що люди приймають, що перший алгоритм швидший за другий, навіть якщо результати великої О нотації однакові.
На відміну від цього, ми можемо розглянути алгоритм для порушення шифрування RSA. На даний момент вважається, що цей процес, ймовірно, O (2 ^ n), де n - кількість біт. Розглянемо новий алгоритм, який працює швидше n ^ 100 Це означає, що мій новий процес працює в O (2 ^ n / n ^ 100). Однак у світі криптографії прискорення полінома до експоненціального алгоритму традиційно взагалі не розглядається як теоретичне прискорення. Роблячи докази безпеки, передбачається, що зловмисник може виявити одну з цих швидкості, і це не матиме ефекту.
Тож за однієї обставини ми можемо змінити O (n) на O (n) і швидше назвати його. За інших обставин ми можемо змінити O (2 ^ n) на O (2 ^ n / n ^ 100), і стверджувати, що взагалі не було значущої швидкості. Ось чому я кажу, що немає "єдиного визначення для" швидшого алгоритму ". Це завжди залежить від контексту.