Структуры данных в lisp

У меня простая проблема: собрать объекты в список и просмотреть этот список в обратном направлении. Кажется довольно простым, но этот код является частью высоконагруженных вычислений. Использование conses довольно естественно, потому что для добавления нового элемента и последовательного доступа требуется O (1). Но что мне делать, если мне нужен эффективный список с двойной связью, чтобы легко перемещаться по нему в обоих направлениях? Использовать (обратный)? Для этого требуется O (n) памяти и времени, поэтому на самом деле в моем случае потребуется O (n ^ 2) (что действительно плохо). Использовать (последний) или (добавить)? Та же история: О (п). Я не очень понимаю, где найти (кроме исходного кода) информацию о вычислительной сложности стандартных библиотечных функций. Это зависит от реализации? А что мне нужно сделать для реализации различных стандартных структур данных? Есть ли какие-либо руководства по эффективному использованию conses?

14
задан lumberjack 23 April 2011 в 02:20
поделиться