Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 计算给定字符集是否覆盖给定单词集的算法_Algorithm_Bitmap - Fatal编程技术网

Algorithm 计算给定字符集是否覆盖给定单词集的算法

Algorithm 计算给定字符集是否覆盖给定单词集的算法,algorithm,bitmap,Algorithm,Bitmap,我遇到了以下算法问题(src:) 问题: c='a' w=“苹果” c覆盖w,如果w包含c. c_集={'a','b','c','g'} w_set={'apple','ibm','cisco','google'} c_集覆盖w_集,当w_集中的每个w都被c_集中的一些c覆盖时。 给定c_集和w_集,w_集是否被c_集覆盖? 跟进:如果w_集是固定的,比如说一本书,如何确定c_集是否覆盖了这个w_集 一种可能的解决方案是: 如果我们使用26位(每个字符1位)来表示w_集中的每个单词, 然后还为c

我遇到了以下算法问题(src:)

问题: c='a'
w=“苹果”
c覆盖w,如果w包含c.
c_集={'a','b','c','g'}
w_set={'apple','ibm','cisco','google'}
c_集覆盖w_集,当w_集中的每个w都被c_集中的一些c覆盖时。
给定c_集和w_集,w_集是否被c_集覆盖?
跟进:如果w_集是固定的,比如说一本书,如何确定c_集是否覆盖了这个w_集

一种可能的解决方案是:
如果我们使用26位(每个字符1位)来表示w_集中的每个单词,
然后还为c_集形成类似的位掩码,这是一种检查覆盖率的解决方案
将执行“c_集_位掩码和word_i_位掩码”。如果每个
单词,那么我们已经涵盖了每个单词

我的问题是,考虑到

w_集是静态的,例如一本书

一种可能的解决方案是O(nlogk)~O(n),其中n=w_集中的“字母”总数,k=c_集中的字母数。最大值(k)=26。因此我们可以假设k是常数

这个算法看起来很幼稚,但我看不到比O(n)更好的解决方案,因为在任何算法中,您至少需要扫描w_集中的所有字母,以检查它们是否存在于c_集中

按字典顺序对c_集排序。(O(klogk))~常数

扫描w中的每个单词,并对c_集中的字母执行二进制搜索。(O(nlogk))~O(n)。

w_集是固定的还是静态的是什么意思?这意味着既然它不会改变,我们可以做一些预处理。