Временная сложность функции ELT в Common Lisp для различных типов последовательностей - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь понять, как работает функция ELT, когда речь идет о различных типах последовательностей.

Кажется очевидным, что когда ему передается список, производительность имеет порядок O(n).Правда ли, что получение элемента из последовательности VECTORP имеет порядок O(1)?Как насчет строки?

Похоже, она не указана для HyperSpec или Common Lisp The Language.

1 Ответ

0 голосов
/ 23 мая 2018

Вообще говоря, стандарт ANSI CL не определяет подробности реализации, в том числе такие, как производительность.Другим примером является удаление хвостовых вызовов, предписанное Схемой, но не CL.Это, конечно, не означает, что авторы стандарта не обращали внимания на производительность (см. Раздел «Влияние на производительность» в каждой проблеме записи).

Тем не менее, вы можете безопаснопредположим, что elt равно O(1) на vector с (включая строку с).

Я не думаю elt используется очень часто, хотя - в основном потому, что обычно известно, действительно ли используется vector или list.Использование aref / char / nth служит дополнительной документацией кода.

PS.Логическое обоснование этого разительного различия между CL и Scheme заключается в том, что происхождение Scheme заключается в обучении : его пользователями являются новые студенты, которые должны изучать компьютерное программирование как методологию выражения идей об алгоритмах, таким образом, они должны иметь относительно простыеинструмент с четко определенным поведением.История ANSI CL показывает, что этот стандарт стал результатом попытки нескольких существующих поставщиков выработать общую основу для лучшей мобильности - чтобы, так сказать, сделать конкуренцию более справедливой.Аудитория - опытные программисты, которые знают, что такое торговля, и могут понять компромиссы производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...