Скажем, у вас есть экземпляр очереди в .NET (Systems.Generic.Collections.Queue). В очереди есть 10 элементов, где элемент 9 (считая от 0) является последним добавленным элементом в очереди.Как перемещать элементы?
Так что очередь может выглядеть следующим образом:
{0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0}
где 0,1 является следующим элементом, который будет выскочил на DEQUEUE и 1,0 является наиболее недавно добавленным элементом.
Я хотел бы отказаться от наиболее недавно добавленных пунктов 5, так что очередь заканчивает тем, как это (мне нужно поддерживать одинаковое количество элементов в очереди, поэтому размер не уменьшается):
{0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5}
Какой самый быстрый способ выполнения, что в .NET
Разъяснение:
т = 0: Очередь инициализируется
{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}
т = 1: Один элемент добавляется
{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1}
т = 2: добавляется один элемент
{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.2}
т = 3: Один элемент добавляется
{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.3}
т = 4: Два из последних добавленных элементов «отбрасываются» (перематываются во времени)
{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1}
Справочная информация:
я выдвигаю образцы в буфер. Буфер в основном представляет собой скользящее окно над длинным потоком образцов. Иногда я хочу «перемотать» окно; то есть: переместите его назад во времени, потому что образцы, которые я нажал, должны быть отброшены. Я не знаю, должны ли образцы отбрасываться раньше времени. Я должен нажать образцы, выполнить некоторые вычисления на образцах в «окне», а затем решить, нужно ли во время резервного копирования окна.
ОБНОВЛЕНИЕ
Требования:
Реализовать буфера X, который имеет фиксированный размер N элементов. Самый старший элемент в буфере находится в индексе 0 (X [0]). Новейший элемент в буфере находится в индексе N-1 (X [N-1])
Внедрите метод «Write», который записывает образец, s, в буфер. Когда образец записывается в буфер, выборки в буфере смещаются так, что , что X [j] = X [j + 1] для j = 0 - j = N-2 и X [N-1] = s.
В любой данный момент времени, способ для должны быть доступны следующие:
- Нахождение максимального значения выборки в буфере
- Нахождение минимального значения выборки в буфере
- Нахождение среднего от значений образца в буфере
- Чтение образца в произвольном месте в буфере
«Перемотка назад»: реализовать метод, который копирует элементы K, начиная с индекса 0, до индекса K-1 и помещает их в конец буфера. Таким образом, образец, который первоначально был включен в индекс K-1, был перенесен на индекс N-1, а образец, который первоначально был в индексе 0, был перенесен в индекс (N-1) - (K-1). Затем образцы с индексом 0 до индекса K-1 устанавливаются равными 0.
Надеюсь, что вышеизложенное разъясняет, что я хочу. Благодарю.
Что вы имеете в виду под «C# Queue»? Язык программирования C# не имеет понятия очереди. Вы имеете в виду ['System.Collections.Generic.Queue'] (https://msdn.microsoft.com/en-us/library/7977ey2c.aspx)? –
Зачем добавлять 5 последних добавленных элементов, чтобы добавить 5 новых элементов в голову очереди? – Enigmativity
@john - да, это была ошибка с моей стороны – user1884325