Если ваш arraylist структурирован как куча, то первый цикл имеет сложность O (log n). Он начинается с последнего узла, а затем перемещается вверх по куче. Каждое изменение уровня делит i
на 2.
Как написано, ваш increasePriority
метод не будет работать, потому что он не обязательно найдет нужный вам узел. Он не смотрит на каждый узел в куче. Например, учитывая эту кучу:
1
2 3
4 5 6 7
Он начнется с узла 7, затем посмотрим на 3, а затем на 1. Если вы искали какое-либо другое значение, ваш алгоритм его не нашел бы.
Вы должны выполнить последовательный поиск массива, чтобы найти предмет. Затем вы можете использовать второй цикл для изменения приоритета.
То есть находит узел, который нужно изменить, - это O (n). Изменение приоритета, как только вы найдете его, - O (log n). Это делает сложность O (n) + log (n), и поскольку log (n) очень мала по сравнению с n, особенно когда n становится большим, мы называем это O(n)
.