比较单个列表中的字符串的最有效方法

Most efficient way of comparing Strings in a single list

提问人:Alisa D 提问时间:1/10/2022 最后编辑:Alisa D 更新时间:1/10/2022 访问量:156

问:

因此,我有一个包含超过 500 万个哈希值的文本文件,并被要求找到一对具有最常见字符的哈希值。字符必须在同一索引处匹配。

例如:

哈希值 1 = B79F56435...

哈希值 2 = B79123456...

结果 = 4 个匹配字符

*每个哈希总共包含 64 个十六进制字符

我开始用 Python 解决这个问题,但显然花了很长时间,所以我转向了 java,这大大加快了这个过程。这是我目前的代码:

我将哈希的文本文件导入到字符串的 ArrayList 中:

ArrayList<String> hashes = new ArrayList<>(); 

我比较 ArrayList 中每个 String 的主要方法

String winner1 = "", winner2 = "";
int count = 0, n = hashes.size();

for(int i = 0; i < n; i++) 
{
    s1 = hashes.get(i);             
    for(int j = i+1; j < n; j++) 
    {
        s2 = hashes.get(j);
        int temp = countComparisons(s1, s2);
        if(temp > count) 
        {
            count = temp;
            winner1 = s1; winner2 = s2;
        }
     }
}

这是我计算哈希值之间比较的方法:

public static int countComparisons(String s1, String s2)
{
    int x = 0;
    for(int i = 0; i < 64; i++) 
    {
        if(s1.charAt(i) == s2.charAt(i))
            x++;
    }       
    return x;
}

现在,将这些哈希值单独相互比较将等于 12 万亿个组合,因此显然需要很长时间,但我只是想看看是否有人可以对这段代码进行任何改进。

我完全愿意接受任何关于如何改进的建议。

它也不一定非得是 java 语言,任何关于使用最佳数据结构的建议都会很棒。我只是选择了 ArrayList,因为它很容易从文本文件导入。

我发现很难找到针对此特定情况的比较算法,因此,如果有人向我指出与此相关的任何内容,那也将非常有用。

谢谢

java 算法 搜索 比较 字符串比较

评论

0赞 Alisa D 1/10/2022
谢谢!我现在将编辑它,应该已经指定了。
0赞 greybeard 1/10/2022
看看这是否回答了您的问题

答:

0赞 Azadi Yazdani 1/10/2022 #1

您必须以多胎面方法进行比较,以减少时间。为此,请使用 ExecutorService。我想这个话题对你有帮助:

比较两个字符串的多线程循环

评论

0赞 Alisa D 1/10/2022
谢谢你,我是编程新手,从未听说过 ExecutorService,所以我会检查一下!