2014-01-12 2 views
0

파일로부터 순차적으로 데이터를 읽고 매트릭스에 데이터를 넣어야합니다. 처음에는 행렬의 순위를 모른다. 예를 들어 데이터가 Y 축에 연도가 있고 X 축에 증분이있는 x, y 평면에 그려 졌다고 가정합니다. 처음에는 데이터가 3 씩 증가하여 1990 년에 들어 왔습니다.xy 평면에서 동적으로 행렬 작성하기

year increment(1991) increment(1992) increment(1993) 
1990 12   25  35 

데이터 행을 읽은 후에 만 ​​증분에 대해 알 수 있습니다. 다음은 1989 년에 4 단위로 증가했습니다. 그래서 새로운 데이터가 다른 증가 해 왔을 때 y 축 (1990)에 온 것을

year increment(1990) increment(1991) increment(1992) increment(1993) 
1989 23    33     43   53 
1990 0    12     25   35 

참고해야 .as 인이 0 또는 가득해야합니다 1990 년에 1990 년에는 증가 해가 없다 그것을 비워 두지 만,

결국 나는 매트릭스를 만들어야 만한다. 행렬을 구축하기 위해 예를

year increment(1990) increment(1991) increment(1992) increment(1993) 
1989 23    33     43   53 
1990 0    12     25   35 
1991 0    0      23   33 

를 들어, 어려운 부분은 난 단지 전체 데이터를 읽고 알게 될 것이다, 내가 처음 년/단위를 모르는 것입니다. 데이터를 읽는 동안 행렬을 플롯하여 하나 이상의 데이터 통과를 피할 수 있습니다.

xy 축에서 행렬 배치는 전체 데이터가 처리 된 후에 만 ​​알 수 있습니다!

제안 사항?

답변

1

당신은 SortedList<int, SortedList<int, int>>

+0

spot on! 고맙습니다. – Jimmy

2

나는 꽤 스파 스 매트릭스 솔루션 등으로 스파 스 매트릭스를 구축 할 수 있습니다,하지만 당신은 http://en.wikipedia.org/wiki/Dynamic_array의 버전을 사용할 수 있습니다. 동적 배열은 너무 꽉 차있을 때 크기를 조정하는 배열입니다. 크기 조정은 비싸지 만, 크기를 조정할 때마다 크기를 늘리면 크기 조정의 비용이 줄어들 기 때문에 최종 크기에 n 개의 요소가 있으면 총 비용은 여전히 ​​O (n)입니다.

동적 배열을 사용하려면 각 행에 대해 두 개의 동적 배열을 만들 수 있습니다. 하나는 지금까지 표시된 것보다 더 커지며 하나는 지금까지 표시된 것보다 작게 성장합니다. 배열을 따라).

이 작업을 수행하는 다른 방법은 중앙 섹션 만 사용하여 매트릭스에 대한 저장소의 단일 영역을 만드는 것이므로 모든 방향으로 항목을 추가 할 공간이 항상 있습니다. 그런 다음 가장자리를 뛰어 넘을 때 일정한 요인으로이 스토리지의 크기를 늘리면 총 비용이 최대 O (n)로 증가하는지 확인해야합니다. 나는 그럴 것이라고 생각하지만, 일정한 요소는 그리 좋지 않을 수도 있습니다.

관련 문제