用于确定给定字符集是否涵盖给定字词集的算法

时间:2013-10-15 05:21:03

标签: algorithm bitmap

我遇到了以下算法问题(src:http://www.careercup.com/question?id=15029889

问题: c ='a'
w =“apple”
c包括w,iff w包含c。
c_set = {'a','b','c','g'}
w_set = {'apple','ibm','cisco','google'}
c_set覆盖w_set,iff w_set中的每个w都被c_set中的某个c覆盖 给定c_set和w_set,是否w_set被c_set覆盖?
跟进:如果修复了w_set说一本书,如何确定c_set是否涵盖了这个w_set?

一种可能的解决方案是:
如果我们使用26位(每个字符1位)来表示w_set中的每个单词,
然后还为c_set形成一个类似的位掩码,一个检查覆盖率的解决方案 将做“c_set_bitmask& word_i_bitmask”。如果每个都不为零 一句话,我们已经涵盖了每一个字。

我的问题是,鉴于这一点,我们可以做些比这更好的事情 w_set是静态的,例如一本书。

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是O(nlogk)~O(n)其中n = w_set中'字母'的总数,k = c_set中的字母数。 max(k)= 26.因此我们可以假设k是常数。

算法看起来很天真,但我看不出任何比O(n)更好的解决方案,因为在任何算法中你至少需要扫描w_set中的所有字母以检查它们是否存在于c_set中。

按字典顺序排序c_set。 (O(klogk))〜常数
扫描w中的每个单词并对c_set中的字母执行二进制搜索。 (O(nlogk))〜O(n)。