我必须按顺序(从文件)读取一些数据并将数据放入矩阵中。我最初不知道矩阵的等级。例如,考虑将数据绘制在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轴上的位置!
有什么建议吗?
答案 0 :(得分:2)
我非常喜欢稀疏矩阵解决方案,但您可以使用http://en.wikipedia.org/wiki/Dynamic_array版本。动态数组是在它们变得太满时调整大小的数组。调整大小是很昂贵的,但是如果每次调整大小时调整大小的成本会增加大小,那么如果最终大小有n个元素,则总成本仍为O(n)。
要为此使用动态数组,您可以为每一行创建两个动态数组,其中一个比目前为止看到的数量增长了一个,并且一个数量比目前看到的数量小得多(因此随着年份的数量逐渐减少)数组)。
另一种方法是为矩阵创建单个存储区域,仅使用中心部分,因此始终可以在任何方向上添加条目。然后,您必须检查当您将要越过边缘时,通过常数因子增加此存储的大小将导致总成本最多为O(n)。我怀疑它会,但常数因素可能不是很好。
答案 1 :(得分:1)
您可以使用SortedList<int, SortedList<int, int>>