Предположим, у вас есть программа one_factor(N)
, которая, учитывая двоичное число n
-di git, N
, возвращает один из главных факторов числа за Theta(n^2)
время (обратите внимание, что я использовал строчная n
в моей тета-записи.)
Используя этот алгоритм, я хочу найти эффективный алгоритм для деления двоичного числа n
-di git на простые числа и вывода простых чисел. Кроме того, я хочу знать, насколько быстро алгоритм работает как функция n
, и я также хочу вычислить приблизительное число раз, когда мой алгоритм использует one_factor(N)
oracle в худшем случае как функцию n
.
Предположим, что требуется Theta(n)
время, чтобы сложить / разделить / умножить / вычесть два n
-di git двоичных чисел.
Вот алгоритм, который работает :
- Звоните
one_factor(N)
. Если функция возвращает N
, то N
является простым, и мы закончили. В противном случае разделите этот главный фактор и сохраните его где-нибудь. Повторяйте эту процедуру, пока мы не закончим.
Теперь у меня возникают проблемы с анализом времени выполнения этой процедуры как функции n
. Для простоты, если N
- это степень двойки, то n = log_2(N)
, но я не совсем уверен, как действовать дальше.
Я не понимаю, как найти число наихудших случаев, когда мы звоним one_factor
, и у меня возникают проблемы с анализом времени выполнения наихудшего случая.