【发布时间】:2016-04-23 12:39:52
【问题描述】:
我阅读了一些关于确定集合A 是否是另一个集合B 的子集的帖子。但我发现很难确定使用什么算法。以下是问题的概要:
- 我有一个字符串数组
A,我在程序开始时收到它。对结构知之甚少。数组中的每个字符串可以任意长,并且条目的数量不受限制。虽然通常可以假设数组中的条目数不会太大( - 然后我遍历长度为
n的对象列表。 - 每个
n对象还将有一个字符串数组B,即会有nB数组。一旦程序运行,Bs 将被修复,即它们在运行时不会改变。 - 我想为每个对象确定
A是否是B的子集。
现在,我想到了哈希表。但是,在我看来,它们只有在只有一个 B 和很多 As 时才会有效。然后我可以为B 制作一个哈希表,并根据我的哈希表检查每个对象的每个字符串数组。但事实并非如此,因为只有一个A 但n Bs。什么是执行此操作的有效算法?
例子:
A: ["A", "G", "T"]
B1: ["C", "G"]
B2: ["K", "A", "U", "T", "G"]
.
.
.
Bn: ["T", "I", "G", "O", "L"]
这里A 是B2 的子集,但不是B1 的子集,也不是Bn 的子集。
【问题讨论】:
-
您需要多久检查一次 A 中的某个字符串是否是 B 的子字符串?您的程序是否运行了很长时间,在此期间您多次检查(可能已更改)B 的相同字符串列表 A?
-
在程序的每次运行中,
A都固定在开头。B也在程序运行期间修复。它们不会改变。但是有很多Bs。 -
“而 B 因对象而异”所以如果 B 是固定的,那意味着什么。您能否编辑您的答案并发布一些 A 和 B 的示例数据?
-
你能告诉我们关于字符串长度的分布吗? (在您的示例中,它们都是 1。)
-
对不起,我对这个答案不满意。字符串是短的、长的还是很长(1 兆字符)?他们都是 ? ...