在 O(log n) <= 速度 < O(n) 中双向搜索字典的算法



我正在尝试实现一个(语言1 - 语言2(字典。 我想在两个方向上制作一个速度比 O(n( 快的搜索算法

例如,如果(你好,hola(是一对,

SEARCH_SPANISH_BY_ENGLISH(你好(="hola",并且

SEARCH_ENGLISH_BY_SPANISH (hola( = "hello">

如果您对算法有想法,您能告诉我如何设置字典并实现搜索算法吗?似乎我必须使用分而治之,但我不确定如何。谢谢。

字典的一面应该是单数的,这意味着我不能同时构建英语 - 西班牙语和西班牙语 - 英语词典。

您可以有两个字典,因为搜索时间将保持不变。但是,如果您仍然希望拥有双向字典,那么Jon Skeet的版本在这里:

获取通用词典的值键?

任何平衡树、排序数组或哈希表数据结构都会在搜索时为您提供比O(n)更好的结果。

对于双向性,您只能有两个数据结构,一种用于英语-西班牙语,另一种用于西班牙语-英语。这并不一定意味着两个完整的词典,只是你需要一个搜索索引,其中包含任何方向的描述。

但是,由于您似乎具有一对一的单词映射,因此您只需将一个字典维护为持久词典,并在运行时构建反向词典。

最新更新