This is an automated email from the ASF dual-hosted git repository. leirui pushed a commit to branch research/area-visualization in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit a74bbeefdea05eda798cf803e64c4cfe118f623e Author: Lei Rui <[email protected]> AuthorDate: Fri Dec 20 00:47:31 2024 +0800 add --- .../iotdb/db/query/simpiece/Visval_standard.java | 55 +++++++++++++++++----- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/Visval_standard.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/Visval_standard.java index 98fdb790057..095a8e234f7 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/simpiece/Visval_standard.java +++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/Visval_standard.java @@ -1,13 +1,12 @@ package org.apache.iotdb.db.query.simpiece; -import java.io.BufferedReader; -import java.io.FileReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.PriorityQueue; import java.util.Random; +import java.util.stream.Collectors; // adapted from the open source C++ code https://github.com/ofZach/Visvalingam-Whyatt/blob/master/src/testApp.cpp class Triangle { @@ -146,15 +145,18 @@ public class Visval_standard { public static void main(String[] args) { Polyline polyline = new Polyline(); -// polyline.addVertex(new ofPoint(0, 0)); -// polyline.addVertex(new ofPoint(1, 0)); -// polyline.addVertex(new ofPoint(1, 1)); -// polyline.addVertex(new ofPoint(0, 1)); - + List<Polyline> polylineList = new ArrayList<>(); Random rand = new Random(); - int n = 10000; - for (int i = 0; i < n; i++) { - polyline.addVertex(new vPoint(i, rand.nextInt(1000))); + int n = 1000_000; + int p = 1000; + for (int i = 0; i < n; i += p) { + Polyline polylineBatch = new Polyline(); + for (int j = i; j < Math.min(i + p, n); j++) { + double v = rand.nextInt(1000); + polyline.addVertex(new vPoint(j, v)); + polylineBatch.addVertex(new vPoint(j, v)); + } + polylineList.add(polylineBatch); } // float[] vlist = new float[]{11346, 33839, 35469, 23108, 22812, 5519, 5526, 4865, 5842, 23089}; @@ -181,13 +183,11 @@ public class Visval_standard { // polyline.addVertex(new vPoint(i, v.get(i))); // } + System.out.println("---------------------------------"); List<vPoint> results = new ArrayList<>(); - // 计算运行时间 long startTime = System.currentTimeMillis(); - buildEffectiveArea(polyline, results); - // 输出结果 long endTime = System.currentTimeMillis(); System.out.println("Time taken to reduce points: " + (endTime - startTime) + "ms"); @@ -197,6 +197,35 @@ public class Visval_standard { // vPoint point = results.get(i); // System.out.println("Point: (" + point.x + ", " + point.y + ", " + point.z + ")"); // } + + System.out.println("---------------------------------"); + List<List<vPoint>> resultsBatchList = new ArrayList<>(); + // 计算运行时间 + int cnt = 0; + startTime = System.currentTimeMillis(); + for (Polyline polylineBatch : polylineList) { + List<vPoint> resultsBatch = new ArrayList<>(); + buildEffectiveArea(polylineBatch, resultsBatch); + cnt += resultsBatch.size(); + resultsBatchList.add(resultsBatch); + } + // 输出结果 + endTime = System.currentTimeMillis(); + System.out.println("Time taken to reduce points: " + (endTime - startTime) + "ms"); + System.out.println(cnt); + + System.out.println("---------------------------------"); + // 使用 Stream API 合并所有列表 + List<vPoint> mergedList = resultsBatchList.stream().flatMap(List::stream) + .collect(Collectors.toList()); + int sameCnt = 0; + for (int i = 0; i < mergedList.size(); i++) { + if (mergedList.get(i).z == results.get(i).z) { + sameCnt += 1; + } + } + System.out.println("sameCnt=" + sameCnt + ", percent=" + sameCnt * 1.0 / mergedList.size()); + } }
