数据结构,C#:~O(1) 使用范围键查找?

2024-02-27

我有一个数据集。该数据集将提供一个查找表。给定一个数字,我应该能够查找该数字的相应值。

不过,数据集(假设是 CSV)有一些注意事项。代替:

1,ABC
2,XYZ
3,LMN

这些数字是范围(- 是“通过”,而不是负数):

1-3,ABC     // 1, 2, and 3 = ABC
4-8,XYZ     // 4, 5, 6, 7, 8 = XYZ
11-11,LMN   // 11 = LMN

所有数字都是有符号整数。范围不与其他范围重叠。存在一些差距;数据集中未定义某些范围(例如上面最后一个片段中的 9 和 10)。 `

如何在 C# 中对该数据集进行建模,以便在保持较低内存占用的同时获得性能最佳的查找?

我想到的唯一选择是内存过度消耗。假设我的数据集是:

1-2,ABC
4-6,XYZ

然后我创建一个Dictionary<int,string>()其键/值是:

1/ABC
2/ABC
4/XYZ
5/XYZ
6/XYZ

现在我有了哈希性能查找,但哈希表中浪费了大量空间。

有任何想法吗?也许只是使用 PLINQ 并希望获得良好的性能? ;)


如果您的字典要真正存储广泛的键值,则将所有可能范围扩展为显式键的方法将迅速消耗比您可能可用的更多的内存。

最好的选择是使用支持某种二分搜索(或其他 O(log N) 查找技术)变体的数据结构。这是一个链接到 .NET 的通用 RangeDictionary http://www.blackwasp.co.uk/RangeCollection.aspx内部使用 OrderedList,并且具有 O(log N) 性能。

实现恒定时间 O(1) 查找需要将所有范围扩展为显式键。这需要大量内存,并且当您需要拆分或插入新范围时实际上会降低性能。这可能不是你想要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构,C#:~O(1) 使用范围键查找? 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 使用 glibc 而不是默认库编译的 C 程序:执行时权限被拒绝

    这是我在 stackoverflow 上的第一个问题 所以我会尽力做好 Context 我想提供一个可以在每个 Linux 发行版上运行的程序 例如 一个将使用 C 11 的程序 在没有 C 11 库的系统上运行 为此 我想复制我的程序使用
  • 使用 MinGW 构建 Boost 1.52

    我正在尝试寻找有关如何构建的权威答案提升1 52 with MinGW 我在互联网上找到了一些指针 可以归结为这样构建它 cd tools build v2 engine build bat mingw copy bin ntx86 bja
  • 使用 GoDaddy 的 spc 文件签署 java 小程序

    我正在尝试使用 godaddy 的 spc 文件签署 java 小程序 这是我正在使用的命令 keytool import keystore codesignstore storepass pass alias alias file fil
  • Windows 10:获得远程访问权限后,以 .\Administrator 身份远程启动 Quick Assist,无需 UAC,或暂时禁用 UAC

    我想要a script在这种情况下使用 无需管理员权限即可获得远程访问 远程启动快速协助 Administrator and not进行 UAC 对话 第 1 步通常通过 Quick Assist 完成 有时通过 Teams 屏幕共享完成
  • 通过脚本在 Microsoft 集群中创建专用 MSMQ 队列

    我们正在迁移到 Windows 2008 R2 Standard 并将使用 Microsoft 集群 主动 被动 配置 我们的应用程序严重依赖于 MSMQ 专用队列 并且我们的安装使用以下 C 代码创建了 100 多个专用队列 Messag
  • Java ReDos 是否容易受到攻击?

    我尝试重新创建正则表达式拒绝服务攻击 https en wikipedia org wiki ReDoS using a 正则表达式和aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 含有大量的a 使用js
  • Angularjs:ngRepeat 和指令

    我正在尝试制作一些可重复使用的倒计时小部件 与静态内容配合得很好 但是当我尝试动态添加它们时 我的指令不理解 ngRepeat 内的变量 Markups div class countdown p days jours hours heur
  • 使用两个嵌套 iframe 时防止打开新选项卡

    大家好 stackoverflow 的朋友们 我在这里遇到了一个问题 我给了一个iframe向其他人提供代码以将其嵌入到他的网站上 这是代码iframe 以上iframe包含以下内容html some html code
  • Service Worker 在浏览器离线时保存表单数据

    我是 Service Workers 的新手 并且已经浏览了各种文档 Google https developers google com web fundamentals getting started primers service w
  • 无法使用JDK1.8.0_92编译JSP文件

    我们有一个在 JBoss 6 1 上运行的旧版 JavaEE 应用程序 当使用 Java 1 8 0 92 运行 JBoss6 时 我们收到以下错误 请帮助我解决此错误或给出一些提示 16 49 32 888 ERROR org apach
  • 在使用 FromEventPattern 订阅之前捕获事件

    我正在使用 Rx 框架编写消息监听器 我面临的问题是 我正在使用的库使用一个消费者 每当消息到达时就会发布事件 我已经设法通过以下方式消费传入的消息Observable FromEventPattern但我对服务器中已有的消息有疑问 目前我
  • XML 模式:用相应的模式替换导入

    我有一个 XML 架构 其中包含多个导入 而这些导入又包含多个导入 我需要生成语义上相等的模式 其中所有导入都是内联的 我想替换这些
  • 使用按位运算符的算术运算符[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有没有办法通过使用执行加法 或算术运
  • 自动最大化图形

    我正在 MATLAB 中创建一些图形并自动将它们保存到文件中 问题是根据定义图像很小 手动解决我的问题的一个好方法是创建一个图像 图形 将其最大化 然后保存到文件中 我错过了自动最大化数字的这一步 有什么建议么 到目前为止我只发现了这个 h
  • 支持带电话功能和不带电话功能的 Android 设备

    我有一个应用程序可以在具有电话功能和不具有电话功能的设备上运行 以下是我的一些疑问 1 我能够支持这两种类型的设备吗 2 对于具有电话功能的设备 我需要启用通话功能 对于没有电话功能的设备 我将禁用通话功能 我不太清楚 和 概念 有没有办法
  • 强制 Grails/Weblogic 仅使用 HTTPS 协议进行重定向

    我在项目中使用 Grails 2 2 2 并且我的应用程序发出不需要的 http 重定向而不是 https 重定向 目前 我们在 Oracle Weblogic 前面有一个 F5 负载均衡器 F5 正在从 Weblogic 卸载我们的 SS
  • Swift 支持静态类吗?

    我想知道您是否可以在 swift 中创建类似于 C 中的静态类 即无法实例化的类 只能具有静态函数和静态属性 这些类型的课程可以快速实现吗 如果没有 考虑到 Swift 中可用的工具 重新创建这种设计模式的最有效方法是什么 不 Swift
  • HBase:使用Java API创建表时指定版本

    我知道我们可以通过以下方式从 hbase shell 执行此操作 create t1 NAME gt f1 VERSIONS gt 5 我在中找不到任何相应的选项HTableDesctiptor在 Java API 中 知道如何做到这一点吗
  • 错误:无法统计文件“XX.csv”:未知错误

    我运行这个命令 COPY XXX FROM D XXX csv WITH FORMAT CSV HEADER TRUE NULL NULL 在Windows 7中 它可以成功导入小于1GB的CSV文件 如果文件大于 1GB 我会收到 未知错
  • 数据结构,C#:~O(1) 使用范围键查找?

    我有一个数据集 该数据集将提供一个查找表 给定一个数字 我应该能够查找该数字的相应值 不过 数据集 假设是 CSV 有一些注意事项 代替 1 ABC 2 XYZ 3 LMN 这些数字是范围 是 通过 而不是负数 1 3 ABC 1 2 an