列表上的哈希函数与其中项目的顺序无关

2023-12-03

我想要一个为一组整数分配值的字典。

例如key is [1 2 3] and value会有一定的价值。

事情是这样的[3 2 1]在我的情况下需要进行相同的处理,因此如果我采用散列方法,散列需要相等。

该套装将包含 2 至 10 件物品。

项目的总和通常是固定的,因此我们不能根据总和来生成哈希码,这是这里的第一个自然想法。

不是家庭作业,实际上在我的代码中面临这个问题。

这一套基本上是IEnumerable<int>在 C# 中,所以任何数据结构都可以存储它们。

任何帮助表示赞赏。性能在这里也非常重要。

一个直接的想法:我们可以总结一下items^2并且已经得到了某种更好的哈希值,但我仍然想听听一些想法。

EDIT: hmm 真的很抱歉大家,每个人都建议排序,但我没有想到我需要说,实际上排序和散列是我当前使用的解决方案,我正在考虑更快的替代方案。


Basically all of the approaches here are instantiations of the same template. Map x1, …, xn to f(x1) op … op f(xn), where op is a commutative associative operation on some set X, and f is a map from items to X. This template has been used a couple of times in ways that are provably good.

  • Choose a random large prime p and a random residue b in [1, p - 1]. Let f(x) = bx mod p and let op be addition. We essentially interpret a set as a polynomial and use the Schwartz–Zippel lemma to bound the probability of a collision (= the probability that a nonzero polynomial has b as a root mod p).

  • 令 op 为 XOR,令 f 为随机选择的表。这是Zobrist 哈希并通过简单的线性代数论证最小化预期的碰撞次数。

模幂运算速度很慢,所以不要使用它。至于 Zobrist 散列,有 300 万个项目,表 f 可能不适合 L2,尽管它确实设置了一次主内存访问的上限。

相反,我会以 Zobrist 哈希作为出发点,寻找一个行为类似于随机函数的廉价函数 f。这本质上是非加密伪随机生成器的工作描述 - 我会尝试通过用 x 播种快速 PRG 并生成一个值来计算 f。

编辑:鉴于所有集合都具有相同的和,不要选择 f 为 1 次多项式(例如,线性同余生成器的阶跃函数)。

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

列表上的哈希函数与其中项目的顺序无关 的相关文章

  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • ListDictionary 类是否有通用替代方案?

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

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 在javascript中将数字转换为日期格式yyyymmdd到mm/dd/yyyy

    我正在获取 XML 提要并使用 JavaScript 将其写入 HTML 日期字段有 20120319 我想做的是将其转换为更易读的格式 例如 03 19 2012 在 JavaScript 中是否有一种简单的方法可以做到这一点 一种方法是
  • Spark:将 2 元组键 RDD 与单键 RDD 连接的最佳策略是什么?

    我有两个想要加入的 RDD 它们看起来像这样 val rdd1 RDD T U val rdd2 RDD T W V 碰巧的是 关键值rdd1是唯一的 并且元组键值rdd2是独一无二的 我想加入这两个数据集 以便得到以下 rdd val r
  • adb 无法将 .apk 文件复制到 Android 模拟器:没有这样的文件或目录

    我在让 MyFirstApp Hello World Android 应用程序在模拟器中运行时遇到了障碍 我正在按照以下网址的说明进行操作 http developer android com training basics firstap
  • 从 XSL 调用 Java (SAXON)

    我正在尝试使用 java 中的 Saxon 处理器 我正在使用saxon9ee jar里面 saxonee9 3 0 11j zip 刚刚下载 没有许可证 是否需要它才能工作 Their 可以在这里找到资源 http www saxonic
  • Swift - 圆角半径和投影问题

    我正在尝试创建一个按钮圆角 and a 阴影 无论我如何切换 该按钮都无法正确显示 我试过了masksToBounds false and masksToBounds true 但是要么圆角半径起作用而阴影不起作用 要么阴影起作用而圆角半径
  • @ManagedBean @Component 类中的 @Autowired 服务在 JSF 请求期间为 null [重复]

    这个问题在这里已经有答案了 我尝试过将 Spring 3 MVC 与 JSF 2 结合起来 我在 Spring 和 JSF 方面有一些经验 但之前从未尝试过加入它们 最后我有2个文件 ManagedBean name userBean Sc
  • CUDA C++11,lambda 数组,按索引的函数,不起作用

    我在尝试让 CUDA 程序按索引管理 lambda 数组时遇到问题 重现问题的示例代码 include
  • responseText 有效,但 responseXML 始终为 null

    我已经浏览了这里可以找到的所有答案 但无法解决这个问题 我很确定我没有错过任何明显的事情 我正在尝试加载基于经纬度的地图标记 问题是 当我尝试返回 AJAX 响应时 responseXML 始终为 null 如果我使用responseTex
  • 如何使用 Facebook GRAPH API 删除 Facebook 评论帖子?

    我开始研究这个是因为我希望能够删除 Facebook 活动墙上的评论 因为 删除帖子 似乎不适用于活动墙上的评论 然而 由于我不知道是否有可能 我决定看看是否可以手动删除我在自己的墙上发布的帖子 因为这是可能的 注意我是NOT使用任何 SD
  • Intent.getExtras() 总是返回 null

    我正在尝试通过通知和事件运行活动onCreate我想 重定向 为此添加对信息的思考Intent班级 一个重要的特性是生成通知的类是通过服务执行的 我从中检索上下文getApplicationContext类提供的方法android app
  • 在文件名前批量添加字符串

    我正在处理 Windows 批处理文件 需要更改当前目录中的文件名 我有这些文件 file1 txt file2 txt file3 txt 我需要在每个文件名之前添加字符串 REG 如下所示 REG file1 txt REG file2
  • VBA控制功能区?

    我正在为 Excel 2010 创建 VBA 加载项 我使用了 Microsoft Office 的自定义 UI 编辑器 创建我自己的功能区的工具 但是 我想为用户提供加载我的加载项的选项 而不显示功能区 或者显示功能区的不同部分 通过菜单
  • tf_agents 自定义 time_step_spec

    我正在修改 tf agents 但在定制时遇到问题time step spec 我正在尝试在健身房 Breakout v0 中训练 tf agent 我已经制作了一个函数来预处理观察结果 游戏像素 现在我想修改 time step 和 ti
  • Silverlight Web 服务调用在 Studio 中可以工作,但从网站运行时失败

    我们正在构建一个 Silverlight 应用程序并调用 Silverlight WCF 服务 从 Visual Studio 运行应用程序时 一切正常 当我们部署到网站并运行应用程序时 每次调用 Web 服务时 我们都会收到以下错误 或类
  • 何时使用“sbt 程序集”和“sbt 编译 && sbt 包”?

    我想知道我什么时候应该使用sbt assembly什么时候sbt compile sbt package 我正在使用 Intellij IDEA 在本地计算机上编写一个程序 并使用以下命令进行编译sbt compile sbt packag
  • 如何使用外部自定义 CSS 覆盖 Bootstrap 3 样式?

    如何使用外部自定义 CSS 覆盖 Bootstrap 3 样式 div class navbar navbar inverse navbar fixed top div CSS navbar inverse background color
  • 释放NSTimer的正确方法?

    在我的 dealloc 方法中释放 NSTimer 的正确方法是什么 它是用以下代码创建的 void mainTimerLoop mainTimer NSTimer scheduledTimerWithTimeInterval 1 10 t
  • Eclipse Luna:未调用处理程序的 @CanExecute 方法

    我在 Eclipse Luna RCP 中的命令处理程序遇到问题 在我的 E4 应用程序模型中 我定义了一些必须启用的命令和相关处理程序 仅在某些情况下 因此 在我的处理程序 POJO 中 我实现了 注释为的方法 CanExecute我在其
  • MySql 查询-日期范围内的日期范围

    我使用 mySql 5 和 IIS I have products 有一个start date场和一个end date field 我需要运行一个查询 该查询将获取用户输入的开始日期和结束日期 并输出产品在日期范围内运行的天数 Exampl
  • 列表上的哈希函数与其中项目的顺序无关

    我想要一个为一组整数分配值的字典 例如key is 1 2 3 and value会有一定的价值 事情是这样的 3 2 1 在我的情况下需要进行相同的处理 因此如果我采用散列方法 散列需要相等 该套装将包含 2 至 10 件物品 项目的总和