我在考慮以下問題。垂直分割一個數組,所以我們得到最小分割
我可以有一個字符串像
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行。將來可能會更多。列不能交換,移動等。 –