0

问题是想出一个可以与巨大的excel表一起工作的数据结构(显然不适合主存)

想象以下作为 excel 工作表的一部分,其中 e 代表一个空单元格。

  A B C D ...

1 3 9 e e ...

2 e e e e ...

3 e e 5 e ...

4 e e e e ...

5 e e 6 e ...

所以数据结构应该允许我将excel表格存储到内存中(我们知道只有excel表格中的值才能放入主内存中)并支持以下操作

getByColumn(Column col);- 给出某一列的所有值,比如 C 列的 5,6

getByRow(Row row);- 给出某一行的所有值,例如 ROW 1 的 3 和 9 及更多

insertCell(Column col, Row row, int value);- 插入或覆盖单元格的值

getExcelSheet(FileName);- 以压缩形式给出整个 excel 表(数据结构)

什么是可以考虑的数据结构?我正在准备面试,这不是家庭作业。想从不同的人那里获得一些见解。

只是给个感觉:假设 excel 表是 1 TB,我们有 8GB 的​​内存。1 TB 的 Excel 表只有许多空单元格,但值遍布不同的单元格

4

4 回答 4

1

使用 Map/Dictionary 将单元坐标映射到值,为未明确设置的所有内容返回默认值 EMPTY_CELL。

在此基础上实现所需的方法。

于 2012-10-01T05:20:44.310 回答
1

有大量关于稀疏矩阵主题的文献,这是一个广泛使用的术语,用于表示您所说的巨型 Excel 工作表。文献涵盖了数据结构和用于创建和修改它们的合适算法;Wikipedia 文章为您的研究提供了一个很好的起点。它可能会告诉你足够的信息来准备你的面试。

于 2012-10-01T09:03:12.963 回答
1

An elaboration of Tass' comment and Mark's answer (for which +1):

You can insert cell values efficiently if you use what wikipedia calls Dictionary Of Keys or DOK (which is essentially Jens' answer), but as you rightly comment, getByRow and getByColumn will be fairly slow.

A better option would be what wikipedia calls Coordinate List or COO: just a set of triples (rowindex, columnindex, value). You'd probably actually store this as three arrays. In order to make insertion fast, keep a set of sorted and unsorted entries, and insert into the unsorted set; whenever the number of unsorted entries goes over a threshold T (which might depend on the total number of nonempty cells K), sort them into the sorted set.

You'll want to sort them all by, say, row index, and keep another array with indices into the arrays to give the version that is sorted by column index.

For getByRow you would take the correct section of the arrays sorted by row index, and additionally search through the unsorted set.

All of this assumes that you do have enough memory to store a couple of words for every nonempty entry in the matrix. If not, you'll need to combine this with some sort of external memory approach.

于 2012-10-01T16:53:07.347 回答
-2

您可以将这个神奇的 Excel 表存储在一个二维数组中,其中包含 null 的空单元格。如果数据不适合,我认为我们不走运

于 2012-10-01T05:23:35.377 回答