이 코드를 Parallel.ForEach 및 ConcurrentBag를 사용하여 더 빠르게 수행하려고했지만 여전히 길게 실행 중입니다 (특히 내 시나리오에서 1.000.000 ++ 일 수 있음).) :목록의 항목을 수정하십시오 <T> 빨리
List<Point> points = new List<Point>();
for(int i = 0; i<100000;i++) {
Point point = new Point {X = i-50000, Y = i+50000, CanDelete = false};
points.Add(point);
}
foreach (Point point in points) {
foreach (Point innerPoint in points) {
if (innerPoint.CanDelete == false && (point.X - innerPoint.X) < 2) {
innerPoint.Y = point.Y;
point.CanDelete = true;
}
}
}
달성하려는 내용을 기술하십시오. O (N^2)는 'N> = 20000'일 때 너무 깁니다. –
컬렉션에있는 항목이 100 만 개가 넘는 경우 중첩 루프보다 더 나은 검색 알고리즘을 살펴 보는 것이 좋습니다. 병렬화 여부에 상관없이 몇 가지 코어에 퍼뜨릴 지 여부는 계속됩니다. 10^12 반복이 될 것입니다. 많은 점이 있습니다 (예를 들어 얼마나 오랫동안 포인트가 삭제 되더라도 포인트가 서로 충분히 가깝기 만하면 삭제됩니다). –
각 _X_에 최대 _Y_가있는 _points_의 모든 점을 가져와야하고 _X_은 x1-x2 <허용차와 구별 할 수 있어야합니다. 내 가치는 데모 데이터에 불과합니다. 실제 값은 다르지만 목록 크기는 비슷합니다. –