Я был поклонником Data.Sequence. Но поскольку я узнал о Data.Vector, кажется, что он может делать все, что может сделать Data.Sequence, но лучше, плюс это может сделать больше вещей. Должны ли мы обесценивать Data.Sequence и проповедовать Data.Vector? Есть ли веские причины для использования Data.Sequence для Data.Vector?
Заменяет ли Data.Vector Data.Sequence?
Ответ 1
Ни одна из этих структур данных не может заменить другую; Data.Sequence
и Data.Vector
на самом деле находятся на диаметрально противоположных концах структур данных, доступных для представления последовательностей.
-
Data.Vector
- непрерывный массив элементов. Это означает небольшой объем памяти и O (1) поиск, но страшную мутацию, конкатенацию и копирование (O (n)). (Мутация может быть O (1), если вы бросаете упорство.) -
Data.Sequence
, с другой стороны, является чисто функциональным деревом. Это означает более высокий уровень использования памяти и меньшую локальность, но поддерживает быстрый доступ и мутацию O (log n) и удивительную конкатенацию O (log (min (n1, n2))) и копирование.
Выбор структуры данных действительно зависит от выполняемой задачи.
- Обработка больших потоков элементов линейным способом или со случайным поиском лучше всего сделать с помощью
Data.Vector
. - Если вам нужно разделить, объединить и изменить свои элементы, используйте
Data.Sequence
.
Ответ 2
Обмен префиксом кажется чем-то Seq
лучше, чем Vector
. snoc
on Vector
- O (n).