所以我有一個包含超過 500 萬個散列的文本檔案,并被要求找到一對具有最常見字符的散列。字符必須在同一索引處匹配。
例如:
哈希 1 = B79 F56 4 35...
哈希 2 = B79 123 4 56...
結果 = 4 個匹配字符
*每個哈希總共包含 64 個十六進制字符
我開始用 Python 解決這個問題,但顯然花了很長時間,所以我轉向了 java,這大大加快了這個程序。這是我當前的代碼:
我將散列的文本檔案匯入到字串的 ArrayList 中:
ArrayList<String> hashes = new ArrayList<>();
我比較 ArrayList 中每個字串的主要方法
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,是因為它很容易從文本檔案中匯入。
我發現很難找到這種特定情況的比較演算法,所以如果有人指出與此相關的任何事情,這也將非常有用。
謝謝
uj5u.com熱心網友回復:
您必須以多胎面方法進行比較以減少時間。為此使用 ExecutorService。我想這個主題可以幫助你:
比較兩個字串的多執行緒回圈
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/409388.html
標籤:
