在xy平面中动态构建矩阵

时间:2014-01-12 11:53:41

标签: c# algorithm c++11 matrix

我必须按顺序(从文件)读取一些数据并将数据放入矩阵中。我最初不知道矩阵的等级。例如,考虑将数据绘制在x,y平面上,在Y轴上有多年,在x轴上有增量。起初,数据在1990年以3个增量进入

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

请注意,我只会在读取数据线后知道增量。接下来是1989年的4个增量。所以它应该是

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

请注意,当新数据来自另一个增量年份时,在y轴(1990)中。由于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轴上的位置!

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我非常喜欢稀疏矩阵解决方案,但您可以使用http://en.wikipedia.org/wiki/Dynamic_array版本。动态数组是在它们变得太满时调整大小的数组。调整大小是很昂贵的,但是如果每次调整大小时调整大小的成本会增加大小,那么如果最终大小有n个元素,则总成本仍为O(n)。

要为此使用动态数组,您可以为每一行创建两个动态数组,其中一个比目前为止看到的数量增长了一个,并且一个数量比目前看到的数量小得多(因此随着年份的数量逐渐减少)数组)。

另一种方法是为矩阵创建单个存储区域,仅使用中心部分,因此始终可以在任何方向上添加条目。然后,您必须检查当您将要越过边缘时,通过常数因子增加此存储的大小将导致总成本最多为O(n)。我怀疑它会,但常数因素可能不是很好。

答案 1 :(得分:1)

您可以使用SortedList<int, SortedList<int, int>>

将其构建为稀疏矩阵