Примечание : приведенный ниже код выглядит как C #, но на самом деле мне будет полезен ответ на любом языке.
Предположим, а не фактическая коллекция(например, List<T>
), у меня есть последовательность операций , каждая из которых выглядит примерно так:
struct ListOperation<T>
{
public enum OperationType { Insert, Remove }
public OperationType Type;
public T Element; // irrelevant for OperationType.Remove
public int Index;
}
Есть ли способ эффективно"реконструировать "коллекцию, основанную на последовательности таких операций?
В частности, я стараюсь избежать очевидной (неэффективной) реализации, заключающейся в простом создании List<T>
и вызове Insert
и RemoveAt
- обе операции O (N) - для каждого элемента.
Обновление : Допустим, «последовательность» операций на самом деле представляет собой конкретную коллекцию, счет которой известен и которыйпроизвольно доступен по индексу (например, как ListOperation<T>[]
).Скажем также, что фактическое количество результирующей коллекции уже известно (но на самом деле это было бы тривиально в любом случае вычислить в O (N) путем подсчета вставок и удалений).Есть другие идеи?