Блог пользователя RockyB

Автор RockyB, 7 лет назад, По-русски

Привет CodeForces!

В этом блоге утверждают что в задачах Divide and Conquer Optimization opt[i] <= opt[i + 1]

Где opt[i] -> такая позиция k которая даёт оптимальный ответ, например dp[i] = dp[k - 1] + C[k][i]

Помогите пожалуйста понять, почему именно так?

  • Проголосовать: нравится
  • +24
  • Проголосовать: не нравится

»
7 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

Мне кажется, что вы не совсем правильно понимаете смысл комментария про условия применимости. opt[i] <= opt[i + 1] не обязательно верно для произвольной функции C. Но если для конкретной С для всех i верно, что opt[i] <= opt[i + 1], то можно применять divide-and-conquer optimization.

  • »
    »
    7 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится -8 Проголосовать: не нравится

    Я не могу понять, почему если выполняется условие opt[i] <= opt[i + 1] почему оно верно?

    Допустим к этой задаче это условие выполняется, но я не знаю почему оно должно выполняться и как можно это доказать?

»
7 лет назад, # |
Rev. 3   Проголосовать: нравится +52 Проголосовать: не нравится

That monotonicity condition is what allows us to use Divide and Conquer optimization to reduce O(N^2) to O(N*logN). Take a look at some sample code.

We call solve(L, R, optima_l, optima_r) to find the optimal split points for all indices i such that L <= i <= R, subject to the condition that optima_l <= opt[i] <= optima_r. We achieve this by finding the optimal point for mid=(L+R)/2 by iterating in the range [optima_l, optima_r]. Then we call solve(L, mid-1, optima_l, optima_mid) and solve(mid+1, R, optima_mid, optima_r) recursively.

There are logN levels of recursion. Consider a single level. The TOTAL number of iterations over all intervals in that level is O(n). This is because opt[1] <= opt[2] <= opt[3] .... <= opt[N]. So this monotonicity condition is the reason we can reduce the time complexity in this manner.

Sometimes, formally proving the monotonicity condition can become difficult for a problem, maybe during an ongoing contest. In that case, I mostly rely on intuition or use another condition (which is sufficient but not necessary) to apply this optimization. I have found this second quadrangular inequality condition to be applicable to many problems. :)