<p>In this paper we study several proximity problems related to a set of pairwise-disjoint segments in <InlineEquation ID="IEq1"> <EquationSource Format="TEX">\({\mathbb {R}}^2\)</EquationSource> <EquationSource Format="MATHML"><math> <msup> <mrow> <mi mathvariant="double-struck">R</mi> </mrow> <mn>2</mn> </msup> </math></EquationSource> </InlineEquation>. Let <i>S</i> be a set of <i>n</i> pairwise-disjoint segments in <InlineEquation ID="IEq2"> <EquationSource Format="TEX">\({\mathbb {R}}^2\)</EquationSource> <EquationSource Format="MATHML"><math> <msup> <mrow> <mi mathvariant="double-struck">R</mi> </mrow> <mn>2</mn> </msup> </math></EquationSource> </InlineEquation>, and let <InlineEquation ID="IEq3"> <EquationSource Format="TEX">\(r&gt;0\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>r</mi> <mo>&gt;</mo> <mn>0</mn> </mrow> </math></EquationSource> </InlineEquation> be a parameter. We define the <i>segment r-proximity graph</i> of <i>S</i> to be <InlineEquation ID="IEq4"> <EquationSource Format="TEX">\(G_r(S):= (S,E)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <msub> <mi>G</mi> <mi>r</mi> </msub> <mrow> <mo stretchy="false">(</mo> <mi>S</mi> <mo stretchy="false">)</mo> </mrow> <mo>:</mo> <mo>=</mo> <mrow> <mo stretchy="false">(</mo> <mi>S</mi> <mo>,</mo> <mi>E</mi> <mo stretchy="false">)</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation>, where <InlineEquation ID="IEq5"> <EquationSource Format="TEX">\(E = \{ (e_1,e_2) \mid \textrm{dist}(e_1,e_2) \le r\}\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>E</mi> <mo>=</mo> <mo stretchy="false">{</mo> <mrow> <mo stretchy="false">(</mo> <msub> <mi>e</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>e</mi> <mn>2</mn> </msub> <mo stretchy="false">)</mo> </mrow> <mo>∣</mo> <mtext>dist</mtext> <mrow> <mo stretchy="false">(</mo> <msub> <mi>e</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>e</mi> <mn>2</mn> </msub> <mo stretchy="false">)</mo> </mrow> <mo>≤</mo> <mi>r</mi> <mo stretchy="false">}</mo> </mrow> </math></EquationSource> </InlineEquation> and <InlineEquation ID="IEq6"> <EquationSource Format="TEX">\(\textrm{dist}(e_1,e_2) = \min _{(p,q)\in e_1\times e_2} \Vert p-q\Vert \)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mtext>dist</mtext> <mrow> <mo stretchy="false">(</mo> <msub> <mi>e</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>e</mi> <mn>2</mn> </msub> <mo stretchy="false">)</mo> </mrow> <mo>=</mo> <msub> <mo movablelimits="true">min</mo> <mrow> <mrow> <mo stretchy="false">(</mo> <mi>p</mi> <mo>,</mo> <mi>q</mi> <mo stretchy="false">)</mo> </mrow> <mo>∈</mo> <msub> <mi>e</mi> <mn>1</mn> </msub> <mo>×</mo> <msub> <mi>e</mi> <mn>2</mn> </msub> </mrow> </msub> <mrow> <mo stretchy="false">‖</mo> <mi>p</mi> <mo>-</mo> <mi>q</mi> <mo stretchy="false">‖</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation> is the Euclidean distance between <InlineEquation ID="IEq7"> <EquationSource Format="TEX">\(e_1\)</EquationSource> <EquationSource Format="MATHML"><math> <msub> <mi>e</mi> <mn>1</mn> </msub> </math></EquationSource> </InlineEquation> and <InlineEquation ID="IEq8"> <EquationSource Format="TEX">\(e_2\)</EquationSource> <EquationSource Format="MATHML"><math> <msub> <mi>e</mi> <mn>2</mn> </msub> </math></EquationSource> </InlineEquation>. We define the weight of an edge <InlineEquation ID="IEq9"> <EquationSource Format="TEX">\((e_1,e_2) \in E\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mo stretchy="false">(</mo> <msub> <mi>e</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>e</mi> <mn>2</mn> </msub> <mo stretchy="false">)</mo> <mo>∈</mo> <mi>E</mi> </mrow> </math></EquationSource> </InlineEquation> to be <InlineEquation ID="IEq10"> <EquationSource Format="TEX">\(\textrm{dist}(e_1,e_2)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mtext>dist</mtext> <mo stretchy="false">(</mo> <msub> <mi>e</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>e</mi> <mn>2</mn> </msub> <mo stretchy="false">)</mo> </mrow> </math></EquationSource> </InlineEquation>. We first present a simple grid-based <InlineEquation ID="IEq11"> <EquationSource Format="TEX">\(O(n\log ^2 n)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <msup> <mo>log</mo> <mn>2</mn> </msup> <mi>n</mi> <mo stretchy="false">)</mo> </mrow> </math></EquationSource> </InlineEquation>-time algorithm for computing a BFS tree of <InlineEquation ID="IEq12"> <EquationSource Format="TEX">\(G_r(S)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <msub> <mi>G</mi> <mi>r</mi> </msub> <mrow> <mo stretchy="false">(</mo> <mi>S</mi> <mo stretchy="false">)</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation>. We apply it to obtain an <InlineEquation ID="IEq13"> <EquationSource Format="TEX">\(O^*(n^{8/7}) + O(n\log ^2n\log \Delta )\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <msup> <mi>O</mi> <mo>∗</mo> </msup> <mrow> <mo stretchy="false">(</mo> <msup> <mi>n</mi> <mrow> <mn>8</mn> <mo stretchy="false">/</mo> <mn>7</mn> </mrow> </msup> <mo stretchy="false">)</mo> </mrow> <mo>+</mo> <mi>O</mi> <mrow> <mo stretchy="false">(</mo> <mi>n</mi> <msup> <mo>log</mo> <mn>2</mn> </msup> <mi>n</mi> <mo>log</mo> <mi mathvariant="normal">Δ</mi> <mo stretchy="false">)</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation>-time algorithm for the so-called <i>reverse shortest path problem</i>, in which given two segments <InlineEquation ID="IEq14"> <EquationSource Format="TEX">\(s, t \in S\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>s</mi> <mo>,</mo> <mi>t</mi> <mo>∈</mo> <mi>S</mi> </mrow> </math></EquationSource> </InlineEquation> and an integer <InlineEquation ID="IEq15"> <EquationSource Format="TEX">\(k&gt;0\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>k</mi> <mo>&gt;</mo> <mn>0</mn> </mrow> </math></EquationSource> </InlineEquation>, we wish to compute the smallest value <InlineEquation ID="IEq16"> <EquationSource Format="TEX">\(r^*\)</EquationSource> <EquationSource Format="MATHML"><math> <msup> <mi>r</mi> <mo>∗</mo> </msup> </math></EquationSource> </InlineEquation> for which <InlineEquation ID="IEq17"> <EquationSource Format="TEX">\(G_{r^*}(S)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <msub> <mi>G</mi> <msup> <mi>r</mi> <mo>∗</mo> </msup> </msub> <mrow> <mo stretchy="false">(</mo> <mi>S</mi> <mo stretchy="false">)</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation> contains a path from <i>s</i> to <i>t</i> composed of at most <i>k</i> edges. (Here the <InlineEquation ID="IEq18"> <EquationSource Format="TEX">\(O^*(\cdot )\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <msup> <mi>O</mi> <mo>∗</mo> </msup> <mrow> <mo stretchy="false">(</mo> <mo>·</mo> <mo stretchy="false">)</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation> notation hides polylogarithmic factors.) Here <InlineEquation ID="IEq19"> <EquationSource Format="TEX">\(\Delta = \max _{e\ne e' \in S} \textrm{dist}(e,e')/\min _{e\ne e' \in S} \textrm{dist}(e,e')\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi mathvariant="normal">Δ</mi> <mo>=</mo> <msub> <mo movablelimits="true">max</mo> <mrow> <mi>e</mi> <mo>≠</mo> <msup> <mi>e</mi> <mo>′</mo> </msup> <mo>∈</mo> <mi>S</mi> </mrow> </msub> <mtext>dist</mtext> <mrow> <mo stretchy="false">(</mo> <mi>e</mi> <mo>,</mo> <msup> <mi>e</mi> <mo>′</mo> </msup> <mo stretchy="false">)</mo> </mrow> <mo stretchy="false">/</mo> <msub> <mo movablelimits="true">min</mo> <mrow> <mi>e</mi> <mo>≠</mo> <msup> <mi>e</mi> <mo>′</mo> </msup> <mo>∈</mo> <mi>S</mi> </mrow> </msub> <mtext>dist</mtext> <mrow> <mo stretchy="false">(</mo> <mi>e</mi> <mo>,</mo> <msup> <mi>e</mi> <mo>′</mo> </msup> <mo stretchy="false">)</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation> is what we call the <i>spread</i> of <i>S</i>. Next, we present a dynamic data structure that can maintain a set <i>S</i> of pairwise-disjoint segments in the plane under insertions/deletions so that the segment of <i>S</i> closest to a query segment <i>e</i>, chosen from an unknown set <i>Q</i> of pairwise-disjoint segments, can be computed in <InlineEquation ID="IEq20"> <EquationSource Format="TEX">\(O(\log ^5 n)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>O</mi> <mo stretchy="false">(</mo> <msup> <mo>log</mo> <mn>5</mn> </msup> <mi>n</mi> <mo stretchy="false">)</mo> </mrow> </math></EquationSource> </InlineEquation> amortized time. The amortized update time is also <InlineEquation ID="IEq21"> <EquationSource Format="TEX">\(O(\log ^5 n)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>O</mi> <mo stretchy="false">(</mo> <msup> <mo>log</mo> <mn>5</mn> </msup> <mi>n</mi> <mo stretchy="false">)</mo> </mrow> </math></EquationSource> </InlineEquation>. We note that if the segments in <InlineEquation ID="IEq22"> <EquationSource Format="TEX">\(S\cup Q\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>S</mi> <mo>∪</mo> <mi>Q</mi> </mrow> </math></EquationSource> </InlineEquation> are allowed to intersect then the known lower bounds on halfplane range searching suggest that a sequence of <i>n</i> updates and queries may take at least close to <InlineEquation ID="IEq23"> <EquationSource Format="TEX">\(\Omega (n^{4/3})\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi mathvariant="normal">Ω</mi> <mo stretchy="false">(</mo> <msup> <mi>n</mi> <mrow> <mn>4</mn> <mo stretchy="false">/</mo> <mn>3</mn> </mrow> </msup> <mo stretchy="false">)</mo> </mrow> </math></EquationSource> </InlineEquation> time in the worst case. One thus has to strongly rely on the non-intersecting property of <i>S</i> and <i>Q</i> to perform updates and queries in <InlineEquation ID="IEq24"> <EquationSource Format="TEX">\(O(\textrm{polylog}(n))\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>O</mi> <mo stretchy="false">(</mo> <mtext>polylog</mtext> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> <mo stretchy="false">)</mo> </mrow> </math></EquationSource> </InlineEquation> (amortized) time each. Using these results on nearest-neighbor (NN) searching for disjoint segments, we show that a DFS tree (or forest) of <InlineEquation ID="IEq25"> <EquationSource Format="TEX">\(G_r(S)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <msub> <mi>G</mi> <mi>r</mi> </msub> <mrow> <mo stretchy="false">(</mo> <mi>S</mi> <mo stretchy="false">)</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation> can be computed in <InlineEquation ID="IEq26"> <EquationSource Format="TEX">\(O(n\log ^4n)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <msup> <mo>log</mo> <mn>4</mn> </msup> <mi>n</mi> <mo stretchy="false">)</mo> </mrow> </math></EquationSource> </InlineEquation> time. We also obtain an <InlineEquation ID="IEq27"> <EquationSource Format="TEX">\(O(n\log ^3n)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <msup> <mo>log</mo> <mn>3</mn> </msup> <mi>n</mi> <mo stretchy="false">)</mo> </mrow> </math></EquationSource> </InlineEquation>-time algorithm for constructing a minimum spanning tree of <InlineEquation ID="IEq28"> <EquationSource Format="TEX">\(G_r(S)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <msub> <mi>G</mi> <mi>r</mi> </msub> <mrow> <mo stretchy="false">(</mo> <mi>S</mi> <mo stretchy="false">)</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation>. Finally, we present an <InlineEquation ID="IEq29"> <EquationSource Format="TEX">\(O^*(n^{4/3})\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <msup> <mi>O</mi> <mo>∗</mo> </msup> <mrow> <mo stretchy="false">(</mo> <msup> <mi>n</mi> <mrow> <mn>4</mn> <mo stretchy="false">/</mo> <mn>3</mn> </mrow> </msup> <mo stretchy="false">)</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation>-time algorithm for computing a single-source shortest-path tree in <InlineEquation ID="IEq30"> <EquationSource Format="TEX">\(G_r(S)\)</EquationSource> <EquationSource Format="MATHML"><math> <mrow> <msub> <mi>G</mi> <mi>r</mi> </msub> <mrow> <mo stretchy="false">(</mo> <mi>S</mi> <mo stretchy="false">)</mo> </mrow> </mrow> </math></EquationSource> </InlineEquation>. This is the only result where we could not achieve a near-linear performance.</p>

错误:搜索内容不能为空,请输入英文关键词
错误:关键词超出字数限制,请精简
高级检索

Segment Proximity Graphs and Nearest Neighbor Queries amid Disjoint Segments

  • Pankaj K. Agarwal,
  • Haim Kaplan,
  • Matthew J. Katz,
  • Micha Sharir

摘要

In this paper we study several proximity problems related to a set of pairwise-disjoint segments in \({\mathbb {R}}^2\) R 2 . Let S be a set of n pairwise-disjoint segments in \({\mathbb {R}}^2\) R 2 , and let \(r>0\) r > 0 be a parameter. We define the segment r-proximity graph of S to be \(G_r(S):= (S,E)\) G r ( S ) : = ( S , E ) , where \(E = \{ (e_1,e_2) \mid \textrm{dist}(e_1,e_2) \le r\}\) E = { ( e 1 , e 2 ) dist ( e 1 , e 2 ) r } and \(\textrm{dist}(e_1,e_2) = \min _{(p,q)\in e_1\times e_2} \Vert p-q\Vert \) dist ( e 1 , e 2 ) = min ( p , q ) e 1 × e 2 p - q is the Euclidean distance between \(e_1\) e 1 and \(e_2\) e 2 . We define the weight of an edge \((e_1,e_2) \in E\) ( e 1 , e 2 ) E to be \(\textrm{dist}(e_1,e_2)\) dist ( e 1 , e 2 ) . We first present a simple grid-based \(O(n\log ^2 n)\) O ( n log 2 n ) -time algorithm for computing a BFS tree of \(G_r(S)\) G r ( S ) . We apply it to obtain an \(O^*(n^{8/7}) + O(n\log ^2n\log \Delta )\) O ( n 8 / 7 ) + O ( n log 2 n log Δ ) -time algorithm for the so-called reverse shortest path problem, in which given two segments \(s, t \in S\) s , t S and an integer \(k>0\) k > 0 , we wish to compute the smallest value \(r^*\) r for which \(G_{r^*}(S)\) G r ( S ) contains a path from s to t composed of at most k edges. (Here the \(O^*(\cdot )\) O ( · ) notation hides polylogarithmic factors.) Here \(\Delta = \max _{e\ne e' \in S} \textrm{dist}(e,e')/\min _{e\ne e' \in S} \textrm{dist}(e,e')\) Δ = max e e S dist ( e , e ) / min e e S dist ( e , e ) is what we call the spread of S. Next, we present a dynamic data structure that can maintain a set S of pairwise-disjoint segments in the plane under insertions/deletions so that the segment of S closest to a query segment e, chosen from an unknown set Q of pairwise-disjoint segments, can be computed in \(O(\log ^5 n)\) O ( log 5 n ) amortized time. The amortized update time is also \(O(\log ^5 n)\) O ( log 5 n ) . We note that if the segments in \(S\cup Q\) S Q are allowed to intersect then the known lower bounds on halfplane range searching suggest that a sequence of n updates and queries may take at least close to \(\Omega (n^{4/3})\) Ω ( n 4 / 3 ) time in the worst case. One thus has to strongly rely on the non-intersecting property of S and Q to perform updates and queries in \(O(\textrm{polylog}(n))\) O ( polylog ( n ) ) (amortized) time each. Using these results on nearest-neighbor (NN) searching for disjoint segments, we show that a DFS tree (or forest) of \(G_r(S)\) G r ( S ) can be computed in \(O(n\log ^4n)\) O ( n log 4 n ) time. We also obtain an \(O(n\log ^3n)\) O ( n log 3 n ) -time algorithm for constructing a minimum spanning tree of \(G_r(S)\) G r ( S ) . Finally, we present an \(O^*(n^{4/3})\) O ( n 4 / 3 ) -time algorithm for computing a single-source shortest-path tree in \(G_r(S)\) G r ( S ) . This is the only result where we could not achieve a near-linear performance.