1

我想做一个超快速的地理编码查找,返回输入城镇、城市或国家的坐标。我的知识是基本的,但据我所知,用 C 编写它是一个好的开始。我认为拥有这样的树结构是有意义的:

  • 英国
    • 肯特
    • 奥尔平顿
    • 查塔姆
    • 罗切斯特
    • 多佛
    • 伊登布里奇
  • 威尔特郡
    • 斯温顿
    • 马姆斯伯里

在我的文件/数据库中,我将拥有坐标和城镇/城市名称。如果给我的程序命名为“Kent”,我想要一个可以以最快的方式返回与“Kent”相关的坐标的程序

出于性能原因,我应该将数据存储在二进制文件还是 SQL 数据库中?搜索这些数据的最佳方法是什么?也许二叉树搜索?数据应该如何存储?也许?

4

3 回答 3

4

这里有一点建议,但仅此而已:

如果您想按名称或名称前缀查找地点,如您所愿,那么您将不明智地设置一个数据结构,按照您的建议将数据存储在国家、地区、城镇的层次结构中你可能会。如果您有一个操作主导数据结构的使用,那么您通常最好选择适合该操作的数据结构。

在这种情况下,按字母顺序排列的地点列表将更适合您的查询。对于不在最顶层的每个地方,您都希望为其“父级”的名称添加某种引用。如果您有一个按字母顺序排列的地点列表,您可能还需要考虑一个索引,也许它直接指向列表中以字母表中的每个字母开头的第一个位置。

当您描述您的问题时,它似乎与在字典中存储单词有更多共同点(我的意思是您查找单词而不是任何特定编程语言中的任何特定集合数据类型名称)而不是大多数以地理编码为幌子的东西。

我的猜测是,一个包含世界上所有人口超过 1000 的城镇、城市、地区和国家(及其坐标)的名称的地名词典可以存储在一个非常简单的数据结构中(基本上是一个列表)带有一个或两个索引,用于快速定位第一个 A 地名、第一个 B 等等。只需稍加压缩,您就可以将其保存在大多数现代台式电脑的内存中。

于 2012-07-30T13:39:47.433 回答
1

You should not worry about how the information is stored, except not to duplicate data.

You should create one or more indices for the data. The indicies are associative arrays / maps data structures that contain a key (the item you want to search) and a value (such as the record and other information associated with the key). This will enable you with fast lookups without altering your data for each type of search.

On the other hand, your case is an excellent fit for a data base. I suggest you let the database manager your data (such as efficient lookups). After all, that is what they live for.

See also: At what point is it worth using a database?

于 2012-07-30T23:38:18.557 回答
1

我认为我能给出的最好建议是使用任何你熟悉的语言来获得你想要的结果。一旦你的代码工作,就担心性能。然后,您可以一次将非常具体的功能片段翻译成 C 或 C++,直到获得您想要的结果。

于 2012-07-30T13:37:31.413 回答