【发布时间】:2016-05-11 18:13:29
【问题描述】:
我正在考虑以下问题。
我可以有一个字符串数组,比如
Col1 Col2 Col3 Col4
aa aa aa aa
aaa aaa aaaaa aaa
aaaa aaaaaaa aa a
...........................
其实是CSV文件。我应该找到一种方法将其垂直划分为一个或多个文件。拆分的条件是没有一个文件包含超过某些字节的行。为简单起见,我们可以用长度重写该数组:
Col1 Col2 Col3 Col4
2 2 2 2
3 3 5 3
4 7 2 1
...........................
假设限制是10,即如果> 9 我们应该拆分。因此,如果我们将[Col1, Col2, Col3] 和[Col4] 拆分为两个文件,这将不满足条件,因为第一个文件将在第二行包含3 + 3 + 5 > 9,在第三行包含4 + 7 + 2 > 9。如果我们拆分为[Col1, Col2] 和[Col3, Col4],这将不满足条件,因为第一个文件将在第三行包含4 + 7 > 9。因此,我们将其拆分为 3 个文件,例如 [Col1]、[Col2, Col3] 和 [Col4]。现在每个文件都是正确的,看起来像:
File1 | File2 | File3
------------------------------
Col1 | Col2 Col3 | Col4
2 | 2 2 | 2
3 | 3 5 | 3
4 | 7 2 | 1
...............................
所以它应该从左到右拆分,为左侧文件提供尽可能多的列。问题是这个文件可能很大,我不想将它读入内存,所以我们逐行读取初始文件,我应该以某种方式确定一组要拆分的索引。如果这有可能吗?我希望我把问题描述得很好,所以你能理解它。
【问题讨论】:
-
列可以交换吗?
-
有多少列,多少行?
-
最多 2,500 列和最多 10,000 行。未来可能会更多。列不能交换、移动等。
标签: algorithm