Near-linear time approximation schemes for geometric maximum coverage

Published: 2018, Last Modified: 06 Feb 2025Theor. Comput. Sci. 2018EveryoneRevisionsBibTeXCC BY-SA 4.0
Abstract: We study approximation algorithms for the following geometric version of the maximum coverage problem: Let P<math><mi mathvariant="script" is="true">P</mi></math> be a set of n weighted points in the plane. Let D represent a planar object, such as a rectangle, or a disk. We want to place m copies of D such that the sum of the weights of the points in P<math><mi mathvariant="script" is="true">P</mi></math> covered by these copies is maximized. For any fixed ε>0<math><mi is="true">ε</mi><mo is="true">&gt;</mo><mn is="true">0</mn></math>, we present efficient approximation schemes that can find a (1−ε)<math><mo stretchy="false" is="true">(</mo><mn is="true">1</mn><mo is="true">−</mo><mi is="true">ε</mi><mo stretchy="false" is="true">)</mo></math>-approximation to the optimal solution. In particular, for m=1<math><mi is="true">m</mi><mo is="true">=</mo><mn is="true">1</mn></math> and for the special case where D is a rectangle, our algorithm runs in time O(nlog⁡(1ε))<math><mi is="true">O</mi><mo stretchy="false" is="true">(</mo><mi is="true">n</mi><mi mathvariant="normal" is="true">log</mi><mo is="true">⁡</mo><mo stretchy="false" is="true">(</mo><mfrac is="true"><mrow is="true"><mn is="true">1</mn></mrow><mrow is="true"><mi is="true">ε</mi></mrow></mfrac><mo stretchy="false" is="true">)</mo><mo stretchy="false" is="true">)</mo></math>, improving on the previous result. For m>1<math><mi is="true">m</mi><mo is="true">&gt;</mo><mn is="true">1</mn></math> and the rectangular case, our algorithm runs in O(nεlog⁡(1ε)+mεlog⁡m+m(1ε)O(min⁡(m,1ε)))<math><mi is="true">O</mi><mo stretchy="false" is="true">(</mo><mfrac is="true"><mrow is="true"><mi is="true">n</mi></mrow><mrow is="true"><mi is="true">ε</mi></mrow></mfrac><mi mathvariant="normal" is="true">log</mi><mo is="true">⁡</mo><mo stretchy="false" is="true">(</mo><mfrac is="true"><mrow is="true"><mn is="true">1</mn></mrow><mrow is="true"><mi is="true">ε</mi></mrow></mfrac><mo stretchy="false" is="true">)</mo><mo is="true">+</mo><mfrac is="true"><mrow is="true"><mi is="true">m</mi></mrow><mrow is="true"><mi is="true">ε</mi></mrow></mfrac><mi mathvariant="normal" is="true">log</mi><mo is="true">⁡</mo><mi is="true">m</mi><mo is="true">+</mo><mi is="true">m</mi><msup is="true"><mrow is="true"><mo stretchy="false" is="true">(</mo><mfrac is="true"><mrow is="true"><mn is="true">1</mn></mrow><mrow is="true"><mi is="true">ε</mi></mrow></mfrac><mo stretchy="false" is="true">)</mo></mrow><mrow is="true"><mi is="true">O</mi><mo stretchy="false" is="true">(</mo><mi mathvariant="normal" is="true">min</mi><mo is="true">⁡</mo><mo stretchy="false" is="true">(</mo><msqrt is="true"><mrow is="true"><mi is="true">m</mi></mrow></msqrt><mo is="true">,</mo><mfrac is="true"><mrow is="true"><mn is="true">1</mn></mrow><mrow is="true"><mi is="true">ε</mi></mrow></mfrac><mo stretchy="false" is="true">)</mo><mo stretchy="false" is="true">)</mo></mrow></msup><mo stretchy="false" is="true">)</mo></math> time. For a more general class of shapes (including disks, polygons with O(1)<math><mi is="true">O</mi><mo stretchy="false" is="true">(</mo><mn is="true">1</mn><mo stretchy="false" is="true">)</mo></math> edges), our algorithm runs in O(n(1ε)O(1)+mϵlog⁡m+m(1ε)O(min⁡(m,1ε2)))<math><mi is="true">O</mi><mo stretchy="false" is="true">(</mo><mi is="true">n</mi><msup is="true"><mrow is="true"><mo stretchy="false" is="true">(</mo><mfrac is="true"><mrow is="true"><mn is="true">1</mn></mrow><mrow is="true"><mi is="true">ε</mi></mrow></mfrac><mo stretchy="false" is="true">)</mo></mrow><mrow is="true"><mi is="true">O</mi><mo stretchy="false" is="true">(</mo><mn is="true">1</mn><mo stretchy="false" is="true">)</mo></mrow></msup><mo is="true">+</mo><mfrac is="true"><mrow is="true"><mi is="true">m</mi></mrow><mrow is="true"><mi is="true">ϵ</mi></mrow></mfrac><mi mathvariant="normal" is="true">log</mi><mo is="true">⁡</mo><mi is="true">m</mi><mo is="true">+</mo><mi is="true">m</mi><msup is="true"><mrow is="true"><mo stretchy="false" is="true">(</mo><mfrac is="true"><mrow is="true"><mn is="true">1</mn></mrow><mrow is="true"><mi is="true">ε</mi></mrow></mfrac><mo stretchy="false" is="true">)</mo></mrow><mrow is="true"><mi is="true">O</mi><mo stretchy="false" is="true">(</mo><mi mathvariant="normal" is="true">min</mi><mo is="true">⁡</mo><mo stretchy="false" is="true">(</mo><mi is="true">m</mi><mo is="true">,</mo><mfrac is="true"><mrow is="true"><mn is="true">1</mn></mrow><mrow is="true"><msup is="true"><mrow is="true"><mi is="true">ε</mi></mrow><mrow is="true"><mn is="true">2</mn></mrow></msup></mrow></mfrac><mo stretchy="false" is="true">)</mo><mo stretchy="false" is="true">)</mo></mrow></msup><mo stretchy="false" is="true">)</mo></math> time.
Loading