Tôi có một kho văn bản 900.000 chuỗi. Chúng có độ dài khác nhau, nhưng có số lượng ký tự trung bình khoảng 4.500. Tôi cần phải tìm cách hiệu quả nhất để tính toán Dice coefficient của mỗi chuỗi vì nó liên quan đến mọi chuỗi khác. Thật không may, điều này dẫn đến thuật toán hệ số Dice được sử dụng khoảng 810.000.000.000 lần.Cách hiệu quả để tính hệ số Dice giữa 900.000 chuỗi là gì?
Cách tốt nhất để cấu trúc chương trình này để tăng hiệu quả là gì? Rõ ràng, tôi có thể ngăn chặn việc tính toán Dice của các phần A và B, rồi B và A - nhưng điều này chỉ làm giảm một nửa công việc cần thiết. Tôi có nên xem xét việc thực hiện một số phím tắt hoặc tạo một số loại cây nhị phân không?
Tôi đang sử dụng thực hiện sau đây của thuật toán hệ số Dice trong Java:
public static double diceCoefficient(String s1, String s2) {
Set<String> nx = new HashSet<String>();
Set<String> ny = new HashSet<String>();
for (int i = 0; i < s1.length() - 1; i++) {
char x1 = s1.charAt(i);
char x2 = s1.charAt(i + 1);
String tmp = "" + x1 + x2;
nx.add(tmp);
}
for (int j = 0; j < s2.length() - 1; j++) {
char y1 = s2.charAt(j);
char y2 = s2.charAt(j + 1);
String tmp = "" + y1 + y2;
ny.add(tmp);
}
Set<String> intersection = new HashSet<String>(nx);
intersection.retainAll(ny);
double totcombigrams = intersection.size();
return (2 * totcombigrams)/(nx.size() + ny.size());
}
mục tiêu cuối cùng của tôi là để đầu ra một ID cho mỗi phần có một hệ số Dice lớn hơn 0.9 với phần khác.
Cảm ơn mọi lời khuyên bạn có thể cung cấp!
Liên kết đến/giải thích của hệ số Dice sẽ tốt cho hậu thế. – Gray
Bạn muốn sản lượng nào? Bạn có muốn N mục có hệ số cao nhất không? – usr
Cảm ơn lời khuyên. Tôi đã chỉnh sửa bài đăng gốc của mình để bao gồm cả chi tiết. –