1. 程式人生 > 其它 >php鎖的機制、原理

php鎖的機制、原理

整除分塊

整除分塊是用來求這樣的式子的:

\(\sum_{i=1}^{n}\lfloor\dfrac k i\rfloor\)

如果打出表會發現這個值是呈階梯狀下降的,然後他的取值最多有 \(2\sqrt n\) 種,所以只要能 \(O(1)\) 求出每個塊的右邊界,就可以將這個 \(O(n)\) 的式子優化到 \(O(\sqrt n)\)


\(O(1)\) 求右邊界的方法:

設左端點為 \(l\)\(t=\lfloor\dfrac k l\rfloor\)

  1. \(t\ne0,r=\min(\lfloor\dfrac k t\rfloor,n)\)
  2. \(t=0,r=n\)

證明:

先證明 \(r=\lfloor\dfrac k t\rfloor\)

時,\(\lfloor\dfrac k {\lfloor\frac k t\rfloor}\rfloor\) 大於等於 \(t\)

\(t=\lfloor\dfrac k l\rfloor\leq\dfrac k l\)

\(\lfloor\dfrac k {\lfloor\frac k t\rfloor}\rfloor\geq\lfloor\dfrac k { \frac k t}\rfloor=t\)

\(\lfloor\dfrac k {\lfloor\frac k l\rfloor}\rfloor\geq t\)

再證明 \(r=\lfloor\dfrac k t\rfloor+1\)

時,\(\lfloor\dfrac k {\lfloor\frac k t\rfloor+1}\rfloor\) 小於\(t\),這樣由 \(\lfloor\dfrac k i\rfloor\) 單調不升且存在 \(\lfloor\dfrac k i\rfloor=t\) 就可以得證 \(r=\lfloor\dfrac k t\rfloor\) 時是最大的滿足條件的右端點。

\(\lfloor\dfrac k {\lfloor\frac k t\rfloor+1}\rfloor\leq\dfrac k {\lfloor\frac k t\rfloor+1}\)

只需證 \(\dfrac k {\lfloor\frac k t\rfloor+1}<t\)

把分母乘過去,\(k<t*{\lfloor\frac k t\rfloor+t}\)

\(k=x*t+r,0\leq r<t\)

\(x*t+r<t*x+t\)

\(r<t\)

得證。


好像可以拓展到二維,但我還沒看,先咕了