Вы не сможете добиться более высокой производительности, чем O (n), со стандартной картой - просто используйте наивный подход для их последовательного тестирования.
Однако есть гораздо более эффективные способы сделать это. Один из них называется bk-tree . По сути, вы строите дерево с n путями, ребра которого определяются расстоянием Левенштейна между узлами. Затем вы можете использовать неравенство треугольника для массового сокращения узлов, которые вы должны искать. На короткие расстояния это очень эффективно. Вот статья в блоге , которую я написал некоторое время назад, с подробным описанием. Приложив немного больше работы, вы можете запросить его для ближайшего соседа, а не повторять запросы с расстояния 1, 2 и т. Д.