Оценка сложности вычисления гиперобъема — различия между версиями
(→Эффективная аппроксимация нахождения значения гиперобъема) |
м (rollbackEdits.php mass rollback) |
||
(не показано 8 промежуточных версий 2 участников) | |||
Строка 8: | Строка 8: | ||
== #P-трудность задачи вычисления гиперобъема == | == #P-трудность задачи вычисления гиперобъема == | ||
{{Определение | {{Определение | ||
− | |definition=Задача #MON-CNF (Satisfability problem for monotone boolean formulas) — задача вычисления количества удовлетворяющих подстановок для монотонной булевой формулы, записанной в [[КНФ]] <tex>f = \bigwedge \limits _{k=1}^n \bigvee_{i \in C_k} x_i</tex> | + | |definition=Задача #MON-CNF (Satisfability problem for monotone boolean formulas) — задача вычисления количества удовлетворяющих подстановок для монотонной булевой формулы, записанной в [[КНФ]] <tex>f = \bigwedge \limits _{k=1}^n \bigvee_{i \in C_k} x_i</tex>, |
где все дизъюнкты <tex> C_k \subseteq {1,...,d}</tex> | где все дизъюнкты <tex> C_k \subseteq {1,...,d}</tex> | ||
}} | }} | ||
Строка 16: | Строка 16: | ||
|proof= Суть доказательства состоит в сведении задачи #MON-CNF к задаче вычисления значения гиперобъема. Так как доказано | |proof= Суть доказательства состоит в сведении задачи #MON-CNF к задаче вычисления значения гиперобъема. Так как доказано | ||
<ref> | <ref> | ||
− | D | + | Roth D. On the hardness of approximate reasoning, Artif. Intell., 82: 273–302, 1996, http://cogcomp.cs.illinois.edu/papers/hardJ.pdf |
</ref> | </ref> | ||
, что #MON-CNF является #P-трудной, то это докажет теорему. | , что #MON-CNF является #P-трудной, то это докажет теорему. | ||
Строка 26: | Строка 26: | ||
. Для упрощения вычислений далее будем работать с <tex>\overline{f}</tex>. | . Для упрощения вычислений далее будем работать с <tex>\overline{f}</tex>. | ||
− | Для каждого конъюнкта <tex>\bigwedge_{i \in C_k} \neg x_i</tex> построим соответствующий ему | + | Для каждого конъюнкта <tex>\bigwedge_{i \in C_k} \neg x_i</tex> построим соответствующий ему гиперпараллелепипед |
<tex>A_k = [0,a^k_1]\times...\times[0,a^k_d]</tex> | <tex>A_k = [0,a^k_1]\times...\times[0,a^k_d]</tex> | ||
Строка 38: | Строка 38: | ||
</tex>. | </tex>. | ||
− | Рассмотрим теперь <tex>A = \bigcup \limits _{k=1}^n A_k</tex>. Заметим, что так как все вершины | + | Рассмотрим теперь <tex>A = \bigcup \limits _{k=1}^n A_k</tex>. Заметим, что так как все вершины гиперпараллелепипедов <tex>A_i</tex> лежат в точках с целочисленными координатами 0,1 или 2, то и <tex>A</tex> можно разбить на гиперкубы вида <tex>B_{x_1,...,x_d} = [x_1,x_1 + 1]\times ... \times [x_d, x_d + 1]</tex>, где <tex>x_i \in \{0,1\}, i \in [d]</tex> (то есть на гиперкубы со сторонами 1 с координатами ближайшей к началу координат вершины 0 или 1). |
− | Более того, из-за целочисленности вершин <tex>A_i</tex>, каждый из этих | + | Более того, из-за целочисленности вершин <tex>A_i</tex>, каждый из этих гиперкубов лежит в хотя бы одном из <tex>A_i</tex> |
<tex> B_{x_1,...,x_d} \subset \bigcup \limits _{k = 1}^n A_k \iff B_{x_1,...,x_d} \subset A_k \iff</tex> | <tex> B_{x_1,...,x_d} \subset \bigcup \limits _{k = 1}^n A_k \iff B_{x_1,...,x_d} \subset A_k \iff</tex> | ||
Строка 50: | Строка 50: | ||
<tex>\iff \forall i : x_i = 1 \to a^k_i = 2 \iff \forall i : x_i = 1 \to i \notin C_k \iff (x_1,...,x_d) </tex> удовлетворяет <tex>\bigwedge_{i \in C_k} \neg x_i</tex> для некоторого <tex>k \iff (x_1,...,x_d)</tex> удовлетворяет <tex>\overline{f}</tex> | <tex>\iff \forall i : x_i = 1 \to a^k_i = 2 \iff \forall i : x_i = 1 \to i \notin C_k \iff (x_1,...,x_d) </tex> удовлетворяет <tex>\bigwedge_{i \in C_k} \neg x_i</tex> для некоторого <tex>k \iff (x_1,...,x_d)</tex> удовлетворяет <tex>\overline{f}</tex> | ||
− | Заметим, что так как <tex>\mu (B_{x_1,...,x_d}) = 1 \to \mu (\bigcup \limits _{k=1}^n) | + | Заметим, что так как <tex>\mu (B_{x_1,...,x_d}) = 1 \to \mu (\bigcup \limits _{k=1}^n A_k ) = |\{(x_1,...,x_d) \in \{0,1\}^d| (x_1,...,x_d)</tex> удовлетворяет <tex>\overline{f} \}|</tex> |
Таким образом произвели сведение, в значит задача вычисления гиперобъема принадлежит классу #P | Таким образом произвели сведение, в значит задача вычисления гиперобъема принадлежит классу #P | ||
Строка 58: | Строка 58: | ||
Приведем псевдокод алгоритма для аппроксимации гиперобъема объединения тел. В алгоритме, приведенном в | Приведем псевдокод алгоритма для аппроксимации гиперобъема объединения тел. В алгоритме, приведенном в | ||
<ref> | <ref> | ||
− | + | Bringmann K., Friedrich T. Approximating the volume of unions and intersections of high-dimensional geometric objects, ISAAC'2008, http://www.mpi-inf.mpg.de/~kbringma/paper/2008ISAAC_Volume.pdf | |
</ref> | </ref> | ||
− | используются три оракула: PointQuery, VolumeQuery и SampleQuery, каждый из которых ошибается с вероятностью <tex>\epsilon_p, \epsilon_v</tex> и <tex>\epsilon_s</tex> соответственно. | + | используются три оракула: <tt>PointQuery</tt>, <tt>VolumeQuery</tt> и <tt>SampleQuery</tt>, каждый из которых ошибается с вероятностью <tex>\epsilon_p, \epsilon_v</tex> и <tex>\epsilon_s</tex> соответственно. |
Оракул | Оракул | ||
− | *PointQuery(x,B) возвращает true, если точка <tex>x</tex> лежит внутри <tex> B</tex>. | + | *<tt>PointQuery(x,B)</tt> возвращает true, если точка <tex>x</tex> лежит внутри <tex> B</tex>. |
− | *VolumeQuery(B) возвращает объем заданного тела <tex>B</tex>. | + | *<tt>VolumeQuery(B)</tt> возвращает объем заданного тела <tex>B</tex>. |
− | *SampleQuery(B) для заданного тела <tex>B</tex> возвращает произвольную его точку <tex>x \in B</tex>. | + | *<tt>SampleQuery(B)</tt> для заданного тела <tex>B</tex> возвращает произвольную его точку <tex>x \in B</tex>. |
Для данного алгоритма допускаются следующие ослабления этих оракулов: | Для данного алгоритма допускаются следующие ослабления этих оракулов: | ||
− | *PointQuery (x,B) возвращает true для всех точек из некоторого тела <tex> B' : \mu ((B' \backslash B) \cup (B \backslash B'))\leq \epsilon_p \mu(B)</tex> | + | *<tt>PointQuery(x,B)</tt> возвращает true для всех точек из некоторого тела <tex> B' : \mu ((B' \backslash B) \cup (B \backslash B'))\leq \epsilon_p \mu(B)</tex> |
− | *VolumeQuery(B) возвращает значение <tex>V' : (1-\epsilon_v)\mu(B) \leq V' \leq (1+\epsilon_v)\mu(B)</tex> | + | *<tt>VolumeQuery(B)</tt> возвращает значение <tex>V' : (1-\epsilon_v)\mu(B) \leq V' \leq (1+\epsilon_v)\mu(B)</tex> |
− | *SampleQuery(B) возвращает произвольную точку из тела <tex>B' : |f(x) - 1/\mu(B')| < \epsilon_s </tex> | + | *<tt>SampleQuery(B)</tt> возвращает произвольную точку из тела <tex>B' : |f(x) - 1/\mu(B')| < \epsilon_s </tex> |
M := 0; C := 0; | M := 0; C := 0; | ||
<tex> \overline \epsilon := \frac{\epsilon - \epsilon_v}{1+ \epsilon_v} </tex> | <tex> \overline \epsilon := \frac{\epsilon - \epsilon_v}{1+ \epsilon_v} </tex> | ||
<tex> \overline C := \frac{(1+\epsilon_s)(1+\epsilon_v)(1+\epsilon_p)}{(1-\epsilon_v)(1-\epsilon_p)}</tex> | <tex> \overline C := \frac{(1+\epsilon_s)(1+\epsilon_v)(1+\epsilon_p)}{(1-\epsilon_v)(1-\epsilon_p)}</tex> | ||
<tex> T := \frac{24 ln (2) (1 + \overline \epsilon) n}{\overline \epsilon^2 - 8 (\overline C - 1) n}</tex> | <tex> T := \frac{24 ln (2) (1 + \overline \epsilon) n}{\overline \epsilon^2 - 8 (\overline C - 1) n}</tex> | ||
− | for all <tex>B_i \in S</tex> | + | for all <tex>B_i \in S</tex> do |
compute <tex>V'_i</tex> := VolumeQuery(<tex>B_i</tex>) | compute <tex>V'_i</tex> := VolumeQuery(<tex>B_i</tex>) | ||
od | od | ||
Строка 94: | Строка 94: | ||
Время работы алгоритма составляет | Время работы алгоритма составляет | ||
− | <tex>O(n V(d)+M S(d)+ TP(d) = O(n V(d) + T(S(d)+P(d)))</tex>, | + | <tex>O(n V(d)+M S(d)+ TP(d)) = O(n V(d) + T(S(d)+P(d)) )</tex>, |
− | где V(d), S(d) и P(d) это оценка времени работы оракулов VolumeQuery, SampleQuery и PointQuery, соответственно. | + | где <tex>V(d)</tex>, <tex>S(d)</tex> и <tex>P(d)</tex> это оценка времени работы оракулов <tt>VolumeQuery</tt>, <tt>SampleQuery</tt> и <tt>PointQuery</tt>, соответственно. |
Выберем <tex>\epsilon : \epsilon_s, \epsilon_p, \epsilon_v \leq \frac{\epsilon^2}{47n}</tex>. | Выберем <tex>\epsilon : \epsilon_s, \epsilon_p, \epsilon_v \leq \frac{\epsilon^2}{47n}</tex>. | ||
− | Если все используемые тела являются | + | Если все используемые тела являются гиперпараллелепипедами, то время работы каждого из оракулов составляет в точности <tex>O(d)</tex>, таким образом алгоритм позволяет построить <tex>\epsilon</tex>-аппроксимацию гиперобъема с вероятностью <tex>\geq 3/4</tex> за время <tex>O(\frac{nd}{\epsilon^2})</tex>. |
− | == | + | ==Источники== |
<references /> | <references /> |
Текущая версия на 19:37, 4 сентября 2022
Утверждается, что точное вычисление значения гиперобъема множества из #P-трудной задачей, однако допускает эффективную аппроксимацию, а именно может быть аппроксимировано за
точек -мерного пространства является- полином от количества параметров,
- полином от количества решений,
- полином от качества аппроксимации.
#P-трудность задачи вычисления гиперобъема
Определение: |
Задача #MON-CNF (Satisfability problem for monotone boolean formulas) — задача вычисления количества удовлетворяющих подстановок для монотонной булевой формулы, записанной в КНФ , где все дизъюнкты |
Теорема: |
Задача вычисления гиперобъема принадлежит классу #P-трудных задач |
Доказательство: |
Суть доказательства состоит в сведении задачи #MON-CNF к задаче вычисления значения гиперобъема. Так как доказано [1] , что #MON-CNF является #P-трудной, то это докажет теорему. Количество удовлетворяющих подстановок функции меньше на количество удовлетворяющих подстановок ее отрицания . Для упрощения вычислений далее будем работать с .Для каждого конъюнкта построим соответствующий ему гиперпараллелепипедгде . Рассмотрим теперь . Заметим, что так как все вершины гиперпараллелепипедов лежат в точках с целочисленными координатами 0,1 или 2, то и можно разбить на гиперкубы вида , где (то есть на гиперкубы со сторонами 1 с координатами ближайшей к началу координат вершины 0 или 1).Более того, из-за целочисленности вершин , каждый из этих гиперкубов лежит в хотя бы одном из
А значит из определения
удовлетворяет для некоторого удовлетворяет Заметим, что так как Таким образом произвели сведение, в значит задача вычисления гиперобъема принадлежит классу #P удовлетворяет |
Эффективная аппроксимация нахождения значения гиперобъема
Приведем псевдокод алгоритма для аппроксимации гиперобъема объединения тел. В алгоритме, приведенном в [2] используются три оракула: PointQuery, VolumeQuery и SampleQuery, каждый из которых ошибается с вероятностью и соответственно.
Оракул
- PointQuery(x,B) возвращает true, если точка лежит внутри .
- VolumeQuery(B) возвращает объем заданного тела .
- SampleQuery(B) для заданного тела возвращает произвольную его точку .
Для данного алгоритма допускаются следующие ослабления этих оракулов:
- PointQuery(x,B) возвращает true для всех точек из некоторого тела
- VolumeQuery(B) возвращает значение
- SampleQuery(B) возвращает произвольную точку из тела
M := 0; C := 0;for all do compute := VolumeQuery( ) od while do choose with probability x := SampleQuery( ) repeat if (C > T) then return choose random uniformly C := C + 1 until PointQuery (x, ) M := M + 1 od return
Время работы алгоритма составляет
,
где
, и это оценка времени работы оракулов VolumeQuery, SampleQuery и PointQuery, соответственно.Выберем
.Если все используемые тела являются гиперпараллелепипедами, то время работы каждого из оракулов составляет в точности
, таким образом алгоритм позволяет построить -аппроксимацию гиперобъема с вероятностью за время .Источники
- ↑ Roth D. On the hardness of approximate reasoning, Artif. Intell., 82: 273–302, 1996, http://cogcomp.cs.illinois.edu/papers/hardJ.pdf
- ↑ Bringmann K., Friedrich T. Approximating the volume of unions and intersections of high-dimensional geometric objects, ISAAC'2008, http://www.mpi-inf.mpg.de/~kbringma/paper/2008ISAAC_Volume.pdf