快速查找两个字符串之间的常用单词

时间:2016-08-02 02:01:31

标签: php string

我有一个长度为平均句子的字符串,它可以由任何随机单词组成。我还有一个文件(大约600kb),其中包含更多随机单词。

我想尽可能有效地找出这两者之间的常用词。现在,我正在通过两个循环来匹配文件中的每个单词与文件中的每个单词,但这似乎有点低效。有没有更好,更有效的方法来获得常用词?

2 个答案:

答案 0 :(得分:1)

将一组加载到数组键中(值可以是任何值)。然后循环另一组并测试阵列是否具有这些键。这样,您就不会有两个嵌套循环,而是两个独立循环(加载循环和测试循环),与值查找相比,键查找简单快捷。

如果您正在针对一个文件测试多个句子,那么将文件加载到数组中显然会更好。如果您的文件大于您的记忆(不应该发生,而不是600kb),那么请反过来。

或者,您可以制作两个数组,然后使用array_intersectarray_intersect_key。如果PHP很聪明,array_intersect_keys将使用上述程序;在任何情况下它应该是好的,因为它是用C实现的。缺点是你必须将所有内容加载到内存中(再次,可能不是问题)。

答案 1 :(得分:0)

您当前的算法复杂度为O(N * M)。要改进它,您可以使用哈希表来存储文件中的单词。在PHP中,关联数组实现为哈希表。所以你的数组看起来像这样

$array = ['abc' => true, 'dfg' => true, ]// and so on

并使用array_key_exists检查单词是否在数组中。这样就可以验证O(1)。最后,你必须迭代句子中的单词。它将是O(N),其中N是多个单词。最终的复杂性是O(N)