Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据结构设计_Java_Algorithm_Data Structures_Frequency - Fatal编程技术网

Java 数据结构设计

Java 数据结构设计,java,algorithm,data-structures,frequency,Java,Algorithm,Data Structures,Frequency,下面是我做过几次的场景 计算段落中单词的频率 我创建一张地图并存储计数。所以我的地图包含 <Today, 10> <the, 123> <hello,1> <dont, 20> 现在,另一种情况出现了,识别计数为100或30的单词 我创建一个列表地图或 <10, [today,...]> <123,[the,...]> 或 基本上我有两张地图来处理所有的工作。。 这很好,任何一个更新都必须更

下面是我做过几次的场景

计算段落中单词的频率

我创建一张地图并存储计数。所以我的地图包含

  <Today, 10>
  <the, 123>
  <hello,1>
  <dont, 20>

现在,另一种情况出现了,识别计数为100或30的单词

我创建一个列表地图或

<10, [today,...]>
   <123,[the,...]>

或 基本上我有两张地图来处理所有的工作。。 这很好,任何一个更新都必须更新另一个

检索和插入时间几乎为O(1)。但这并不是内存效率高

还有什么其他方法可以使用?

一旦有了(单词、频率)对,就可以创建它们的数组,按频率排序,并进行二进制搜索。这将减慢对O(logn)的访问速度,但如果这是限制的话,您可以使用大约一半的内存

除此之外,我看不到比您已经在做的事情更好的了。

一旦您有了(单词、频率)对,您就可以创建它们的数组,按频率排序,并进行二进制搜索。这将减慢对O(logn)的访问速度,但如果这是限制的话,您可以使用大约一半的内存


除此之外,我看不到比您已经在做的事情更好的东西。

双向地图是这种方法的数据结构:我也建议使用双向地图。@Andreas\u D-不一样。双向映射要求值和键都是唯一的。例如,当两个词的频率相同时,就不能使用它。泰德,是的,你是对的。BiMaps无法完成此任务。这真的是一个大内存问题吗?毕竟,
String
s是不可变的和可重用的,你不必因为有第二张地图就携带每个单词的第二份副本,不是吗?或者你担心第二个映射结构本身的内存开销吗?双向映射是这种方法的数据结构:我也建议使用双向映射。@Andreas_D-不是同一回事。双向映射要求值和键都是唯一的。例如,当两个词的频率相同时,就不能使用它。泰德,是的,你是对的。BiMaps无法完成此任务。这真的是一个大内存问题吗?毕竟,
String
s是不可变的和可重用的,你不必因为有第二张地图就携带每个单词的第二份副本,不是吗?还是担心第二个映射结构本身的内存开销?