Подтвердить что ты не робот

Заменяет ли Data.Vector Data.Sequence?

Я был поклонником Data.Sequence. Но поскольку я узнал о Data.Vector, кажется, что он может делать все, что может сделать Data.Sequence, но лучше, плюс это может сделать больше вещей. Должны ли мы обесценивать Data.Sequence и проповедовать Data.Vector? Есть ли веские причины для использования Data.Sequence для Data.Vector?

4b9b3361

Ответ 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).