A изготовлен из cons
сотовых телефонов. От R5RS list section:
Объекты в автомобильных полях последовательных пар списка являются элементами списка. Например, список из двух элементов - это пара, чей автомобиль является первым элементом и чья cdr является парой, чей автомобиль является вторым элементом и чья cdr - пустой список. Длина списка - это количество элементов, которое совпадает с количеством пар.
Например, список (a b c)
эквивалентна следующей серии пар: (a . (b . (c .())))
А может быть представлена в памяти с помощью следующих «узлов»:
[p] --> [p] --> [p] --> null
| | |
|==> a |==> b |==> c
с каждым узлом []
содержащий указатель p
на значение (это car
) и другой указатель на следующий элемент (это cdr
).
Это позволяет увеличить список до неограниченной длины, но для начала поиска в начале списка необходимо выполнить операцию ref
и переместить k
элементов, чтобы найти запрошенный. Как вы сказали, это O (n).
В противоположность этому, вектор в основном массив значений, которые могут быть внутренне представлены как массив указателей. Например, вектор #(a b c)
может быть представлен в виде:
[p p p]
| | |
| | |==> c
| |
| |==> b
|
|==> a
Если массив []
содержит серию из трех указателей, и каждый указатель присваивается значение в векторе. Таким образом, вы можете ссылаться на третий элемент вектора v
, используя обозначение v[3]
. Поскольку вам не нужно проходить предыдущие элементы, vector-ref
является операцией O (1).
Основным недостатком является то, что векторы имеют фиксированный размер, поэтому, если вам нужно добавить больше элементов, чем может удерживать вектор, вам необходимо выделить новый вектор и скопировать старые элементы в этот новый вектор. Это может быть дорогостоящей операцией, если ваше приложение делает это на регулярной основе.
Есть много ресурсов в Интернете - эта статья на Scheme Data Structures переходит в более подробно и приведены некоторые примеры, хотя это гораздо больше сосредоточены на списках.
Все, что сказал, если ваши ключи (или могут стать) целые числа, и вы либо иметь фиксированное число элементов или можете управлять с разумным количеством векторного перераспределения - например, вы загружаете вектор при запуске а затем выполнять в основном чтение - вектор может быть привлекательной альтернативой списку ассоциаций.
Благодарим за предоставленную информацию о хэш-таблицах. – 2013-04-17 16:23:20
Принял этот ответ немного поздно, но эй. – 2013-10-18 16:11:13