Пространственно-временная сложность массива PHP

#php #arrays #complexity-theory

#php #массивы #сложность-теория

Вопрос:

Есть ли способ или ресурс для определения временной и пространственной сложности реализации массива в PHP, кроме вычисления его вручную?

Массив в PHP на самом деле является упорядоченной картой. Карта — это тип, который связывает значения с ключами. Этот тип оптимизирован для нескольких различных применений; его можно рассматривать как массив, список (вектор), хэш-таблицу (реализацию карты), словарь, коллекцию, стек, очередь и, вероятно, многое другое. Поскольку значениями массива могут быть другие массивы, также возможны деревья и многомерные массивы. — php.net

Из того, что я могу сказать, может показаться, что он имеет общую сложность карты

Комментарии:

1. В среднем случае это O (1), но в худшем случае это O (n) с вредоносной обработкой: murilo.wordpress.com/2013/10/16 /…

Ответ №1:

Поскольку он действует как хэш-таблица, у вас будет O(1) время при доступе к элементу по ключу.

Если вы перебираете массив, естественно, у вас будет O(n) время.

Если у вас есть время, вы можете ознакомиться с реализацией массива в PHP здесь

Ответ №2:

Доступ и итерации пока описаны @Mike-Lewis

  • Установка значения: O(1)
  • Добавьте: O (1) (Это то же самое, что задать значение для ключа «длина»)
  • Добавим: O (n) (Это предположение, но должно подойти, потому что оно должно переписать существующие ключи)
  • Сбросить значение: O(1)

Что-нибудь упущено?

Комментарии:

1. — Вставить: O (n) (Это предположение, потому что существующие значения, которые следуют за новым, должны быть переписаны)

Ответ №3:

В дополнение к тому, что сказал @Mike Lewis, я бы добавил, что один элемент массива в PHP занимает минимум 52 байта (доказательство)

Комментарии:

1. Просто для справки, по состоянию на 2020 год для PHP 7.3 эта сумма примерно в 2,5 раза меньше. Подробнее об этом.

2. Кто-нибудь знает производительность памяти SplFixedArray по сравнению с array ?

3. Как насчет php8, это уменьшило использование памяти?