C - 如何实现Set数据结构?

2024-01-01

在 C 中是否有任何棘手的方法来实现集合数据结构(唯一值的集合)?集合中的所有元素都属于相同类型,并且有巨大的 RAM 内存。

据我所知,对于整数,使用值索引数组可以非常快速且轻松地完成。但我想要一个非常通用的 Set 数据类型。如果一个集合可以包含它自己那就太好了。


多种实施方式设置(和映射)功能,例如:

  • 基于树的方法(有序遍历)
  • 基于哈希的方法(无序遍历)

Since 你提到了值索引数组,让我们尝试基于哈希的方法自然地构建在值索引数组技术之上.

当心的优点和缺点 http://en.wikipedia.org/wiki/Hash_table#Features基于哈希的方法与基于树的方法的比较。

你可以设计一个hash-set(一个特殊情况是哈希表 http://en.wikipedia.org/wiki/Hash_table) 的指针hashable POD http://en.wikipedia.org/wiki/Plain_old_data_structures, with chaining https://en.wikipedia.org/wiki/Hash_table#Collision_resolution,内部表示为固定大小的存储桶数组哈希表, where:

  • all 哈希表在一个桶中具有相同的哈希值
  • 一个bucket可以实现为动态数组or哈希表的链表 http://en.wikipedia.org/wiki/Hash_table#Separate_chaining
  • a hashable's 哈希值用于索引存储桶数组(哈希值索引数组)
  • 一项或多项哈希表包含在哈希集中的可以是(指向)另一个哈希集的指针,甚至是哈希集本身(即指向)。自我包容是可能的)

有了大量的内存可供使用,您可以慷慨地调整存储桶数组的大小,并结合良好的散列方法,大大降低碰撞 http://en.wikipedia.org/wiki/Hash_collision,实现几乎恒定时间的性能。

你必须实施:

  • the 哈希函数 http://en.wikipedia.org/wiki/Hash_function对于被散列的类型
  • 用于测试两个哈希值是否相等的类型的相等函数
  • 哈希集contains/insert/remove功能。

您还可以使用开放寻址 https://en.wikipedia.org/wiki/Hash_table#Open_addressing作为维护和管理存储桶的替代方案。

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

C - 如何实现Set数据结构? 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向

随机推荐

  • 普通 JavaScript 中的 jqueryposition()

    我有以下代码行 var newLeftPos span s i position left parseInt span s i css width 10 它在 ie6 及更高版本中工作得很好 但我还需要让它在 ie5 5 中工作 现在我们不
  • 使用 Redux 获取 Widget 树外部的更新状态

    是否可以从 Widget 树之外的 Store 获取最新状态 在 Provider 中 您可以通过像这样调用 Provider 轻松做到这一点 并且如果有任何更改 状态将更新 Provider of
  • 为什么 MSBuild 将 *.XmlSerializers.dll 程序集放在已发布的 Web 应用程序的根文件夹中?

    我有一个构建过程 它采用我的 VS 2008 NET 2 0 ASP NET 项目并使用 MSBuild 构建它 该项目包含 ASPX 文件和一个 Web 服务 并且还连接到另一个 Web 服务 一切似乎都运行良好 除了 MSBuild 将
  • c# xml序列化不写null

    当我序列化一个包含可为 null DateTime 的 C 对象时 有没有办法将 null 值保留在 xml 文件之外 而不是让
  • SFINAE:static_assert 与 std::enable_if

    是否存在以下缺点 建议 句法 template lt typename T gt void f static assert std is same lt T int gt value 而不是 SFINAE 看起来像拐杖 template l
  • 使用“随机”键反序列化 JSON

    我正在尝试反序列化此 Json 代码 hotkeyOptions autoSwitchHotkeyPreset true currentHotkeySetName Paladin hotkeySets Newbie F10 useObjec
  • 添加引号到 CSV 导出

    我正在使用以下命令将数据导出到 CSV 文件fputcsv 我有正在写入的字符串 但是我要求数据用双引号引起来 foreach orderDetails lines as line fputcsv orderImportCsv line 在
  • 如何使用 html5 音频标签在 Android 上使用 PhoneGap 播放本地 mp3?

    我正在使用phonegap 上的Android SDK v19 在Android 4 4 上进行部署 我在与我的 index html 文件相同的文件夹中有一个 mp3 文件 我想使用 html5 音频标签来播放它
  • 如何在 ASP.NET Core 的 Razor Pages 中设置全局变量?

    我想检查浏览器是否是 IE 并在 razor 页面中执行某些操作 我刚刚在剃刀页面中创建了一个函数来做到这一点 不过 我认为在每个razor页面中使用检查浏览器是否为IE的功能是多余的 对于独立用户 我只需要检查一次并设置一个全局变量IsI
  • 如何在 C# 命令中使用 LIKE 运算符?

    我需要将字符串插入 Sql 命令 search CommandText SELECT FROM Contacts WHERE Name like person 正确的使用方法是什么LIKE在命令中 应该 SELECT FROM Contac
  • 实例化新 Android Fragment 的最佳实践

    我见过在应用程序中实例化新片段的两种一般做法 Fragment newFragment new MyFragment and Fragment newFragment MyFragment newInstance 第二个选项使用静态方法ne
  • sizeof- 函数还是宏? [复制]

    这个问题在这里已经有答案了 在c中 我们使用sizeof 用于获取数据类型的大小 所以 它是如何定义的 它是一个宏或一个函数 因为我们可以用两种方式来使用它 sizeof int and sizeof int 那么这是如何在头文件中定义的
  • 将非 ASCII 字符分配给宽字符并使用 printf 打印

    如何将非 ASCII 字符分配给宽字符并将其打印到控制台 这段代码不起作用 include
  • SelectKBest (chi2) 如何计算分数?

    我试图通过将特征选择方法应用于我的数据集来找到最有价值的特征 我现在使用 SelectKBest 函数 我可以生成分值并根据需要对它们进行排序 但我不明白这个分值是如何计算的 我知道理论上的高分更有价值 但我需要一个数学公式或一个例子来计算
  • JMeter 使用 jmx 文件的相对路径上传文件

    我正在 JMeter 中创建一个 HTTP 请求采样器 以自动将文件上传到 http 服务 有没有办法将 通过请求发送文件 中的 文件路径 设置为jmx文件位置的相对路径 是的 这在 JMeter v2 9 中得到了证实 您可以在文件名输入
  • 如何在 SQL Server 2005 Express 中启用全文索引?

    我正在尝试在 SQL Server 2005 Express 中启用全文索引 我在装有 Vista Ultimate 的笔记本电脑上运行此程序 据我所知 标准版本的 SQL Server Express 没有全文索引 我已经下载并安装了 M
  • 从 Rails-geocoder gem 中的控制器获取纬度和经度值

    使用时是否可以在控制器中获取纬度和经度值geocoder https github com alexreisner geocoder宝石在轨道上 目前正在做的获取所有附近位置的操作是传递位置名称 如下所示 event address Eve
  • 在 python 中使用 pandas 检索数据列上的匹配字数

    我有一个df Name Description Ram Ram is one of the good cricketer Sri Sri is one of the member Kumar Kumar is a keeper 和一个清单
  • 提供用于 WhatsApp 链接共享的图像

    当我们分享这样的链接时 如何在我们的网站中添加图片以在 WhatsApp 中显示 2020年标准 只需几个步骤即可获得适用于 PC 和移动设备的 WhatsApp Twitter Facebook 和书签图标的完美预览 如果您喜欢阅读 请前
  • C - 如何实现Set数据结构?

    在 C 中是否有任何棘手的方法来实现集合数据结构 唯一值的集合 集合中的所有元素都属于相同类型 并且有巨大的 RAM 内存 据我所知 对于整数 使用值索引数组可以非常快速且轻松地完成 但我想要一个非常通用的 Set 数据类型 如果一个集合可