哈希图或搜索树?
Hash-maps or search tree?
问题如下:给定的是城市及其国家、人口和地理坐标的列表。您应该读取此数据,保存它并在以下类型的无限循环中回答它:
请求:前缀(例如,免费)。
答案:所有以此前缀开头的州 ("case-insensitive")
及其相关数据(国家+人口+地理坐标)。
城市应该按人口排序(人口最多的在前)。
- 哪种数据结构最适合所描述的问题?
第一部分:我的思绪徘徊在Trie和Hashmap之间。虽然我更倾向于 Trie,因为我正在处理前缀请求,而 Trie 基本上是根据 Wikipedia :
"a trie, also called digital tree and sometimes radix tree or prefix tree (as they can be searched by prefixes), is a kind of search tree—an ordered tree data structure that is used to store a dynamic set or associative array where the keys are usually strings".
除了在存储和读取数据方面,Trie 比 Hash-maps 更有优势。
第二部分:当我们谈到时间时,按人口返回排序的城市会有点挑战Complexity.If我在思考正确的方向,我应该将键的值保存为列表,它仅对返回列表进行排序会更容易,因此我不必将其保存排序以节省一些时间。
如果我错了,请分享你的想法并纠正我。
选择 vanilla tries 和 vanilla hashmaps 有利有弊。一般来说,对于自动完成系统,trie 的结构非常有用,因为您通常要搜索前缀,而用户希望看到以他们刚刚输入的字符串开头的单词。
然而,有一种方法可以充分利用这两种数据结构,它被称为Hash Trie(实现:http://www.sanfoundry.com/java-program-implement-hash-trie/)。所以你实现它的方法是使用 trie 的结构,但最终节点是它引用的实际字符串。在 python 中,这是在实现 trie 时使用字典而不是列表来完成的。
对于问题的后半部分,列表将是您最好的选择,本质上是一个元组列表(人口、城市)并按人口和 return 城市排序。关于 "easier" 排序,我不确定我是否同意这一点,easy 是一个相关的术语,真的没有办法说它比将它存储在树中然后 [=23] 更容易=]ing 树的预序遍历。本质上,如果您使用基于比较的排序,它不会比 nlog (n).
更好
问题如下:给定的是城市及其国家、人口和地理坐标的列表。您应该读取此数据,保存它并在以下类型的无限循环中回答它:
请求:前缀(例如,免费)。
答案:所有以此前缀开头的州 ("case-insensitive") 及其相关数据(国家+人口+地理坐标)。 城市应该按人口排序(人口最多的在前)。
- 哪种数据结构最适合所描述的问题?
第一部分:我的思绪徘徊在Trie和Hashmap之间。虽然我更倾向于 Trie,因为我正在处理前缀请求,而 Trie 基本上是根据 Wikipedia :
"a trie, also called digital tree and sometimes radix tree or prefix tree (as they can be searched by prefixes), is a kind of search tree—an ordered tree data structure that is used to store a dynamic set or associative array where the keys are usually strings".
除了在存储和读取数据方面,Trie 比 Hash-maps 更有优势。
第二部分:当我们谈到时间时,按人口返回排序的城市会有点挑战Complexity.If我在思考正确的方向,我应该将键的值保存为列表,它仅对返回列表进行排序会更容易,因此我不必将其保存排序以节省一些时间。
如果我错了,请分享你的想法并纠正我。
选择 vanilla tries 和 vanilla hashmaps 有利有弊。一般来说,对于自动完成系统,trie 的结构非常有用,因为您通常要搜索前缀,而用户希望看到以他们刚刚输入的字符串开头的单词。
然而,有一种方法可以充分利用这两种数据结构,它被称为Hash Trie(实现:http://www.sanfoundry.com/java-program-implement-hash-trie/)。所以你实现它的方法是使用 trie 的结构,但最终节点是它引用的实际字符串。在 python 中,这是在实现 trie 时使用字典而不是列表来完成的。
对于问题的后半部分,列表将是您最好的选择,本质上是一个元组列表(人口、城市)并按人口和 return 城市排序。关于 "easier" 排序,我不确定我是否同意这一点,easy 是一个相关的术语,真的没有办法说它比将它存储在树中然后 [=23] 更容易=]ing 树的预序遍历。本质上,如果您使用基于比较的排序,它不会比 nlog (n).
更好