【发布时间】:2011-03-09 16:14:43
【问题描述】:
我需要对某些数据结构做出设计决定,以便快速访问。这里的场景: 我必须同步两个不同增长率的变量。我已按以下格式列出数据:
Range(Ai1,Ai2)~Range(Bi1,Bi2)也就是说范围Ai1-Ai2匹配Bi1-Bi2对于一些i
现在给定 A 的整个跨度中的任何 Ax,我应该能够确定 (Bj1, Bj2) 中的适当范围,反之亦然。数据类型明智:A 是 int;而 B 是浮动的。
我不知道最适合这种翻译的数据类型是什么?我的主要要求是速度。此外,有关如何在 C# 中实现此数据结构的任何帮助都会有所帮助。
确保问题适合内存。 A 的跨度大约在 0 - 300,000 范围内,范围 Ai1-Ai2 的大小可以在 10 到 300 之间;而浮点的跨度范围是 0 到 10,000.000(我们只使用 3 个小数位),范围 Bi1 - Bi2 的大小可以是 0.100 - 10.000
另一个已知的事实是,A 被保证是连续的,而 B 可能不是。但两者都同时增加,但速度不同。范围也没有重叠。两者都是单调递增的。
所以可以期待这样的事情:
(Ai1, Ai2) ~ (Bi1, Bi2)
(1,78) ~ (13.454, 19.546)
(79,114) ~ (19.712,22.335)
(115, 198) ~ (22.678, 24.101)
查询:A = 99,预期响应:B 范围 = (19.712,22.335)
查询:B = 16.117,预期响应:A 范围 = (1,78)
如果 B 不在范围内,则需要向前舍入。
Thnx-Egon
【问题讨论】:
-
我假设我们的问题适合记忆?但我完全不明白你的问题,你想和谁做什么?你能详细说明一下吗?
-
现在根据要求提供详细说明。
-
任何范围都可以重叠吗?
-
范围不重叠,单调递增。
-
我能想到的最直接的方法是 O(log n) 对 A 范围进行二进制搜索以找到正确的范围,然后返回相应的 B 范围,反之亦然跨度>
标签: c# performance data-structures