Tag:

在Rabin-Karp字符串搜索算法中是否使用了滚动哈希函数的任何工作实现?

我正在寻找使用滚动哈希函数,因此我可以使用非常大的字符串的n-gram哈希值。 例如: “stackoverflow”,分解成5克将是: “stack”,“tacko”,“ackov”,“ckove”,“kover”,“overf”,“verfl”,“erflo”,“rflow” 这对于滚动哈希函数是理想的,因为在我计算第一个n-gram哈希之后,以下的哈希计算相对便宜,因为我只需要删除第一个哈希的第一个字母并添加第二个哈希的新的最后一个字母。 我知道通常这个哈希函数生成为: H = c 1 a k – 1 + c 2 a k – 2 + c 3 a k – 3 + … + c k a 0其中a是常数,c1,…,ck是输入字符。 如果您在Rabin-Karp字符串搜索算法上遵循此链接,它会声明“a”通常是一些大素数。 我希望我的哈希值存储在32位整数中,因此素数的大小应该是“a”,这样我就不会溢出整数? 在我可以使用的某个地方是否存在此哈希函数的现有实现? 这是我创建的一个实现: public class hash2 { public int prime = 101; public int hash(String text) { int hash […]

Java Arrays.hashcode()的hashcode实现是否均匀分布

我查看了Arrays.hashCode(char[] c)的源代码 我并不是很确认它适用的算法在所有情况下都能很好地工作。 public static int hashCode(int a[]) { if (a == null) return 0; int result = 1; for (int element : a) result = 31 * result + element; return result; } 这里实现的散列函数是否真正均匀地分配了所有输入数组。为什么我们在这里使用prime 31。

坐标算法 – 围绕中心旋转

通过查看此图像,我认为您将很好地理解我的问题: (图片已删除 – url不再有效,现在返回广告) 所以基本上我想要一个函数,它将一个对象作为参数,并根据我之前添加的对象数量为该对象提供正确的坐标。 假设我将所有这些对象添加到数组中: objectArray[] 每次我添加一个新对象:objectArray.add(object) object.x和object.y坐标将根据某种算法设置: object.x = ? object.y = ? (我在Java工作) 谢谢你的帮助。

在许多GetHashCode实现中,为什么在xoring之前乘以素数?

我知道在xoring之前乘以大量的数字应该有助于分配错误的操作数,但为什么乘数应该是素数呢? 有关: 散列函数为什么要使用素数模数? 关闭,但不是很重复: 为什么String中的Java hashCode()使用31作为乘数?

用螺旋写一个字符串

我最近参加了一家公司赞助的编码竞赛,有一个我不理解的问题,问题是什么。 这是一个问题: 字符串“paypal是更快,更安全的汇款方式”是从左上角开始以正方形螺旋形图案写在正方形内:(您可能希望以固定字体显示此图案以获得更好的易读性)。 PAYPAL FERWAI AMONYS SDYETT RNESOH ETSAFE 然后逐行阅读:PAYPALFERWAIAMONYSSDYETTRNESOHETSAFE 编写将采用字符串的代码,计算将包含它的最小平方并返回转换后的字符串: 字符串转换(String text); 例: convert(“paypalisthefastersaferwaytosendmoney”) should return “paypalferwaiamonyssdyettrnesohetsafe” 你了解我们如何解决这个问题吗?

与顺序无关的哈希算法

我目前正在为自定义编程语言开发一个集合库。 我已经有了几种数据类型(Collection,List,Map,Set)和它们的实现(可变和不可变),但到目前为止我所缺少的是hashCode和equals 。 虽然列表没有问题,因为它们是有序集合,但它们对集合和地图起着特殊的作用。 如果两个集合具有相同的大小和相同的元素,则它们被认为是相等的,并且集合维护它们的顺序不应该在它们的相等性上有所不同。 由于equals-hashCode-contract, hashCode实现也必须反映这种行为,这意味着具有相同元素但排序不同的两个集应该具有相同的哈希码。 (这同样适用于地图,这在技术上是一组键值对) 示例 (伪代码): let set1: Set = [ “a”, “b”, “c” ] let set2: Set = [ “b”, “c”, “a” ] set1 == set2 // should return true set1.hashCode == set2.hashCode // should also return true 我如何实现一个相当好的哈希算法,上面例子中的hashCode s返回相同的值?

在hashmap或hashtable中重新散列进程

当大小超过最大阈值时,如何在散列映射或散列表中完成重新散列过程? 是否所有对都被复制到一个新的桶arrays? 编辑: 在重新散列之后,同一个桶(在链表中)中的元素会发生什么? 我的意思是他们在重拍之后会留在同一个桶里吗?

计算梯子上可能的路径数

我似乎无法想出一个算法来解决以下问题,我尝试使用一系列for循环,但它变得太复杂了: 梯子有n台阶,人们可以使用1步或2步的任意组合爬上梯子。有多少可能的方式爬梯子? 因此,例如,如果梯子有3个步骤 ,这些将是可能的路径: 1-1-1 2-1 1-2 并为4个步骤 1-1-1-1 2-1-1 1-2-1 1-1-2 2-2 任何关于如何做到这一点的见解将不胜感激。 另外,我在Java工作。 编辑:我确实会使用小n值,但知道如何管理更大的值肯定会很好。