- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,我有一个项目需要我有一个动态哈希表来计算文件中单词的频率。我必须使用 java,但是,除了标准数组之外,我们根本不允许使用任何内置数据类型或内置类。此外,我不允许在互联网上使用任何已知速度很快的散列函数。我必须制作自己的哈希函数。最后,我的讲师还希望我的表从大小“1”开始,每次添加新键时大小加倍。
我的第一个想法是对组成单词的字母的 ASCII 值求和,然后用它来制作哈希函数,但具有相同字母的不同单词将等于相同的值。
我该如何开始? ASCII 的想法是否走在正确的轨道上?
最佳答案
哈希表通常值和哈希之间的一对一映射。哈希表预计会发生冲突。也就是说,散列函数的域应该大于范围(即散列值)。然而,一般的想法是你想出一个哈希函数,其中碰撞的概率非常小。如果您的散列函数是统一的,即,如果您将其设计为每个可能的散列值具有相同的生成概率,那么您可以通过这种方式最大程度地减少冲突。
发生碰撞并不是世界末日。这只是意味着您必须搜索该散列的值列表。如果你的哈希函数很好,你的整体查找性能应该仍然是 O(1)。
生成哈希函数是一个独立的主题,没有唯一的答案。但是,您可以从处理字符串中字符的按位表示,并依次对它们执行某种卷积运算(旋转、移位、异或)开始,这是一个不错的起点。您可以根据一些初始种子值以某种方式执行这些操作,然后使用散列第一步的输出作为下一步的种子。通过这种方式,您最终可以放大卷积的效果。
例如,假设您得到字符 A
,十六进制为 41
,二进制为 0100 0001
。您可以指定每个位来表示某种操作(可能位 0 为 0 时为 ROR,为 1 时为 ROL;位 1 为 0 时为 OR,为 1 时为 XOR,等等) .您甚至可以根据值本身决定要进行多少卷积。例如,您可以说低半字节指定您将向右旋转多少,而高半字节指定您将向左旋转多少。然后,一旦您获得了最终值,您将使用它作为下一个字符的种子。这些只是一些想法。发挥你的想象力,看看你会得到什么!
关于java - 词频哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027522/
我在 Eclipse 中创建了一个 Java 程序。该程序计算每个单词的频率。例如,如果用户输入“I went to the shop”,程序将产生输出“1 1 1 2”,即 1 个字长 1 ('I'
我在工作中只有 R 可用,而且我以前用 Python 做过。我需要获取 CSV 文件中每组事件的计数。我在 Python 中进行了情绪分析,我在提供的表格中搜索了一本 Python 字典,其中包含每个
我想一个字一个字地读,然后将哪个字与我的结构数组中的字进行比较。如果我没有,我想在第一个空位添加。 #include #include #include #include using names
我想计算已转换为标记的文本文件中特定单词前后三个单词的频率。 from nltk.tokenize import sent_tokenize from nltk.tokenize import wor
我需要编写一个程序来计算文本中每个单词的频率,此外我需要能够返回 n 个最常用单词的列表(如果更多单词具有相同的频率(它们按字母顺序排序)。还有一个未计算在内的单词列表(停用词)。 停用词使用什么结构
我对 sklearn 的 TfidfVectorizer 在计算每个文档中单词的频率时有一个疑问。 我看到的示例代码是: >>> from sklearn.feature_extraction.tex
我是一名优秀的程序员,十分优秀!