Angenommen, ich habe ein 2D-Array M[n][n]
von Ganzzahlen (tatsächlich ist Binär in Ordnung, aber ich bezweifle, dass es wichtig ist). Ich interessiere mich für wiederholte Abfragen der Form: Wenn ein Koordinatenpaar , was ist
Natürlich können alle diese Werte in \ mathcal O (n ^ 2) Zeitsumme berechnet werden , und danach nehmen Abfragen \ mathcal O (1) . Mein Array ist jedoch veränderbar, und jedes Mal, wenn ich einen Wert ändere, erfordert die offensichtliche Lösung ein \ mathcal O (n ^ 2) -Update.
Wir können einen Quad-Baum erstellen M
. Die Vorverarbeitung benötigt . Auf diese Weise können wir Abfragen in und Aktualisierungen in .
Meine Frage ist:
Können wir die Abfragen erheblich verbessern, ohne die Updates zu stark zu beeinträchtigen?
Ich bin besonders daran interessiert, sowohl die Aktualisierungs- als auch die Abfrageoperationen sublinear zu machen und insbesondere beide auf .
Bearbeiten: Für einige weitere Informationen, obwohl ich denke, dass das Problem auch ohne diese weitere Einschränkung interessant ist, erwarte ich ungefähr Abfragen und über Updates. Das ideale Ziel ist es, die volle Laufzeit auf ungefähr . Daher wäre für mich auch eine Situation interessant, in der ein Update während eine Abfrage .