数据结构,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) 使用范围键查找? 的相关文章

  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • (const T v) 在 C 中从来都不是必需的,对吗?

    例如 void func const int i 在这里 const是不必要的 因为所有参数都是按值传递的 包括指针 真的吗 C 中的所有参数确实都是按值传递 这意味着无论您是否包含该参数 实际参数都不会改变const or not 然而
  • C# 正则表达式用于查找 中具有特定结尾的链接

    我需要一个正则表达式模式来查找字符串 带有 HTML 代码 中的链接 以获取文件结尾如 gif 或 png 的链接 示例字符串 a href site com folder picture png target blank picture
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 如何生成 appsettings..json 文件?

    我有一个 ASP NET Core 2 WebAPI 它将部署在以下环境中 INT QA STAGE 生产环境 基于上述 我需要有appsettings
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • 两种类型的回发事件

    1 我发现了两篇文章 每篇文章对两种类型的回发事件的分类都略有不同 一位资源说两种类型的回发事件是Changed事件 其中控件实现 IPostbackDataHandler 当数据在回发之间更改时触发 然后Raised事件 其中控件实现 I
  • C# 委托责任链

    为了我的理解目的 我实现了责任链模式 Abstract Base Type public abstract class CustomerServiceDesk protected CustomerServiceDesk nextHandle
  • libxml2 xmlChar * 到 std::wstring

    libxml2似乎将所有字符串存储在 UTF 8 中 如xmlChar xmlChar This is a basic byte in an UTF 8 encoded string It s unsigned allowing to pi
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构

随机推荐

  • 使用 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