我有一串关键字要搜索的格式: A,B+C,D+E,B+F,E+G+H,.
每个字母代表一个关键字,+代表我希望所有关键字出现的时间。
关键字没有保证的顺序。
稍后,我将搜索包含这些关键字的名称。
因此,按照我的示例,我将对包含以下内容的名称感兴趣:
A或(B及C)或(D及E)或(B及F)或(E及G及H)等
问题是,我只能查询包含单个关键字的名称(它是API而不是我的数据库),因此我需要列出要检索名称的关键字列表,然后检查每个名称是否包含所有相关的关键字。
我需要一个算法来解析字符串并创建关键字列表,以最小化对DB的查询。
例如,在我的示例中,我将获得以下名称:
一个
检查它们是否也包含C或F
检查它们是否也包含D或(G和H)
因此,该算法应该创建A,B,E的关键字列表以进行查询,并在每个关键字中添加显示在名称中的关键字。
我在php中工作,所以我更喜欢php中的答案,但是伪代码也可以。我希望这是清楚的..。
发布于 2013-11-26 10:12:47
Make empty array B.
Pass over the given array A, for each word X:
If not apperars in B, add X to B as index, and set him value to 1/(No. of parts in this conjunction).
Else, add 1/(No. of parts in this conjunction) to exist value.
Sort B by values, biggest first.
Make your queries from start to end.
逻辑是按词在所有连词中的重要性来衡量的。
一个单独的词是相当重要的,但一个四次出现与另一个词是更重要的。
https://stackoverflow.com/questions/20213558
复制相似问题