На этот вопрос нет однозначного ответа, потому что это зависит не только от того, в какой тип вы преобразуете, но и от типа, из которого вы преобразуете.
Давайте рассмотрим только числа и строки. Чтобы не писать «log» везде, мы измерим размер int
, сказав, что n - это количество бит или цифр, необходимых для его представления. (Асимптотически не имеет значения, считаете ли вы биты или цифры.) Для строк, очевидно, мы должны позволить n быть длиной строки. Нет никакого осмысленного способа измерить «входной размер» объекта float
, поскольку все числа с плавающей запятой занимают одинаковое количество места.
- Преобразование
int
, float
или str
для его собственного типа должно занять Θ (1) времени, потому что они являются неизменяемыми объектами, поэтому даже не нужно делать копию. - Преобразование
int
в float
должно займет Θ (1) времени, потому что вам нужно только прочитать не более фиксированного постоянного числа битов из объекта int
, чтобы найти мантиссу, и длину в битах, чтобы найти показатель степени. - Преобразование
int
до str
должно занять Θ (n 2 ) времени, потому что вам нужно выполнить Θ (n) операций деления и остатка, чтобы найти n цифр, и каждая арифметическая операция c занимает Θ ( n) время из-за размера вовлеченных целых чисел. - Преобразование
str
в int
должно занять Θ (n 2 ) времени, потому что вам нужно сделать Θ ( n) умножения и сложения на целые числа размера Θ (n). - Преобразование
str
до float
должно занять Θ (n) времени. Алгоритм должен только прочитать фиксированное количество символов из строки, чтобы выполнить преобразование, и арифметические операции с плавающей запятой c (или операции над ограниченными значениями int
, чтобы избежать промежуточных ошибок округления) для каждого символа принимают Θ (1 время; но алгоритм все равно должен смотреть на остальные символы, чтобы поднять ValueError
, если формат неправильный. - Преобразование
float
в любой тип занимает Θ (1), потому что есть только конечное число различных float
значений.
Я сказал "должен", потому что я не проверял фактический исходный код; это основано на том, что должны делать алгоритмы преобразования, и на предположении, что фактически используемые алгоритмы не асимптотически хуже, чем они должны быть.
Теоретически могут быть особые случаи для оптимизации str
преобразование в int
, когда основание имеет степень 2, например int('11001010', 2)
или int('AC5F', 16)
, поскольку это можно сделать без арифметики c. Если эти случаи оптимизированы, то они должны занять Θ (n) времени вместо Θ (n 2 ).