Tag: 哈希

如何更新散列函数中的表大小

我正在学习如何实现哈希表但我在这里有点困惑因为在下面的书中代码是可用的并且我对代码的理解得很好,但是在书中没有HASH函数的定义,我知道我们必须通过拥有,但根据下面给出的代码给出内部书HASH是两个参数,无论我在HashInsert使用HASH index=HASH(data,t->size)如果我们假设返回类型的HASH , HashInsert它采用两个参数index=HASH(data,t->size)现在为int,例如我们可以将HASH定义为 int HASH(int data,int tsize){ return(data%7); } 但是根据我的程序,如何在HASH函数内更新t->size (表大小)或者我应该如何使用它请帮助我正确实现上面的HASH函数 #define Load_factor 20 #include #include struct Listnode{ int key; int data; struct Listnode* next; }; struct HashTableNode{ int bcount; /// Number of elements in block struct Listnode* next; }; struct HashTable{ int tsize; /// Table size int count; struct HashTableNode** Table; }; struct […]

有没有简单的方法来使用库来散列数据数组?

我正在考虑使用CRC-32或SHA-1 ,可能在我在Linux(Ubuntu)上开发的C程序中使用。 是否有任何简单的方法可以使用库? 将CRC-32算法剪切并粘贴到我的程序的源代码中似乎很简单,但对SHA-1做同样的事情感觉有些不稳定。 有没有简单的方法来使用库,最好是在Ubuntu中但不一定? 我正在使用C,但如果必须的话,C ++会好的。

C – 生成X字符单词的所有可能性

编辑:我的意思是排列,而不是组合。 谢谢。 我意识到这是一个相当开放的问题,我不是每个人都在寻找代码,但实际上有些提示从哪里开始。 我想要的是一个程序,它可以生成给定长度的每个字符组合,即用户输入4,程序将生成长度为4的ASCII字符的每种可能组合。 不确定我会从哪里开始,也许是使用哈希表? 当然会需要循环,但我不确定如何设计它们来生成组合。 到目前为止,它始终是一个案例,例如,循环直到1000件事情发生。 任何建议都非常感谢! 干杯, T.

C ++ Tweetnacl将没有读取整个文件的文件哈希到内存中

我正在使用tweetnacl生成sha512字符串和文件的哈希值。 对于字符串,它工作得很好,但我不知道如何使用文件。 函数的签名是 extern “C” int crypto_hash(u8 *out, const u8 *m, u64 n); 其中u8的类型为unsigned char,而u64的长度为unsigend。 对于字符串,a可以像这样使用它 string s(“Hello”); unsigned char h[64]; crypto_hash(h, (unsigned char *)s.c_str(), s.size()); 这适用于字符串和小文件,但如果我想为一个大文件创建一个哈希,它是不可行的并且用于大量内存。 我搜索一个逐字节读取文件的解决方案,并将其作为unsigend char指针传递给该函数。 有谁知道如何实现这一目标? PS抱歉英语不好。 pss我使用tweetnacl因为体积小而且我只需要散列函数。

将特殊purpoes-strings转换为Integers的方法

我需要一个Key-Value对的内存数据结构(400 MB的数据)。 我对键有以下约束: 键和值都是分别为256和1024的文本字符串。 任何键通常看起来像k1k2k3k4k5,每个k(i)本身是4-8字节的字符串。 一些k(i)可能存在或可能不存在于键中。 每个k(i)有6-8种可能性。 然而,k3和k4有256000种可能性。 可以使用prefix_key迭代DS。 DS应针对此操作进行优化。 该操作分配迭代器,即它迭代整个DS并返回与prefix_key匹配的键值列表(例如,“k1k2k3。*”,k(i)如上定义)。 每次迭代都迭代这个迭代器(列表)。 释放迭代器可以释放列表。 使用DS获取字符串键会使密钥比较过于昂贵。 因此排除了DS(Hash,B + Tree)的某些选项。 我的问题是我们如何创造性地将String键转换为整数键?解决方案需要具有以下属性: 对于关键模式“k1k2k3。*”,它应该对整数的上限和下限进行生成,以便基于这些边界,在DS中只查找少数条目。 我在解决这个问题的背景下问这个问题

C中的MD4实现 – 一致但错误的输出

我似乎无法让我的md4实现工作。 关于什么是错的任何想法? 另外,我不是在这个项目被分配到的class级。我只是为了踢。 我也宁愿你给我提示而不是直截了当的回答。 谢谢! 编辑:具体(我知道),我的输出与RFC1320提供的测试向量不匹配。 例如: From RFC — MD4 (“abc”) = a448017aaf21d8525fc10ae87aa6729d Mine — DIGEST: ed763b1deb753a9d8fc7e3f1a653a954 — 32 BYTES 但是,我从输出哈希值(32字节)中获取正确的大小 如果还有其他我需要澄清的内容,请发表评论! /** hThreat @ http://auburn.edu/~dac0007/blog/ “MD4 hashing algorithm — beginning project 1” **/ // References //http://tools.ietf.org/html/rfc1320 #include #include #include #include // define 3 auxiliary functions (Copied from RFC1320) #define F(x, y, z) (((x) […]

散列函数问题 – C.

我正在使用K&R书中提供的以下散列函数。 #define HASHSIZE 101 unsigned hash(char *s) { unsigned hashval; for (hashval = 0; *s != ‘\0’; s++) hashval = *s + 31 * hashval; return hashval % HASHSIZE; } 在我的项目中,我打开了更多警告(警告也被视为错误),上述代码将无法编译。 error: conversion to ‘unsigned int’ from ‘char’ may change the sign of the result 如果我对哈希值进行了签名,那么我将获得负哈希值。 我想知道如何解决这个问题。 有帮助吗?

哈希函数到矩阵

我有两个矩阵,我需要比较它们,但我不想比较位置,我认为这不是最好的方法。 我想到哈希函数,有谁知道如何计算矩阵的哈希值?

如何在Locality Sensitive Hashing(使用jaccard距离)中将向量哈希到桶中?

我正在实现一个近邻搜索应用程序,它将找到类似的文档。 到目前为止,我已经阅读了LSH相关材料的很大一部分(LSH背后的理论是某种令人困惑的,我还不能100%地对其进行比较)。 我的代码能够使用minhash函数计算签名矩阵(我接近结尾)。 我还在签名矩阵上应用了条带策略。 但是我无法理解如何将带中的签名向量(列)散列到桶中。 我的最后一个问题可能是最重要的问题,但我不得不问一些introduction问题: 问题1:哈希函数是否只将相同的向量映射到同一个桶? (假设我们有足够的水桶) 问题2:哈希函数是否应该将相似的向量映射到同一个桶? 如果是,那么这种相似性的程度/定义是什么,因为我不是在计算比较,而是在进行散列。 q3:根据上面的问题,我应该使用什么样的哈希表算法? 问题4:我认为我最弱的一点是我不知道如何生成一个哈希函数,它将向量作为输入并选择一个桶作为输出。 我可以根据q1和q2自己实现一个…有关为LSH bucketing生成哈希函数的任何建议吗?

c字符串比较与哈希比较

我需要将一个字符串与c中的多个其他常量字符串进行比较。 我很好奇哪个更快,散列我要比较的字符串并将其与所有其他常量字符串哈希进行比较,或者只是将字符串作为字符串进行比较。 先感谢您 谢谢你的答案,我将做很多比较。 任何人都可以给我一个好的,快速的,低资源密集型的算法吗? 我所知道的唯一哈希是MD5,我有一种过度杀戮的感觉。 我还想补充一点,字符串最大可能是20或30个字符,大多数是7左右。