我必须按顺序读取一些数据(从一个文件),并将数据放入一个矩阵中。一开始我不知道矩阵的等级。例如,假设数据绘制在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 ).As中的另一个增量年时,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轴中的位置!
有什么建议吗?
发布于 2014-01-12 12:00:48
您可以使用SortedList<int, SortedList<int, int>>将其构建为稀疏矩阵。
发布于 2014-01-12 12:21:38
我非常喜欢稀疏矩阵解决方案,但是您可以使用array的一个版本。动态数组是当数组太满时调整大小的数组。调整大小是很昂贵的,但是如果每次调整大小时将大小增加一个常数,那么调整大小的成本就会计算出来,如果最终大小有n个元素,那么总成本仍然是O(n)。
要使用动态数组,您可以为每一行创建两个动态数组,一个增长的年份比到目前为止看到的多年,另一个增长的年份比到目前为止看到的年数要小(按数组的年数递减)。
另一种方法是为矩阵创建一个存储区域,只使用中央部分,所以总是有空间向任何方向添加条目。然后,您必须检查,当您要在边缘上运行时,将这个存储的大小增加一个恒定的因子,这将导致总成本最多为O(n)。我怀疑会这样,但不变的因素可能不是很好。
https://stackoverflow.com/questions/21074297
复制相似问题