У меня есть ситуация, когда у меня есть определенный диапазон ввода, и поэтому я могу полностью индексировать в O (1), создавая список размером с диапазон ввода и индексируя ввод сам по себе. Чтобы быть яснее, у меня по существу следующая ситуация
a = "inputrange"
rng = ord(max(a)) - ord(min(s))
data = [None] * rng
Моя проблема в том, что я не уверен, является ли процесс распределения для data
O (1) или нет. Интуитивно должен быть какой-то способ сделать это в O (1), так как в стеке я просто определяю начальную и конечную точки для данных, и поэтому для выделения требуется только время O (1), но python немного удален от этого, поэтому я не могу быть уверен.
Очень важно, что я могу выделить в O (1), так как я создаю дерево суффиксов для входных данных, и поэтому для обеспечения индексации O (1) при обходе дерева мне нужен список размером с алфавит (или хэш-карта , хотя я их избегаю), но поскольку я выделяю по существу каждый суффикс, мне нужно, чтобы выделение было постоянным.
Еще одна идея, которая у меня была, заключалась в том, чтобы создать список шаблонов и скопировать его, но копирование занимает O (n) времени, поэтому это не сработает.
РЕДАКТИРОВАТЬ: это не дубликат временной сложности [var]*n
, я четко заявляю, что ищу способ сделать список распределения памяти в O (1). Тот факт, что я использую [var]*n
в качестве текущего метода выделения этой памяти, не означает, что на него можно ответить, зная сложность этого метода.
Вопрос по-прежнему остается: Есть ли способ выделить место для пустого списка в python за время O(1).
None
в каждом элементе равно O(n). - person Barmar   schedule 21.04.2021list
как о примитивных массивах C.[None] * rng
— операция с линейным временем. Но от этого никуда не деться. В качестве альтернативы рассмотритеnumpy
иnumpy.empty
- person juanpa.arrivillaga   schedule 21.04.2021N
— размер этого списка. Обратите внимание,[None]*n
не пустой (кромеn ==0
),[]
– пустой список,[None, None, None]
– непустой. - person juanpa.arrivillaga   schedule 21.04.2021