摘要:
问题描述: 给出全集S, 和n个S的子集C[0 to n-1], 找出 k(0 < k < n)个子集, 使能够覆盖S, 且每个元素只覆盖一次。思路: 1. 暴力搜索: 找出2^k个子集组合, 判断是否满足条件。 优化: 回溯。 2. 另一种搜索:找出能够覆盖S中第1个元素的子集C[i],删除与C[i]有交集的子集, 删除S中C[i]能覆盖的元素得到S_new, 对S_new执行相同的操作, 如果没有成功则回溯选择另一个能够覆盖S中的第1个元素的子集C[j]. 直到S_new为空。 对于这种搜索用dancing links结构。 阅读全文
摘要:
建模:数据量: n位数组bit_array: m bits, 初始化清0独立的哈希函数个数: k插入: 对于数据x, hash[0 to k-1](x)对应数组bit_array中的位置1。查找: 对于数据x, 如果hash[0 to k-1](x)对应的k个bit_array中的位都为1, 则x存在。与hash的区别: 如果只有一个hash函数, 则会有大量的冲突。 所以采用多个hash函数, 用多个位标记一个数据。attention: 同hash一样, 会出现误判, 关于m, k的选择, 其中有很复杂的数学分析。 hash函数也会影响误判。参考:http://blog.csdn.n... 阅读全文