java - 查找最相似的 List<String> 的有效方法

标签 java vector similarity knn

我有一个list1<String>等1000 list<String> 。我需要选择具有最精确匹配值的列表。

今天我回顾一下每个 list<String>与 list1 进行比较,将覆盖范围保存在某个排序列表中,最后选择最相似的列表。

public static <T> List<T> intersection(List<T> list1, List<T> list2) {
        List<T> list = new ArrayList<T>();

        for (T t : list1) {
            if(list2.contains(t)) {
                list.add(t);
            }
        }

        return list;
    }

假设我也有很多列表需要比较,那么遍历所有 1000 个唯一列表的操作会浪费时间。

您能否建议我一种有效的方法/算法来做到这一点?

最佳答案

您的列表未排序,因此任何 contains() 操作都需要搜索整个列表(或者直到找到为止,平均为 N/2)。
因此,首先对所有列表进行排序 (Collections.sort()),然后使用 Collections.binarySearch() 查找是否包含该 String。这只需要 (log N) 而不是以前的 N/2。

关于java - 查找最相似的 List<String> 的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34909834/

相关文章:

java - 通过键java对LinkedHashMap进行排序

Java自定义类加载器获取资源

unicode - 在 Unicode 中查找相似的 ASCII 字符

sql - 如何根据兴趣找到相似用户

sql - 在 SQL 中创建一个 "products you may be interested in"算法?

Java 可实现的类创建?

Java类加载器

java - 克隆 vector 时无法摆脱 Java 警告

matlab - 根据元胞数组中的内容查找列索引

c++ - 将二维数组的第 i 行作为 vector 返回