Tôi đang cố gắng để có được kết hợp chuỗi phù hợp nhất để làm việc bằng cách sử dụng cấu trúc dữ liệu Java hiện có. Nó là khá chậm mặc dù, bất kỳ đề xuất để cải thiện hiệu suất của nó sẽ được hoan nghênh.Thực hiện tìm kiếm đối sánh tốt nhất trong Java
dữ liệu mẫu sẽ trông như thế này
Key | V
---------------------
0060175559138 | VIP
--------------
006017555 | National
--------------
006017 | Local
---------------
0060 | X
--------------
do đó, một tìm kiếm phù hợp nhất trên phím = 0060175552020 sẽ trở lại 006017555
Một cách tôi có thể nghĩ là có nhiều đồ cây sử dụng băm để chuyển hướng dữ liệu vào các bản đồ khác nhau do đó làm cho khu vực tìm kiếm nhỏ hơn.
private final TreeMap<String, V> index;
public Set<V> syncBestMatch(String key) {
Entry<String,V> entry = index.headMap(key, true)
.descendingMap().entrySet().stream()
.filter(e -> isPartiallyOrFullyMatching(key, e.getKey()))
.findFirst()
.orElseThrow(() -> new NoMatchException("No match found"));
Set<V> results = new HashSet<>();
results.add(entry.getValue());
return results;
}
bạn có thể cân nhắc sử dụng https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm – Vihar
Ai đó cũng đề xuất Trie. Sẽ xem xét cả hai. Cảm ơn – spakai