Я ищу "каноническое" имя структуры данных с характеристиками ниже.Я могу реализовать это, немного подумав, учитывая мое приложение, но мне любопытно, есть ли соответствующий тип структуры данных или алгоритм, который изучался в прошлом.
Требования:
- Поддержка массива фиксированного размера
При записи используются монотонно увеличивающиеся шаги в следующем смысле:
Массив заполненот начала до конца с одним индексом увеличивается, пока массив не заполнится.Например, если задано целое число i = 0 и неизменное целое число n фиксированного размера, массив заполняется i ++ до тех пор, пока i = n.
Затем индекс сбрасывается на второй элемент (индекс 1), поэтому i = 1Таким образом, шаг увеличивается на величину 1;в общем, шаг будет увеличиваться на 1 каждый раз, когда граница массива встречается или пересекается.Впервые шаг увеличивается, вместо i ++ мы имеем i = i + 2, пока i> = n.
int sRes=0;
template<T>
void addElement(T* element)
{
if(i >= n)
{
if (stride > 2*n)
{
sRes++;
// keep stride from overflowing the integer type
stride = (stride mod n);
}
stride += 1;
i = stride mod n;
}
// array of AR type, AR defined in #3 below
array[i] = new AR(element, stride);
i += stride;
}
Элементы массива включают «значение шага», когдазапись была написана / перезаписана.Таким образом, я могу определить, под каким шагом был написан текущий элемент.Таким образом, мы можем определить элемент массива следующим образом:
template<T> struct AR
{
T* value;
int stride;
}
Чтения массива соответствуют модели произвольного доступа (например, любой индекс может быть прочитан в любое время из-за нижележащего массива).
Для меня это имеет несколько проблем;если я хочу узнать текущий шаг, я могу посмотреть его в массиве.Но в какой-то момент у меня будут успехи, которые варьируются от n до 2 * n.Хотя это кажется подходящим для вышеупомянутой задачи, я задаюсь вопросом о последствиях.Я работаю на встроенном устройстве, с небольшим объемом памяти.Я хочу знать, как долго я обновляю массив.Я мог бы сэкономить количество модификаций, используя дополнительную логику, чтобы уменьшить необходимую мета-информацию о значении шага, например, сделать текущий мод счетчиком статических значений;количество модов - это количество раз, которое я увеличил шаг.
Таким образом, интерес, который я проявляю к имени, может включать в себя наблюдения, такие как проблема с модом в представленном виде.Я могу сохранить текущее количество увеличений шага в int32.Под моими ограничениями это приемлемо;хотя мне нравится использовать собственное имя идеи, если она существует, и мне нравится читать о наблюдениях, которые я, возможно, пропустил.
Я надеюсь, что эта презентация проблемы понятна!Если нет, дайте мне знать, и я обновлю вас соответствующим образом.
Спасибо!