Последовательность чисел, над которой выполняются различные операции, представленная в виде дерева AVL.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Последовательность чисел, над которой выполняются различные операции, представленная в виде дерева AVL.

Сообщение Anonymous »


Итак — у меня есть заданная последовательность чисел, над которой мне нужно выполнить определенное количество операций по вставке и удалению некоторых ее элементов. Мне также нужен указатель, указывающий на используемый в данный момент элемент.

Это должно выглядеть так:

Если я предоставлю программе последовательность чисел 6 0 5 2 7 11 - указатель окажется в начале (сейчас на цифре 6). Если это число четное, мне нужно удалить число в следующей позиции - в данном случае - число 0, а затем переместить указатель на (значение удаленного элемента). Таким образом, последовательность будет выглядеть так: 6 5 2 7 11, а указатель по-прежнему будет иметь номер 6. Также важно, чтобы последовательность работала как цикл, поэтому следующий элемент после последнего является первым элементом последовательности. Второй случай — когда число под указателем нечетное. Если это произойдет, мне придется добавить элемент со значением: (значение числа под указателем) - 1 и переместить указатель на значение, которое в данный момент находится под ним (в данном случае 7). Итак, в последовательности 7 2 6 и указатель на элемент 7 - это будет выглядеть так: 7 6 2 6 и указатель будет на последний 6 элемент последовательности.

Итак, используя предыдущий пример: предоставленная последовательность чисел — 6 0 5 2 7 11, а указатель находится на цифре 6.

6 0 5 2 7 11 – указатель на цифру 6.

6 5 2 7 11 – 6 – это даже если я удалю следующий элемент, указатель останется на уровне 6, поскольку значение удаленного числа равно 0. 6 2 7 11 – Та же ситуация, но на этот раз я перемещаю элемент pointer 5 вправо, так что теперь он находится на цифре 2.

6 2 11 — 2 тоже четное, поэтому я удаляю 7 и перемещаю элементы pointer 7 вправо.

6 2 11 10 – 11 нечетно, поэтому я добавляю (11 – 1) в качестве следующего элемента последовательности и перемещаю указатель на 11 элементов. После выполнения 4 операций добавления или удаления элементов последовательность чисел выглядит следующим образом: 6 2 11 10.

Моя проблема заключается в том, как реализовать этот алгоритм с использованием дерева AVL, поскольку я хочу, чтобы его временная сложность была xlogn, где x — количество операций вставки или удаления. это нужно сделать

Моей первой мыслью было просто сохранить индекс каждого узла, что позволило бы мне быстро искать последующие элементы дерева (например, если я знаю, что мне нужно переместить указатель в последовательности на 5 элементов, я мог бы добавьте его текущее значение к 5 и найдите в дереве элемент с индексом x + 5), а затем выполните какое-либо действие, например. добавьте число 10 в качестве следующего элемента. Проблема в том, что если число 10 теперь будет иметь индекс x+5+1, то мне придется менять индексы для всех следующих элементов последовательности, и мне кажется, что это не позволит достичь временной сложности xlogn. .

Итак, мой вопрос: как мне решить эту проблему?

Конечно, если что-то непонятно, я постараюсь объяснить по-другому, проще.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Есть ли выгода для написания предметов для хранения дерева AVL?
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Есть ли выгода для написания предметов для хранения дерева AVL?
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Тексты в виде дерева (формы Windows) выделяются жирным шрифтом при загрузке дерева.
    Гость » » в форуме C#
    0 Ответы
    209 Просмотры
    Последнее сообщение Гость
  • Два массива становятся одинаковыми, даже если над каждым выполняются разные операции.
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Когда фактически выполняются операции Jinja2 {% set %}?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»