Java 如何以优化的方式发现一个字是否存在于一个非常大的文件中?

Java 如何以优化的方式发现一个字是否存在于一个非常大的文件中?,java,string,search,random,Java,String,Search,Random,游戏是这样的: 播放器在[0..10]中输入许多元音。 我们生成10个输入元音辅音,最后显示10个无序字母。 然后,玩家尝试用给定的字母组成尽可能长的单词 问题是: 我们有一本很重要的字典要查,看看这个词是否正确 最好的搜索方式是什么? 我最好的两个想法是: 根据存储在不同文件中的单词中元音的数量,将单词分隔在不同的文件中。 使用拖缆。使用返回单词中元音数的函数的filter方法。 就时间复杂度而言,两者似乎都非常昂贵,我不知道我是否正确使用了这个术语 我希望我说得够清楚。我假设您正在使用jav

游戏是这样的: 播放器在[0..10]中输入许多元音。 我们生成10个输入元音辅音,最后显示10个无序字母。 然后,玩家尝试用给定的字母组成尽可能长的单词

问题是: 我们有一本很重要的字典要查,看看这个词是否正确

最好的搜索方式是什么? 我最好的两个想法是:

根据存储在不同文件中的单词中元音的数量,将单词分隔在不同的文件中。 使用拖缆。使用返回单词中元音数的函数的filter方法。 就时间复杂度而言,两者似乎都非常昂贵,我不知道我是否正确使用了这个术语


我希望我说得够清楚。

我假设您正在使用java。如果这是真的,您可以将所有单词存储在哈希集中

设置存储桶中的数据。所以,当您搜索一个单词时,jvm将首先找到一个可能包含这个单词的bucket,然后查看该bucket以确认该单词是否存在

此方法类似于您提到的选项1。所有的复杂性都对你隐藏了。您只需要调用contains方法。jvm在幕后为您完成所有这些

    HashSet<String> dictionary = new HashSet<String>();

    //add words to dictionary
    dictionary.add("apple");

    //Returns true if this set contains the specified element. 
    dictionary.contains("apple");

你的头衔太大,不具体,最好另找一个;你可以从HashSet开始多大?有多少个单词?@Ivan是对的,你可以把它们放在一个哈希集中,在固定时间内查找它们。即使是最大的全复数和变位的英语词典也很难在记忆中找到。如果您的数据集大于1GB+且频繁查找,则标准技术是使用Bloom过滤器进行粗筛选,并使用预索引文件(例如使用sqllite)。@Ivan如何使用文件中的单词填充哈希集?有不超过10个字母的条件吗?