我只想说这是加州大学伯克利分校的一个硬件项目,所以如果你能给我一个提示而不是解决方案,那就太好了。
问题是创建一个名为“YearlyRecord”的数据结构,它将单词映射到ngram文件中遇到的次数。以下是限制。
- 获取计数必须是 O(1)
- 获取映射数必须为 O(1)
- “put”必须平均 O(log n)
- 获得“等级”必须是 O(1)
- 计数,它按递增顺序提供所有计数的数据结构
- 单词,按计数顺序提供所有单词的数据结构
注意:“rank”是一个接受单词并告诉我其排名的函数(例如1
,2
,3
,4
),它基于关于我们拥有它的次数。
到目前为止我的解决方案:
- Hashmap(word - > count)提供 O(1) getCount操作和
O(1)尺寸操作
- 创建一个实现Comparator的私有内部类,它根据hashmap中出现的次数进行比较。然后用
这个比较器作为TreeSet的输入。这提供了
“words”集合,我们可以在 O(1)时间返回。
- 制作计数的另一个TreeSet。这提供了 O(1)按递增顺序返回的计数。
- 排名:这是我被困的地方。很明显,等级也应该是地图。我在TreeSet中的单词按等级递增顺序,但没有要映射到的索引。