我需要一些指导来编写哈希函数来对大约 160,000 个字符串进行排序

2024-01-09

我的老师把这个甩给了我们,并告诉我们我们只需要谷歌一下如何编写哈希函数。我对此很没有方向。我们为类编写了一个基本的哈希表模板,但我有一个项目需要将大约 160,000 个字符串排序到至少有 500 个存储桶的表中(为了速度我想做更多)。

我只是不知道在哪里可以找到简洁、易于理解的信息。

任何帮助将不胜感激。


我建议一个通用哈希函数 http://en.wikipedia.org/wiki/Universal_hashing。即使数据是由对手选择的,这种函数也能保证预期的少量冲突。有很多通用哈希函数。

如果是字符串,可以采用以下哈希函数。

For a character c we define #(c) the arithmetic value of c ie(ASCII). For a string x=c1c1...cn we define enter image description hereenter image description here

If HSize是一个整数并且k一个大素数(你定义它),对于一个范围0<a,b<k*HSize设哈希函数为:

该函数提供之间的输出[0, HSize-1]

输出值通过霍纳法则计算,找到模数k*HSize每次操作后的划分。

所以,创建一个函数哈希函数并将要散列的字符串作为参数传递。 这是代码:

#define k 7919 
#define Hsize 1009   
#define a 321
#define b 43112

long long HashFunction(string text)
{
  int i;
  long long  res = 0;
  long long M = (Hsize * k);
  cout<<"M = "<<M<<endl;
  cout<<"Hsize = "<<Hsize<<endl;
  cout<<"k = "<<k<<endl;
  int s=text.size();
  for(i = s-1; i >= 0; i--)
  {
    res = a * (res * 256 + (int)text[i]);
    //cout<<"res before modulo = "<<res<<endl;
    res=res % M;
    //cout<<"res after modulo = "<<res<<endl;
  }
    long long res1 = (res + b) / k;
    return res1;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我需要一些指导来编写哈希函数来对大约 160,000 个字符串进行排序 的相关文章

  • Matlab中反转一位逻辑位

    是否存在更好的方法来反转 X 的元素 gt gt X dec2bin 10 X 1010 我这样做了 x i num2str 1 str2num x i 如果我理解正确的话 你想将一位设置为 1 使用bitset bitset x bitN
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • PyCharm 无法识别字典值类型

    我有一个简单的代码片段 其中我将字典值设置为空列表 new dict for i in range 1 13 new dict i 现在 如果在下一行的循环内我会输入new dict i 并添加一个点 我希望 PyCharm 向我显示可用于
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 如何加速 pandas 字符串函数?

    我正在使用 pandas 矢量化 str split 方法来提取从 上的拆分 返回的第一个元素 我还尝试使用 df apply 与 lambda 和 str split 来产生等效的结果 使用 timeit 时 我发现 df apply 的
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 私有模板函数

    我有一堂课 C h class C private template
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 将字符字段转换为 R 中的季度日期

    我有一个 tsv 其中有一个季度格式的日期字段 名为 trim trim 1992 4 1993 1 当我将文件作为数据帧加载时 R 将该字段作为字符导入 我无法转换它 即使我尝试 我也只能得到 NA df trim lt as Date
  • IE8不支持querySelectorAll

    我尝试使用document querySelectorAll 但是 IE8 抛出错误 即 对象不支持此属性或方法 var titleCheckBox document querySelectorAll Here http www quirk
  • Golang MGO - 插入或更新未按预期工作

    我正在用 Go 运行一个网站 并且使用MGO https labix org mgo用于连接我的 MongoDB 数据库的包 我正在处理用户的登录 并且我正在尝试使用 funcUpsert https godoc org gopkg in
  • 文档点击不在元素 jQuery 中

    使用 jQuery 如何检测非特定元素的点击 并相应地执行操作 我有以下 JavaScript master click function slave toggle document not master slave click funct
  • 在 32 位程序中使用 64 位驱动程序。视窗

    这只是一个半路编程问题 首先 我有一个 PCI Express 卡和 32 64 位驱动程序 目标操作系统必须是 Windows 64 位系统 我读到 在 Vista64 下 所有驱动程序都必须经过认证 64 位驱动程序 这是 64 位操作
  • AttributeError:“列表”对象没有属性“set_model”

    我尝试在训练深度卷积神经网络时使用早期停止和模型检查点来保存最佳模型 但是 我收到以下错误 callback set model model AttributeError list object has no attribute set m
  • Symfony 2:从存储库创建服务

    我正在学习 Symfony 并且一直在尝试使用存储库创建服务 我已经从generate entity 创建了我的存储库和实体 所以它们应该没问题 到目前为止 我在 services yml 中得到的内容是 parameters mytest
  • 如何在不加载空页面的情况下清理UIWebView的内容?

    我需要清理 UIWebView 的内容 以便重用它 但我在其委托方法中有一些身份验证处理代码 所以我不想加载像 about blank 这样的空页面来清理它 因为它会触发我的身份验证处理代码 那么有办法做到这一点吗 另外 通过重用它 我需要
  • 在 Rust 项目的 C 绑定上运行 jextract 时出现“cstdarg 文件未找到”

    我正在尝试与 Java 的巴拿马项目一起使用 Rust 编写一个简单的整数加法函数 使用生成绑定后cbindgencrate 运行 jextract 时出现以下错误 jextract t org adder L l adder java r
  • 多个InfoWindowAdatper的

    我有一张地图 我在其中创建不同类型的标记 我无法将信息窗口适配器分配给标记 哎呀 这不是很好 我只能为整个地图分配 InfoWindowAdapter 至少我认为 我的问题是我想根据我点击的内容显示不同类型的信息窗口 是否是设置一个 Inf
  • 如何用特定的颜色填充整个画布?

    如何填充整个HTML5
  • 步骤属性不适用于 HTML 输入类型“时间”

    我想要一个时间输入字段 用户只能选择完整的时间 在我的示例中 它将是 00 00 01 00 02 00 等等 这就是为什么我将步长属性设置为 3600 因为 3600 秒等于一小时 这是我的代码
  • Chrome 扩展:如何禁用页面可见性 API

    我正在编写一个 Chrome 扩展程序 需要防止网页触发文档 VisibilityChange 事件 至少我需要能够覆盖 document visibilityState 即使它是只读属性 如果不可能 因为此扩展程序仅供我使用 不会出现在
  • 如何使用 jquery 选择包含精确文本值的范围? [复制]

    这个问题在这里已经有答案了 可能的重复 根据确切的文本内容选择元素 https stackoverflow com questions 2338439 select element based on exact text contents
  • 改进 Boyer-Moore 字符串搜索

    我一直在研究 Boyer Moore 搜索算法 并从 Shriphani Palakodety 的基本代码集开始 我创建了 2 个附加版本 v2 和 v3 每个版本都进行了一些修改 例如从循环中删除 len 函数 而不是重构 while i
  • 滑动菜单手势覆盖图手势的可滚动手势-android

    我正在使用滑动菜单here https github com jfeinstein10 SlidingMenu在我的应用程序中 我的应用程序还有一个图形视图 http www jjoe64 com p graphview library h
  • applicationWillTerminate 在 iPhone 上究竟如何工作?

    我正在考虑如何让我的 iPhone 应用程序尽可能 防弹 现在 我正在考虑应用程序将如何响应用户在应用程序处理的关键点按下主页按钮 What exactly发生 应用程序的线程中是否还执行了更多指令 当 applicationWillTer
  • PatternSyntaxException:在 Java 中使用正则表达式时出现非法重复

    我不太了解正则表达式 但我需要匹配一个简单的模式 以下内容应返回 true Pattern matches user id 0 9 inputLine 当输入行为 user id 34 但是 我遇到了这个异常 java util regex
  • 递减迭代器

    我有一个指向双向数据结构 实际上是向量 中的位置的普通迭代器 现在我想对当前位置过去的 x 个元素执行操作 尽管最后一个 x 可能是向量的第一个元素 但之前总是至少有 x 个元素 我写了这段代码 vector
  • 我需要一些指导来编写哈希函数来对大约 160,000 个字符串进行排序

    我的老师把这个甩给了我们 并告诉我们我们只需要谷歌一下如何编写哈希函数 我对此很没有方向 我们为类编写了一个基本的哈希表模板 但我有一个项目需要将大约 160 000 个字符串排序到至少有 500 个存储桶的表中 为了速度我想做更多 我只是