存储词频列表选择Trie还是HashMap?

2024-01-22

我有一个包含 100 万个英语单词的 txt 文件,其频率采用以下格式:

好 345667
坏 456777
...

我需要使用 Java 中的 HashMap 或 Trie 数据结构来存储它。稍后我需要从列表中查找单词而不进行其他操作。我的理解是,HashMap的查找比Trie慢,但是Trie会占用更多的内存,而且Trie的实现也很费力,而HashMap已经可以使用了。对于生产代码,您对哪种数据结构最适合这种情况有什么意见或建议吗?提前致谢。

此外,HashMap 允许“恒定时间”进行查找。它真的比英语单词的 Trie 慢吗?


我的理解是,HashMap的查找比Trie慢,但是Trie会占用更多内存

这是不正确的。假设有一个好的哈希函数,则 HashMap 中的查找将需要对主内存进行少量、恒定的随机访问,而不管表的大小或其键的长度。相比之下,特里结构需要访问主存储器来存储密钥中的每个字母。因此,trie 将导致更多的缓存未命中 - 并且缓存未命中将主导现代硬件上的整体查找成本。

如果键很长并且共享许多公共前缀,则 trie 可以节省内存。

trie 还支持前缀查询。

在您的情况下,键很短,并且您不需要前缀查询,因此您不会从 trie 中受益。

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

存储词频列表选择Trie还是HashMap? 的相关文章

  • 创建通用数组时出错

    public class TwoBridge implements Piece private HashSet
  • Mediaplayer 播放几次后停止播放

    我有一个按钮 按下它会播放一个随机声音剪辑 然后播放另一个声音剪辑 然后通过一个媒体播放器播放另一个声音剪辑 但是多次按下该按钮 15 20 次 后 所有音频都会停止 我在播放最后一个音频剪辑后释放媒体播放器 所以我不认为这是原因 有什么指
  • Java:将二维字符串数组打印为右对齐表格

    是什么best打印a的单元格的方法String 数组作为右对齐表 例如 输入 x xxx yyy y zz zz 应该产生输出 x xxx yyy y zz zz 这似乎是一个should能够完成使用java util Formatter
  • 参考接口创建对象

    引用变量可以声明为类类型或接口类型 如果变量声明为接口类型 则它可以引用实现该接口的任何类的任何对象 根据上面的说法我做了一个理解上的代码 正如上面所说声明为接口类型 它可以引用实现该接口的任何类的任何对象 但在我的代码中显示display
  • python 中的子进程调用以使用 JAVA_OPTS 调用 java jar 文件

    示例代码 import subprocess subprocess call java jar temp jar 如何在上面的命令中指定JAVA OPTS 当我使用上述命令时 我收到 java lang OutOfMemoryError 无
  • Spark SQL 失败,因为“常量池已超过 JVM 限制 0xFFFF”

    我在 EMR 4 6 0 Spark 1 6 1 上运行此代码 val sqlContext SQLContext getOrCreate sc val inputRDD sqlContext read json input try inp
  • Java:从 ScriptEngine javascript 返回一个对象

    我正在尝试使用 Java 来评估 javascript脚本引擎 https docs oracle com javase 7 docs api javax script ScriptEngine html班级 这是我正在尝试做的事情的一个简
  • 如何在 PuTTY 中保存并运行 Java 文件?

    我是 AWS 亚马逊网络服务 的新手 所以这可能是一个基本问题 我在 AWS 上创建了一个 EC2 实例 我有一台 Windows 计算机 因此我使用 PUTTY 来连接 Linux 实例 连接到我的 EC2 实例后 我使用以下命令编写 J
  • SwingUtilities.invokeLater

    我的问题与SwingUtilities invokeLater 我应该什么时候使用它 每次需要更新 GUI 组件时都必须使用吗 它到底有什么作用 是否有替代方案 因为它听起来不直观并且添加了看似不必要的代码 Do I have to use
  • Netty Nio java 中的通信

    我想在 Netty nio 中创建一个具有两个客户端和一个服务器的通信系统 更具体地说 首先 我希望当两个客户端与服务器连接时从服务器发送消息 然后能够在两个客户端之间交换数据 我正在使用本示例提供的代码 https github com
  • Java MYSQL/JDBC 查询从缓存的连接返回过时的数据

    我一直在 Stackoverflow 中寻找答案 但似乎找不到不涉及 Hibernate 或其他数据库包装器的答案 我直接通过 Tomcat 6 Java EE 应用程序中的 MYSQL 5 18 JDBC 驱动程序使用 JDBC 我正在缓
  • 如何根据从 jtextfield 和组合框接收的值将数据行添加到 Jtable

    我有一个JFrame表格有JTextFields JCombobox等等 我能够将这些值接收到变量 现在我想将接收到的数据添加到JTable当用户单击 添加 或类似的操作时在新行中 我创造了JTable使用 net beans 的问题是将这
  • Java/Hibernate - 异常:内部连接池已达到其最大大小,当前没有可用的连接

    我第一次在大学项目中使用 Hibernate 而且我还是个新手 我想我遵循了我的教授和我阅读的一些教程给出的所有指示 但我不断收到标题中的异常 Exception in thread main org hibernate Hibernate
  • 从 Java 应用程序读取的文件是否会调用系统调用?

    我的理解是 请求文件系统路径 例如 aFile 的用户应用程序将调用文件系统并获取所请求文件的虚拟地址 然后应用程序将尝试以该地址作为参数 即作为 CPU 指令 进行读 写操作 执行读取命令时 内存管理单元会将该地址转换为物理地址 并查看页
  • 图标和导航视图之间的左边距

    我必须在图标和图标之间添加左边距NavigationView 如下图中箭头所示 我知道根据谷歌规范 这个边距必须有16dp但我需要改变它 我努力了
  • Spring Data MongoDB 和批量更新

    我正在使用 Spring Data MongoDB 并且想要执行批量更新 就像此处描述的那样 http docs mongodb org manual reference method Bulk find update Bulk find
  • java - 简单计算在多线程中比在单线程中花费更长的时间

    我试图了解如何利用多线程 我写了一个简单的程序来增加i 比方说 使用两种方式 400 000 次 单线程方式 0 到 400 000 和多线程方式 在我的例子中 4 次 0 到 100 000 线程数等于Runtime getRuntime
  • Bipush 在 JVM 中如何工作?

    我知道 iload 接受整数 1 到 5 但是如何使用 bipush 指令扩展到更高的数字 特定整数如何与字节码一起存储 有几种不同的指令可用于推送整数常量 最小的是iconst 指令 这些只是一个字节 因为该值是在操作码本身中编码的 ic
  • 在 Spark MLlib 上使用 Java 中的 Breeze

    在尝试从Java使用MLlib时 使用微风矩阵运算的正确方法是什么 例如scala 中的乘法很简单 matrix vector 相应的功能在Java中是如何表达的 有一些方法 例如 colon times 可以通过正确的方式调用 breez
  • Selenium Webdriver - 单击多个下拉菜单时出现陈旧元素异常,而 HTML DOM 不会更改

    我尝试自动化一个场景 其中条件是我必须从下拉列表中选择一个选项 然后它旁边有另一个下拉列表 我必须单击下一个下拉列表中的一个选项才能启用按钮 我尝试使用代码 但它仅单击第一个选项 并显示错误为过时的元素引用 元素未附加到页面文档 请帮忙 如

随机推荐

  • 更改实时 MySQL 数据库上的字符集

    我目前在 MySQL 5 1 x 数据库中有一堆使用 latin1 字符集的表 问题是 我们最近有一群用户尝试使用 UTF 8 编码输入文本 这似乎破坏了一切 盲目更新表的字符集是否安全 对于这种情况 有哪些最佳实践 除了显然备份所有内容之
  • 使用 local.xml 从顶部菜单中删除链接

    有谁知道如何使用 local xml 从顶部菜单中删除链接 默认的 checkout xml 中有
  • 为什么Rails Active Record迁移在mysql的varchar列上生成COLLATE utf8_bin

    我在 Rails 版本 3 0 10 上运行 jruby 我发现活动记录迁移以某种方式在所有 varchar 列上生成 COLLATE utf8 bin 当我表演创建表用户时 CREATE TABLE users id int 11 not
  • ElasticSearch 聚合:每个聚合排除一个过滤器

    我想过滤掉字段 A 等于 a 的文档 并且我想同时对字段 A 进行分面 当然不包括之前的过滤器 我知道您可以将过滤器放在查询 外部 以便在不应用该过滤器的情况下获取方面 例如 弹性搜索 query match all filter term
  • Android如何从Geocoder返回的地址获取街道名称

    我在用着Geocoder以相反的方式从给定的纬度和经度获取地址 你知道如何从Address 只有街道名称 Geocoder geocoder new Geocoder AutoFinderMapActivity this try List
  • SwiftUI 更新导航栏标题颜色

    如何在 SwiftUI 中更改导航栏标题颜色 NavigationView List ForEach 0 lt 15 item in HStack Text Apple font headline fontWeight medium col
  • PHP 对象属性的动态名称

    而不是使用 object gt my property 我想做这样的事情 object gt my variable 像这样使用大括号 object gt my variable
  • 从 CLI 同时执行多个 php 脚本

    我有 55 个 php 文件 我想从命令行同时运行它们 现在 我使用以下代码在多个 CLI 窗口中运行它们 php Script1 php 我希望能够调用一个 php 文件来同时执行所有 55 个 php 文件 我一直在阅读有关如何使命令行
  • 如何计算谷歌电子表格中逗号分隔数字的数量?

    我有一个有值的单元格 1 2 3 4 我需要一个在另一个单元格中返回 4 的公式 但是这个 Google 电子表格看起来非常复杂 我还需要修剪 因为数字之间可能有空格 一种选择是使用以下公式 COUNT SPLIT A1 这是一个例子
  • 为什么在测试 PSCustomObject 的属性时操作数的顺序很重要

    两种情况我都尝试过 psCustomObject x eq null and null eq psCustomObject x在 if 语句中 只有后者通过了 if 为什么会这样 这似乎不合逻辑 我的具体用例是一个包含多个环境配置的 jso
  • 这个哈夫曼表是如何创建的?

    我有一张表显示事件发生的概率 我对第 1 部分很满意 但第 2 部分我不太喜欢 我正在努力弄清楚如何 二进制数是在第 2 部分中导出的 我知道 0 被分配给最大的概率 我们从那里开始工作 但是我们如何计算出下一组二进制数是什么 数字周围的圆
  • 无法通过反应中动态 div 元素的索引号从数组中删除特定元素?

    我无法从任何动态 div 中按索引号删除数组的特定元素 const useState React function Check var Children setChildren useState function RemArr docs c
  • SQLite 的 ContentObserver?

    我一直在研究如何在 ListView 中显示数据库中的数据 同时跟踪数据库中的更改 假设我有一个聊天应用程序 它显示我所属的所有聊天室的列表视图 适配器的查询是SELECT FROM CHAT ROOM ORDER BY UPTDATE T
  • Airflow为每个DAG添加一个UI按钮

    默认情况下 每个 DAG 有一堆按钮 Trigger Dag Delete Dag等 在 UI 的主 管理 视图中 我一直在尝试添加一个像上面描述的那样的按钮 每次单击它时它都会发送一个 Http 请求 我已经成功使用这些插件 https
  • 通过值查找映射中的元素

    我正在创建一个HandleManager其目的是简单地映射Handles 这是一个typedef of long long int to strings 目的是让使用 a 的对象Handle也可以通过以下方式识别string如果它可以帮助用
  • 有没有利用 jQuery 的 JavaScript WYSIWYG?

    我看过TinyMCE http tinymce moxiecode com FCK编辑器 http www fckeditor net YUI 富文本编辑器 http developer yahoo com yui editor NicEd
  • Python底图模块无法导入

    我在 python 中导入 mpl toolkits 的底图模块时遇到麻烦 这是从模块目录运行 test py 脚本时得到的结果 usr lib python2 7 dist packages mpl toolkits basemap py
  • 对话框大小与背景图像不匹配

    我正在使用 Android SDK 制作游戏 一路上 我需要像任何其他游戏一样显示弹出窗口 对话框 用户可以升级或其他什么 我遇到的问题是对话框的大小 我正在使用RelativeLayout 并使用 wrap content 将背景设置为图
  • 将类成员复制到其他类中 - eclipse

    当您需要将某些类功能移动到另一个类中时 可以通过通过引用某些公共变量 Ctrl Shift G 搜索相应的方法 然后使用 Eclipse 的重构功能 Move 来轻松完成 该功能允许移动选定的方法进入其他班级 但也可能发生您需要复制方法的情
  • 存储词频列表选择Trie还是HashMap?

    我有一个包含 100 万个英语单词的 txt 文件 其频率采用以下格式 好 345667坏 456777 我需要使用 Java 中的 HashMap 或 Trie 数据结构来存储它 稍后我需要从列表中查找单词而不进行其他操作 我的理解是 H