假设我有一个包含 4 个不同值的数字的列表。我有第二个列表,描述了所有数字的总和(如果 list1=[1,3,2,5],list2=[1,4,6,11])。这样对于数十万个数字的列表,我不必添加所有数字 - 信息已经存储。
如果我在 list1 中的索引 0 处插入一个新数字,比如数字 2,我必须更新 list2 中的所有以下值。对于非常大的列表,这会非常耗时(也违背了第二个列表的目的)。
但是,如果我记录列表前半部分的总和 (4),我可以从相对于该总和 (list2=[1,4,2,7]) 继续 list2。现在,如果我在 index=0 处插入数字 2,我只需要更新前两个值和记录的中间值。对于 100,000 个数字的列表,这将保证我只需要更新 50,000 个值。
我还可以在列表的每三分之一或每 10,000 个数字处记录值,或者我可以记录中途的一半(有点像二进制排序 - 现在我只需要更新/查看我正在影响的任何子列表)。
问题:我如何确定/管理此列表的最有效方法是什么?一半?三分之二?三个级别,每个级别减半?
[这是一个实际问题,而不是理论问题。List2 提供了用于布局和渲染文本/图形的偏移量。在我正在使用的环境中,一棵树是不实用的。我必须处理一个列表。我需要快速访问任何给定的总和/偏移量。另外,我很难清楚地呈现它。请随时澄清问题或要求澄清。]