散列图或搜索树?

时间:2017-06-25 13:39:35

标签: sorting data-structures hashmap time-complexity trie

问题如下:给定的是城市及其国家,人口和地理坐标的列表。您应该阅读此数据,保存并在以下类型的无限循环中回答:

请求:前缀(例如,免费)。

答案:所有以此前缀开头的州(“不区分大小写”) 及其相关数据(国家+人口+地理坐标)。 城市应按人口排序(人口最多)。

  • 哪种数据结构最适合所描述的问题?

第一部分:我的想法悬在Trie和Hashmap之间。虽然我更倾向于Trie,因为我正在处理前缀请求,而Trie基本上是根据 Wikipedia

“trie,也称为数字树,有时候是基数树或前缀树(因为它们可以通过前缀搜索),是一种搜索树 - 一种用于存储动态的有序树数据结构设置或关联数组,其中键通常是字符串“

除了存储和读取数据方面,Trie还具有优于Hash-maps的优势。

第二部分:当我们谈论时间复杂性时,按人口返回已排序的城市将会有点挑战。如果我正在思考正确的方向,我应该将键的值保存为列表,这将更容易只排序返回列表,所以我不需要保存它以保存一些时间。

如果我错了,请分享你的想法并纠正我。

1 个答案:

答案 0 :(得分:1)

有选择香草尝试和香草哈希图的缺点。通常,对于自动完成系统,trie的结构非常有用,因为您通常会搜索前缀,并且用户希望看到以他们刚刚输入的字符串开头的单词。

但是,有一种方法可以充分利用这两种数据结构,它被称为 Hash Trie (实现:http://www.sanfoundry.com/java-program-implement-hash-trie/)。因此,您实现此方法的方法是使用trie的结构,但最终节点是它引用的实际字符串。在python中,这是在实现trie时使用字典而不是列表来完成的。

对于问题的后半部分,列表将是您最好的选择,实质上是元组(人口,城市)的列表,并按人口排序并返回城市。关于它“更容易”排序,我不确定我是否同意这一点,简单是一个相关的术语,并且真的没有办法说它比它更容易,可能存储在树中然后返回预订遍历树。基本上,如果您使用基于比较的排序,它将不会比 nlog(n)更好。