Trả lời cập nhật và viết lại từ đầu.
Bạn đang đưa ra một polytope . Chạy hệ thống phân cấp Dobkin-Kirkpatric trên P. này mang đến cho bạn một chuỗi các polytops P 1 ⊆ P 2 ⊆ ... ⊆ P k = P . Giả sử bạn muốn tìm điểm gần nhất trên P đến điểm truy vấn q . Các cơ bản bắt đầu thuật toán bằng cách tính điểm gần nhất c 1 đến q trên P 1 , sau đó nó xem xét tất cả các khu vực mới (lều) tiếp giáp với c 1 , tìm điểm gần nhất c 2 đến qPP1⊆P2⊆…⊆Pk=PPqc1qP1c1c2qở những khu vực mới này, và tiếp tục theo cách này cho đến khi chúng ta đạt đến .Pk
Bây giờ, nếu ở trên một cạnh, thì không có vấn đề gì - chỉ có hai lều có thể chạm vào cạnh này, hoặc chỉ một trong số chúng có thể bao phủ cạnh đó. Như vậy, việc cập nhật c i + 1 từ C i trong trường hợp này mất thời gian không đổi.cici+1Ci
Vì vậy, vấn đề là khi nằm trên một đỉnh có độ cao, bởi vì sau đó số lều mới liền kề với nó khi di chuyển đến P i + 1 có thể lớn. Để khắc phục điều này, chúng ta sẽ mô phỏng một đỉnh độ lớn như một tập hợp các đỉnh có độ thấp. Đặc biệt, ở mỗi giai đoạn, nếu c i nằm trên một đỉnh v , chúng ta sẽ nhớ hai cạnh liên tiếp e i , e ′ i liền kề với v , sao cho điểm gần nhất với q trong P i + 1ciPi+1civei,e′ivqPi+1nằm trên một cái lều liền kề hoặc che một trong hai cạnh này. Như vậy, chúng ta có thể thực hiện tính toán cần thiết trong thời gian không đổi.
Vì vậy, chúng tôi vẫn còn vấn đề làm thế nào để theo dõi hai cạnh này khi chúng tôi leo lên.
Để làm điều đó, tính toán trước cho mỗi đỉnh của P một hướng tiếp tuyến t v . Đặt Q i ( v ) là đa giác lồi là hình đỉnh của v cho đa giác P i (với mặt phẳng xác định hình đỉnh có bình thường theo hướng của t v ). Về mặt khái niệm, Q 1 ( v ) , Q 2 ( v ) , . . . , Q k ( v )vPtvQi(v)vPitvQ1(v),Q2(v),...,Qk(v)hành xử như một hệ thống phân cấp 2d DK. Nếu điểm gần nhất trên đến q nằm trên một đỉnh w thì điểm này tương ứng với v và cạnh e ở P i , trong đó cạnh e cắt mặt phẳng của hình đỉnh tại w . Nếu điểm gần nhất trên Q i ( v ) để q dối trá trên một cạnh e ' , sau đó bạn nhớ hai cạnh kề của P i xác định hai đỉnh của e ' (ở đâyQi(v)qwvePiewQi(v)qe′Pie′ thuộc về Q i ( v ) ).e′Qi(v)
Và bây giờ chúng ta đã hoàn thành ... Thật vậy, nếu cũng nằm trên Q i + 1 ( v ) thì chúng ta có thể cập nhật nó trong thời gian không đổi (vì đây chỉ là hệ thống phân cấp 2d DK). Nếu mặt khác c i + 1 không còn trên Q i + 1 ( v ) thì nó phải thuộc về một cái lều mới liền kề hoặc bao phủ điểm trước c i . Trong cả hai trường hợp, chúng tôi có thể cập nhật nó trong thời gian liên tục.ci+1Qi+1(v)ci+1Qi+1(v)ci