0
使用計數器來暫停執行以顯示單獨的處理步驟,是否可行地通過douglas peucker行簡化算法? 我不確定是否有可能。如果是的話,建議使用特定的數據結構 來做到這一點。我只看到遞歸的解決方案,我不確定這是否可行?使用計數器的Douglas Peucker算法
使用計數器來暫停執行以顯示單獨的處理步驟,是否可行地通過douglas peucker行簡化算法? 我不確定是否有可能。如果是的話,建議使用特定的數據結構 來做到這一點。我只看到遞歸的解決方案,我不確定這是否可行?使用計數器的Douglas Peucker算法
是的,這當然是可以的。如果您最感興趣的是查看算法完成後採取的步驟,那麼最簡單的方法就是在算法的每個步驟中保留點列表的副本。算法完成後,您可以打印出中間步驟列表。
例如,如果你在一個列表存儲點,那麼你可以在列表在每次迭代複製:
class DouglasPeucker {
private List<Point[]> steps = new ArrayList<>();
public Point[] compute(Point[] points) {
steps.add(points.clone());
// perform normal recursive steps
}
public void printSteps() {
for (Point[] points: steps) {
...
}
}
}
注意,這是數組的一個淺表副本 - 即點對象不克隆。如果點對象是不可變的(這可能應該是這樣),這將工作正常。
或者,如果您想停止每個點並檢查變量的狀態,則應在適當的位置使用帶有斷點的交互式調試器。
謝謝短跑運動員。它很高興知道這是可能的。在某些時候,我一直試圖保留一份輸出結果,我想我需要確保我在代碼中的正確位置上覆印。我的實現在返回的點被合併之前有兩個遞歸調用。我認爲我的問題是在遞歸調用之後,即在結果行數據合併後,我試圖獲取點數據的副本。遞歸之前的副本是否要調用方法 – daveb