介绍设计小比较的对象
考虑你有键/值对的列表:
(0,a) (1,b) (2,c)
你有一个功能,即插入两个电流对之间的新的价值,你需要给它一个保持顺序的密钥:
(0,a) (0.5,z) (1,b) (2,c)
这里新密钥被选为边界对的密钥平均值之间的平均值。
问题是,你列出的可能有数以百万计的插入。如果这些插页全部彼此贴近,则最终可能会出现2^(-1000000)
等密钥,这些密码在任何标准和特殊号码类别中都不容易储存。
问题
你怎么能设计一个系统,用于生成密钥:
- 给出正确的结果(大/小于)相比,按键的所有的休息。
- 仅占用
O(logn)
内存(其中n是列表中的项目数)。
我尝试
- 首先我尝试了不同数量的类别。就像分数甚至polynomium一样,但我始终可以找到示例,其中密钥大小与插入次数成线性关系。
- 然后我想到了保存指向其他许多按键的指针,并保存了低于/高于关系,但这总是需要至少
O(sqrt)
的内存和时间进行比较。
其他信息:理想情况下,当从列表中删除配对时,算法不应该中断。
也许你应该用树代替? – 2010-06-06 18:38:07
你期望得到O(log n)内存 - 每个关键值或整组关键值? – 2010-06-06 18:49:24
@snowlord实际上,键/值对存储在树中。但是对于我解决的任务,我需要能够插入树中的特定位置。 @HPM每个键 – 2010-06-07 02:51:10