【发布时间】:2014-02-25 17:43:04
【问题描述】:
我应该维护
1.) 一个 SortedDictionary(double,struct)
2.) 还是只是一个普通的 Dictionary(double,struct) 加上一个 SortedSet(double)?
我只想快速插入。我不关心检索,因为我不会做太多查找。我需要排序的性质,因为我所做的唯一查找将是最大双精度数或几个最大双精度数。
我觉得时间表现很明智 -
两者都是一样的,SortedSet<double> 只是做了额外的工作。你们能确认一下吗?
我不知道的部分是是否保持排序,SortedDictionary 仅围绕键(双精度)移动,或者同时移动键和值。在后一种情况下,2.) 将优于 1.),不是吗?
此外,尚不清楚SortedDictionary 是如何在内部实现的。 Sortedset 是经过验证的红黑树。
【问题讨论】:
-
您是否做过任何基准测试,看看哪个表现更好?
-
这听起来像是一个微优化。从逻辑上讲,插入已排序的数据结构与未排序的数据结构相比需要更长的时间。我相信插入 sorteddictionary 和 sortedset 之间的性能应该是相同的,因为它们都使用相同类型的键进行排序。那么,问题是你想要 1 个结构还是 2 个结构?
-
鉴于您只需要
max值,为什么需要跟踪所有项目? -
我不确定在运行时需要多少这些最大值。在最坏的情况下,我必须从最大值@brcpar 开始获取所有值,即结构我使用的有点重~100字节,所以你的意思是当树节点将被移动并在排序字典中重新平衡时,它只是将被移动的双值节点?然后它们有指向结构的指针?是这样吗?还是整个 (double, struct) 对被移动以进行重新平衡?如果是前者,1.) 是要走的路。我觉得维护一个 sortedset(double) 会不那么“重”。
标签: .net performance red-black-tree sortedset sorteddictionary