задача-c ссылка на сложность - PullRequest
4 голосов
/ 31 марта 2012

Для c ++ STL существует стандартное местоположение де-факто (помимо стандартного de-jour *, я имею в виду ), чтобы найти информацию о гарантиях сложности стандартных операций контейнера.

Существует ли аналогичный доступный через Интернет документ со списком гарантий сложности для NSArray, NSDictionary и т. Д .?

Например, я не могу найти ссылку, которая дает сложностьдля [NSArray count]

Ответы [ 2 ]

9 голосов
/ 31 марта 2012

Правильно.Там нет ни одного.C ++ / STL (основываясь на моем ограниченном понимании) имеют значительную направленность на производительность.Objective-C / Foundation в основном не.

NSArray, NSDictionary и друзья являются интерфейсами.Они говорят вам, как их использовать, а не как они себя ведут.Это дает им свободу переключать реализацию под капот по соображениям производительности.Дело в том, что вам не нужно заботиться, и это не будет указано в API, поэтому вы не сможете, даже если захотите;)

Для действительно хорошего прочтения по этой теме выделитепереключатели реализации и с грубым сравнением между классами Foundation и структурами данных STL / C, посмотрите Ridiculous Fish (кто-то из команды Apple AppKit) сообщение в блоге "Наши массивы не являются"

0 голосов
/ 31 марта 2012

Существует ли аналогичный доступный через Интернет документ со списком гарантий сложности для NSArray, NSDictionary и т. Д .?

Нет.Если вы понимаете, что делают разные контейнеры, у вас будет довольно хорошее представление о том, как они ведут себя (например, словарь == карта -> поиск почти в постоянном времени).Но не думайте, что вы точно знаете, как ведут себя эти структуры, потому что они могут изменять свое поведение в зависимости от обстоятельств .Другими словами, такой класс, как NSArray, не может быть (конечно, не) реализован как фактический массив в смысле массива в стиле C, даже если он имеет такое же поведение «упорядоченной последовательности элементов».* Конечно, вы можете проанализировать сложность вашего собственного кода: ваш собственный бинарный поиск через NSArray всегда будет выполнять O (log n) операций, как бы вы их ни вырезали.Только не думайте, что для вставки элемента в NSMutableArray потребуется переместить все последующие элементы, потому что ваш «массив» действительно может быть связанным списком или чем-то еще.

...