Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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 - Fatal编程技术网

Java 恒定时间排序的多重映射数据结构

Java 恒定时间排序的多重映射数据结构,java,algorithm,data-structures,Java,Algorithm,Data Structures,让我说这是加州大学伯克利分校的一个硬件项目,所以如果你能给我一个提示而不是解决方案,那就太好了 问题是创建一个名为“YearlyRecord”的数据结构,该结构将一个单词映射到它在ngram文件中遇到的次数。以下是限制条件 获取计数必须为O(1) 获取映射的数量必须为O(1) “put”必须为平均值O(对数n) 获得“等级”必须是O(1) 计数,它以递增的顺序提供所有计数的数据结构 words,它按计数顺序提供所有单词的数据结构 注意:“排名”是一个函数,它接受一个单词并告诉我它的排名(例如

让我说这是加州大学伯克利分校的一个硬件项目,所以如果你能给我一个提示而不是解决方案,那就太好了

问题是创建一个名为“YearlyRecord”的数据结构,该结构将一个单词映射到它在ngram文件中遇到的次数。以下是限制条件

  • 获取计数必须为O(1)
  • 获取映射的数量必须为O(1)
  • “put”必须为平均值O(对数n)
  • 获得“等级”必须是O(1)
  • 计数,它以递增的顺序提供所有计数的数据结构
  • words,它按计数顺序提供所有单词的数据结构
注意:“排名”是一个函数,它接受一个单词并告诉我它的排名(例如,
1
2
3
4
),这是基于它的出现次数

到目前为止,我的解决方案是:

  • Hashmap(word->count)提供了O(1)getCount操作和 O(1)尺寸操作
  • 创建一个私有的内部类,该类实现基于hashmap中出现次数进行比较的Comparator。然后使用 这个比较器作为单词树集的输入。这提供了 “单词”集合,我们可以在O(1)时间内返回
  • 再做一个计数树集。这将按递增顺序提供计数的O(1)返回
  • 这就是我被困的地方。很明显,排名也应该是一张地图。我在树集中有按等级递增顺序排列的单词,但没有要映射的索引

我看不到自己从中得到任何东西。“words”和“counts”得到整个集合,即O(1),因为我只返回整个集合。就O(lgn)“put”而言,这完全没问题,我实际上受到了YearlyRecordOK上O(lgn)“put”的约束,我想我明白你的意思了。但实际上,您并没有受到
计数
单词
性能的限制,是吗?不,唯一的限制是计数、大小和等级。至少是明确的。使“counts”和“words”保持不变是我的倡议。作为提醒,单词计数的检索是通过hashmapYes完成的,但是当您返回此类数据结构时,您应该返回内部结构的副本,或者使用引用的人可以更改它,然后您下次将给出一个不好的数据结构。