Я пытаюсь вычислить сложность различных вариантов алгоритма с использованием Big O.Вычисление сложности алгоритма с использованием Big O
Упрощенное описание алгоритма следующим образом:
Давайте рассмотрим «преобразователь» функция который принимает определенный объект и преобразует его в другое представление. Каждый конвертер определяет свой домен и диапазон.
Существует процедура, которая принимает объект-источник (то есть объект для преобразования), список функций преобразователя и ожидаемый тип преобразования.
Он выполняет итерацию в списке преобразователей, пока не найдет конвертер, домен и диапазон которого совместимы с объектом для преобразования и ожидаемым типом преобразования.
Насколько я знаю, сложность этого должна быть O (n), поскольку она напрямую зависит от количества преобразователей.
Теперь, какая будет сложность, если каждому конвертеру может потребоваться рекурсивно вызывать процедуру преобразования определенное количество раз?
Например, может потребоваться преобразование определенных компонентов исходного объекта в другие объекты, которые впоследствии будут собраны в качестве возвращаемого объекта (цель первоначального преобразования).
Как я понимаю, неформально это дает:
n + m1(n + m2 (n + m3 (...))))
Где:
- п является мерой усилия, чтобы найти оригинальный конвертер.
- m1 количество подкомпонентов исходного объекта, которые должны быть преобразованы в процедуру преобразования.
- m2 максимальное количество подкомпонентов от исходных объектов m1.
- и т.д ...
В качестве дополнительных деталей, количество подкомпонентов для преобразования должно уменьшаться на каждом рекурсивном вызове.
Это правильно? Если да, то как мне уменьшить эту формулу до нотации Big O?
И, наконец, какая будет сложность, если есть какая-то интеллектуальная система индексирования, которая позволяет мне быстро найти правильную функцию конвертера в списке преобразователей? Насколько я понимаю, в простейшем случае, когда конвертер не вызывает функцию преобразования рекурсивно, это должно быть O (log n), правильно?.
Но какова будет сложность алгоритма на основе индексирования, если каждый конвертер, как и в предыдущем случае, может потребоваться рекурсивно вызвать функцию преобразования?