简化中表对象结构的复杂性
本文关键字:结构 复杂性 对象 | 更新日期: 2023-09-27 18:27:43
我有一个模仿excel表属性的对象结构。因此,我有一个表对象,其中包含标题、标题行对象和正文行对象等属性。在标题行和每个正文行对象中,我有一个单元格对象,包含每行每个单元格的信息。我正在寻找一种更有效的方式来存储这个表结构,因为在我对这个对象的一次使用中,我正在将其结构打印到屏幕上。目前,我正在为每个单元格打印每一行做一个O(n^2)复杂度:
foreach(var row in Table.Rows){
foreach(var cell in row.Cells){
Console.WriteLine(cell.ToString())
}
}
是否有更有效的方法来存储此结构以避免n^2?我问这个问题是因为这个打印功能存在于另一个n^2循环中。基本上我有一个表格标题列表和一个表格列表。我需要找到那些标题在标题列表中的表。然后,对于这些表中的每一个,我都需要打印它们的行和每一行中的单元格。可以通过使用不同的数据结构进行存储来优化此操作的任何部分吗?我不知道它们到底是怎么工作的,但我听说过哈希和字典?
感谢
由于您正在查找具有特定标题的表,因此可以使用字典按标题存储表
Dictionary<string,Table> tablesByTitle = new Dictionary<string,Table>();
tablesByTitle.Add(table.Title, table);
...
table = tablesByTitle["SomeTableTitle"];
这将使查找表成为O(1)运算。查找n
表将是一个O(n)操作。
打印表格的原因取决于行和列的数量。没有什么可以改变这一点。
更新:
string tablesFromGuiElement = "Employees;Companies;Addresses";
string[] selectedTables = tablesFromGuiElement.Split(';');
foreach (string title in selectedTables) {
Table tbl = tablesByTitle[title];
PrintTable(tbl);
}
没有什么比输出NxN值矩阵的N^2运算更有效的了。最坏的情况是,你会一直这样做。
现在,如果不是将值存储在定义行和列的图形关系的多维集合中,而是将它们放在一维集合中,并在每个单元格中包含行-列信息,那么您只需要遍历具有值的单元格。对于一个由N行N列组成的完全填充的表,最坏的情况仍然是N^2(一维数组虽然是线性的,但将有N^2个项),但最好的情况是该表中只有一个单元格被填充(或没有填充),这将是恒定的时间。
这个答案适用于,打印表部分,但问题被扩展了
关于获取表格的部分,请参阅另一个答案。
不,没有。
除非你的值遵循某种可预测的分布,否则你可以使用x和y的函数,根本不存储数据,或者使用种子和函数。
如果多次需要,可以将打印输出缓存在字符串或StringBuider中。
如果有足够的数据,我想你可能会应用一些压缩算法,但我不会说这更简单或更有效。