Data structures 表的最佳数据结构
我们的团队正在致力于移动平台的表格小部件的实现(其中一个应用程序是类似MS Excel的移动办公) 我们需要优化存储表数据的数据结构(使用简单的二维数组) 您能建议一下存储表格数据的最佳数据结构吗。以下是数据结构的一些要求:Data structures 表的最佳数据结构,data-structures,sparse-matrix,tabular,Data Structures,Sparse Matrix,Tabular,我们的团队正在致力于移动平台的表格小部件的实现(其中一个应用程序是类似MS Excel的移动办公) 我们需要优化存储表数据的数据结构(使用简单的二维数组) 您能建议一下存储表格数据的最佳数据结构吗。以下是数据结构的一些要求: 表格的大小可以达到2^32 x 2^32 大多数表单元格是空的(即,表是稀疏的),因此最好不要存储空单元格的数据 数据结构的接口应支持插入/删除行和列 数据结构应允许向前和向后遍历非空单元格 表格的单元格可以合并(即一个单元格可以跨越多个行和/或列) 我建议像在excel
- 表格的大小可以达到2^32 x 2^32李>
- 大多数表单元格是空的(即,表是稀疏的),因此最好不要存储空单元格的数据李>
- 数据结构的接口应支持插入/删除行和列李>
- 数据结构应允许向前和向后遍历非空单元格李>
- 表格的单元格可以合并(即一个单元格可以跨越多个行和/或列)
someKeyValueStore = new KeyValueStore();
someData = new Cell(A1,"SomeValue");
someOtherData = new Cell(C2,"SomeOtherValue");
someKeyValueStore.AddKeyValuePair(someData);
someKeyValueStore.AddKeyValuePair(someOtherData);
在这种情况下,您根本不必关心空单元格。你只需要访问那些不是空的。当然,您可能希望跟踪集合中的键,以便轻松查看是否具有特定键的值。但这基本上是最简单的处理方法 在详细考虑了行/列插入/删除的问题之后,我想出了一些看起来很有希望的方法 首先,创建并维护2个排序数据结构(例如搜索树),其中包含至少有一个非空单元格的所有水平和所有垂直索引 对于此表:
ABCDE
1
2*
3 % #
4
5 $
你应该:
- *:&2,&A
- %:&3,&B
- #:&3,&E
- $:&5,&D
ABCDE
1.
2*
3 % #
4@二叉搜索树(key=y*2^32+x)可以工作吗?有了这样一棵树,合并看起来也不那么复杂。我对二叉搜索树犹豫不决,因为我需要为每个单元格存储索引。当插入或删除行或列时,我必须更新所有索引。如果你有一个行树,每个行都是树,你可以通过只更新行表中的行索引来避免更新每个单元格中的行索引。我不认为您可以找到一种不需要移动单元格数据或更新行/列插入/删除索引的数据结构。我也会很惊讶地看到用户在移动设备上可以直接编辑一个非常大的表,原因有二:这样的设备上没有太多内存,在上面写或编辑东西也不是很方便。我不认为问题的移动版本足够大,索引更新也不重要。如果我对问题的规模有误解,请在问题中添加更多数据。可能存在允许插入/删除行和列的稀疏矩阵数据结构的实现?或者,例如,D.E.Knuth?Adam建议的舞蹈链接(DLX)数据结构的一些变体,谢谢。你的想法是对的!但我还需要一些关于内部数据结构实现的想法。主要的问题是,当我使用一些稀疏的数据结构时,我必须存储包含单元格数据的单元格。但是,当插入或更新某些行或列时,我必须更新非空单元格的所有索引。也许有一些解决方案可以避免更新单元格索引的必要性?对不起,我还没有写完答案并无意中发布了它:(现在我已经完成(编辑)itAlexey,你的想法听起来很棒!我将尝试实施和测试。完成后,我会给你反馈。谢谢!Alexey,很抱歉延迟反馈。非常感谢!它工作得非常好!
ABCDE
1
2*
3 % #
4 @ <- new row 4
5 <- used to be row 4
6 $ <- used to be row 5