0부터 n까지 세 개의 중첩 루프가 있습니다. n은 12000 번째 쯤되는 큰 수입니다. 2DList에서 작동하는이 세 개의 루프. 실제로 Floyd 알고리즘입니다. 이러한 대용량 데이터는 시간이 오래 걸립니다. 어떻게 향상시킬 지 조언 해 주시겠습니까?C에서 큰 데이터에 대한 루프 속도 향상 #
List<List<int>> distance = new List<List<int>>();
...
for (int i = 0; i < n; i++)
for (int v = 0; v < n; v++)
for (int w = 0; w < n; w++)
{
if (distance[v][i] != int.MaxValue &&
distance[i][w] != int.MaxValue)
{
int d = distance[v][i] + distance[i][w];
if (distance[v][w] > d)
distance[v][w] = d;
}
}
목록 대신 배열을 사용해 볼 수 있습니다. 배열은 조금 더 빠른 경향이 있습니다. – Janman
상당히 빨라지면 컴퓨터 과학에 중요한 기여를했을 것입니다 (이는 현재 최첨단 알고리즘 중 하나임). 그러나 그래프와 문제에 따라 [대안] (http://en.wikipedia.org/wiki/Shortest_path)이 있습니다. – Dukeling
[QuickGraph] (http://quickgraph.codeplex.com/)와 같은 그래프 라이브러리를 살펴볼 수 있습니다. 그 알고리즘의 최악의 경우가 O (| n |^3) 인 것 같아서 성능이 기대됩니다. – Romoku