Я искал его в Интернете на многих сайтах, но ни один не дал четкого ответа. Все они дают много сложных математических вещей, которые мне не только трудно понять, но и не имеют значения, поскольку я просто хочу знать, какова верхняя граница (наихудшая сложность), нижняя граница и средняя временная сложность алгоритма Евклида. Вот то, что я собрал с множества сайтов, ни один не говорит одно и то же:
Найти , с , и количество цифр :
Некоторые говорят, что временная сложность
Некоторые говорят, что временная сложность (при условии )
Другие говорят, что временная сложность
Один даже говорит: «По теореме Ламе вы найдете первое число Фибоначчи, большее, чем b. Если оно их меньше, чем рекурсивные вызовы. Таким образом, это "
Все говорят, что худший случай, когда и являются последовательными числами Фибоначчи.
Я был бы очень признателен, если бы вы окончательно уладили все это, дав мне прямые и ясные ответы на следующее:
Какова временная сложность (верхняя граница) алгоритма Евклида в наихудшем случае?
Какова средняя временная сложность алгоритма Евклида?
Какова нижняя граница алгоритма Евклида (в лучшем случае) и когда это происходит?
Вы даже не представляете, как мне поможет ваш ответ. Я очень подавлен, так как увяз в том, что можно считать довольно простым алгоритмом. Спасибо.
Чтобы решить некоторые предварительные вопросы, позвольте — количество шагов, предпринятых в алгоритме Евклида, который многократно оценивает до , предполагая . Кроме того, пусть быть количеством цифр в (дай или возьми). (Заметим, что в этих расчетах при подсчете шагов мы игнорируем вопрос о временной сложности функция. Если мы предположим, что это , то все нижеследующее относится и к временной сложности алгоритма.
В худшем случае, как вы сказали, и , где это последовательность Фибоначчи, так как она будет вычислять пока не дойдет до , так и . С , это означает, что . Обратите внимание, что и подразумевает для любого , поэтому наихудшим случаем для алгоритма Евклида является .
Средний случай требует немного больше внимания, так как он зависит от вероятностной ситуации. Для того, чтобы точно рассчитать его, нам нужно распределение вероятностей. Если фиксируется и выбирается равномерно из , то количество шагов является
или, для меньшей точности, . (Источник: Википедия)
В лучшем случае, или или какой-либо другой удобный случай, подобный этому, поэтому алгоритм завершается за один шаг. Таким образом, .
Если мы работаем на компьютере, используя 32-битные или 64-битные вычисления, как это обычно бывает, то отдельные операции на самом деле выполняются за постоянное время, поэтому эти оценки верны. Если же мы делаем вычисления с произвольной точностью, то для оценки фактической временной сложности алгоритма нам нужно использовать это имеет временную сложность . В этом случае вся «работа» выполняется на первом шаге, а остальные вычисления также , поэтому сумма . Однако я хочу подчеркнуть, что это применимо только в том случае, если число настолько велико , что вам нужна произвольная точность для его вычисления.
(Это подчеркивает разницу между нотацией «большой О» математика и нотации «большой О» программиста: в первом случае вы хотите, чтобы оценка была истинной. , даже те которые настолько абсурдно велики, что никто никогда не сможет их записать или сохранить в памяти, тогда как во втором случае программистов в первую очередь интересуют , и это либеральная оценка. Для них важнее увидеть «ведущий вклад» во временную сложность, а для алгоритма Евклида меньшее число определяет сложность вычислений в целом.)
время выполнения является линейным в представлении большего числа: если тогда время выполнения
Ганс Гибенрат
Айви Майк
йорики
Ганс Гибенрат
Айви Майк
Джстрал
апнортон
фонбранд