Корень лучше, если для больших чисел, особенно когда вы знаете диапазон чисел.
Исправление расчета:
Корень равен O (кН) , где k - количество цифр в наибольшем числе. (На самом деле речь идет о d * k * N , где d - база цифр, количество блоков, которые будут использоваться ... Алфавит = 26, десятичный = 10, двоичный = 2)
Максинт = 4 294 967 296
32 бита: k = 32 / log (d)
База 10 Radix:
d*k*n = 10*10*n < nlogn .... 100 < logn ... n > 2^100
База 2 Radix:
d*k*n = 2*32*n < nlogn .... 64 < logn ... n > 2^64
То есть для 32-разрядных чисел, если у вас более 2 ^ 64 чисел, n * k * N лучше, чем nlogn
Но, если вы знаете, что диапазон будет до 1024, а не MAXINT, например:
MaxNumber = 1024
Base 10 Radix:
d*k*n = 10*4*n < nlogn .... 40 < logn ... n > 2^40
Base 2 Radix:
d*k*n = 2*10*n < nlogn .... 20 < logn ... n > 2^20
То есть для чисел до 1024, если у вас более 2 ^ 20 чисел, n * k * N лучше, чем nlogn
Потому что большая буква O отбрасывает
мультипликативные константы на
время работы и игнорирует эффективность
для низких входных размеров, это не
всегда показывать самый быстрый алгоритм в
практика или для данных практически размера
устанавливает, но подход все еще очень
эффективен для сравнения
масштабируемость различных алгоритмов как
размеры ввода становятся большими.