2015-06-17 4 views
0

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

Со временем я добавляю новые строки в конец этого списка, и иногда я могу удалить последний элемент. Сейчас я использую mutable ListBuffer, делая += для добавлений и .trimEnd(1) для удаления.

После выполнения моей процедуры динамического программирования мне необходимо эффективно иметь доступ к каждому элементу этого списка/последовательности/etc и по порядку (первый элемент, который я вставил, будет первым, а последний элемент, который я вставил, будет быть последним доступным).

Я также попробовал ArrayBuffers, но они оба кажутся слишком медленными. Я пытаюсь ускорить этот процесс, и мне интересно, использую ли я структуру данных, которая имеет операции O (n), когда может быть что-то, у которого есть O (1) операторы времени для того, что мне нужно.

ответ

2

Простой одиночный список предоставит O (1) для добавления/удаления частей того, что вы описываете. В худшем случае, если вам нужно перевернуть список в конце перед обработкой, это будет операция O (n), заплаченная один раз.

Обратите внимание, что если вы спуститесь по этой дороге, на этапе накопления «первый» и «последний» будет отменен (вы добавите предметы и опустите первый элемент, получив хвост списка).

+0

Есть ли встроенный тип данных для этого? – user5019849

+0

scala.collection.immutable.List - http://www.scala-lang.org/api/2.11.5/index.html#scala.collection.immutable.List –

+0

В зависимости от того, с чем связана ваша пост-обработка, вы должны посмотреть на foldLeft, если он может быть сформулирован как шаг накопления, он предоставит вам заказ, который вы хотите довольно естественно. –

Смежные вопросы