Изменения

Перейти к: навигация, поиск

Статистики на отрезках. Корневая эвристика

140 байт добавлено, 02:50, 24 мая 2012
Запрос на изменение элемента
<tex>p</tex> - номер элемента из массива <tex>A</tex>, который необходимо заменить; <tex>newValue</tex> - новое значение для данного элемента.
 
<tex> \circ </tex> - операция, для которой был сделан предпосчет.
Запрос на изменение элемента для операции, у которой есть обратная операция, и выполняется свойство коммутативности:
<code>
change(p, newValue) tmp = B[p / len] <tex> \circ </tex> inverse(A[p]) // <tex> \circ </tex> - операция, для которой был сделан предпосчет; inverse(A[p]) - обратный элемент A[p] = newValue B[p / len] = tmp <tex> \circ </tex> newValue
</code>
Запрос на изменение элемента для поиска минимума (операции, у которой хотя бы одно из условий не выполняется свойство коммутативности, но нет обратной операции)<pre>index = len * p / cntA[p] = newValueB[p / len] = newValuefor i = index to index + len B[p / len] = min(A[i], B[p / len])</pre>
<code>
change(p, newValue)
index = len * p / len
A[p] = newValue
B[p / len] = A[index]
for i = index + 1 to index + len - 1
B[p / len] = B[p / len] <tex> \circ </tex> A[i]
</code>
Таким образомЗапрос на изменение элемента в первом случае происходит за <tex>O(1)</tex> времени, запрос на во втором случае изменение элемента происходит не более чем за длину блока <tex>len</tex>, т.е. не более чем за <tex>O(\sqrt{n})</tex> времени.
==Источники==
338
правок

Навигация