Java 具有层次结构和多个过滤器的搜索算法

Java 具有层次结构和多个过滤器的搜索算法,java,algorithm,search,Java,Algorithm,Search,这是我的问题 假设我们有一个包含多个对象的列表,每个对象都有几个字段。我需要在列表中搜索 字段的层次结构。我的问题是做这件事的最佳优化算法是什么 我所知道的是: 如果没有返回,则在搜索中循环槽列表 如果未返回任何内容,则在搜索B时循环槽列表 循环槽列表以搜索C 等等 假设C从搜索中返回一些东西,我需要应用其他过滤器,称之为D和E,如果D和E匹配,则返回C 如果它不匹配(D或E),我将再次在列表中循环搜索F,它也可能需要匹配相同的D和E 考虑到列表A的大小可以更改,并且每个对象中的过滤器都可以更改

这是我的问题

假设我们有一个包含多个对象的列表,每个对象都有几个字段。我需要在列表中搜索 字段的层次结构。我的问题是做这件事的最佳优化算法是什么

我所知道的是:

如果没有返回,则在搜索中循环槽列表

如果未返回任何内容,则在搜索B时循环槽列表

循环槽列表以搜索C

等等

假设C从搜索中返回一些东西,我需要应用其他过滤器,称之为D和E,如果D和E匹配,则返回C

如果它不匹配(D或E),我将再次在列表中循环搜索F,它也可能需要匹配相同的D和E

考虑到列表A的大小可以更改,并且每个对象中的过滤器都可以更改

我的问题是,我正在进行搜索以匹配两个对象,对于列表B中的每个对象,我在列表A中进行搜索。 问题是B可以有数千个条目。 在某些情况下,完成算法需要几个小时

对于这些抽象的东西,我很抱歉,我甚至不知道这是否是问这个问题的合适地方,但是如果您能提供任何帮助,我将不胜感激

我在用JAVA编程


谢谢

你刚才解释的问题现在有点复杂。 如果我弄错了,我很抱歉。我的看法是:

我的问题是,我做这个搜索是为了匹配两个对象 对于列表B中的每个对象,我在列表A中进行搜索。问题是B 可以有数千个条目。在某些情况下需要几个小时才能完成 完成算法

您有两个列表,并且希望根据对象的某些字段查找几乎重复的列表

首先想到的是使用可用的java散列创建一个散列函数,该散列函数为每个对象计算一个仅包含要比较的字段的散列。假设您正在查找共享字段field_a和field_b但不共享字段c的对象,则我的哈希函数类似于
(hash(field_a)*8)^hash(field_b)
或类似的函数。现在,您可以使用它来构建哈希映射或列表数组

现在要使用它,您需要遍历列表并将对象添加到哈希映射中。然后取第二个列表,计算对象的哈希值,看看是否匹配。如果散列匹配,您需要比较对象本身,以防由于散列冲突而导致错误匹配(这种情况应该很少见,但会发生)

所以现在在这个列表中搜索东西几乎是常数O(1),(取决于您期望得到多少结果,以及散列计算的开销)

您应该能够在一次传递中计算所有散列(针对所有条件)(由于内存缓存的原因,将比每个散列计算pas稍快)。寻找一场比赛应该很快


注意:如果您看到许多散列冲突(对象具有相同的散列,但它们不符合您的要求),请稍微更改散列函数。

正如您所解释的,问题目前有点复杂。 如果我弄错了,我很抱歉。我的看法是:

我的问题是,我做这个搜索是为了匹配两个对象 对于列表B中的每个对象,我在列表A中进行搜索。问题是B 可以有数千个条目。在某些情况下需要几个小时才能完成 完成算法

您有两个列表,并且希望根据对象的某些字段查找几乎重复的列表

首先想到的是使用可用的java散列创建一个散列函数,该散列函数为每个对象计算一个仅包含要比较的字段的散列。假设您正在查找共享字段field_a和field_b但不共享字段c的对象,则我的哈希函数类似于
(hash(field_a)*8)^hash(field_b)
或类似的函数。现在,您可以使用它来构建哈希映射或列表数组

现在要使用它,您需要遍历列表并将对象添加到哈希映射中。然后取第二个列表,计算对象的哈希值,看看是否匹配。如果散列匹配,您需要比较对象本身,以防由于散列冲突而导致错误匹配(这种情况应该很少见,但会发生)

所以现在在这个列表中搜索东西几乎是常数O(1),(取决于您期望得到多少结果,以及散列计算的开销)

您应该能够在一次传递中计算所有散列(针对所有条件)(由于内存缓存的原因,将比每个散列计算pas稍快)。寻找一场比赛应该很快


注意:如果您看到许多散列冲突(对象具有相同的散列,但它们不符合您的要求),请稍微更改散列函数。

只需一次对所有列表进行迭代,如果您从列表中找到了正确的匹配项,则不必中断操作
告诉程序分别完成每个循环。

只需一次对所有列表进行迭代,如果从列表中找到正确的匹配项,请中断操作,这样您就不必
告诉程序分别完成每个循环。

感谢您花时间写这篇文章,现在很有用,我怀疑,将来肯定会使用它,但它不适用于这个问题,我所说的过滤器不仅仅是它们是否相等,还可以更大或更小,我甚至有一些过滤器有一些复杂性,有一些完整的逻辑。我正在搜索的是一种算法,它允许在不必每次循环的情况下搜索列表,某种链表与搜索树的混合,如果这有意义的话。听起来你的条件可能像
任意散列函数(数据)=值
。在这种情况下,没有什么可以优化它。感谢您花时间写这篇文章,现在很有用,我怀疑,将来肯定会使用它,但它确实有用