Предлагается хранить типы блоков в массиве. Каждый элемент - 2Б, количество элементов - 2^20 => всего требуется 2МБ.
При перезаписи блока и очередной переоценке необходимо учитывать типы данных в блоке до перезаписи (T0), после перезаписи (T1) и в соседних блоках (TL, TR).
Если T0 = T1, то количество кусков данных не изменяется, т.е. W[i+1] = W[i] TL = T0 = TR <> T1 -> W[i+1] = W[i] + 2 TL = T1 = TR <> T0 -> W[i+1] = W[i] - 2 TL = TR, T0 <> TL, T1 <> TL -> W[i+1] = W[i]
Если все четыре типа не совпадают, то W[i+1] = W[i] Если перезаписывается блок с адресом 0, считать, что тип TL не совпадает ни с одним из трех других.Аналогично при перезаписи блока с адресом , но для TR.
Строишь таблицу истинности. Просто выполняешь каждое действие и заносишь его в таблицу. ⇒ импликация. Таблица истинности во вложении. Если математически, то это условие: a ≤ b. Если оно выполняется, то условие истинно. Т.е. если a = 1, b = 0, то a ⇒ b = 0(ложь). Во всех остальных случаях 1(истина).
Выполнять надо по приоритету, как в математике. Сначала отрицание ¬, умножение ∧, сложение ∨ и т.д. Импликацию ⇒ обычно делают в конце, если нет эквивалентности ~. Ну и стоит обращать внимание на скобки.
40960 бит -~= 41 KB
875-875000 B
1.5-1500 B
2-2000 KB
1.5-1500000 B
ж)1000000 B