C ++ - 检查类似字符串

时间:2015-10-04 05:49:41

标签: c++ algorithm binary digital

我必须在C ++中为应用程序编写程序,该程序生成需要存储的n位二进制字符串以供进一步处理。

问题1)但是每当生成新字符串时,都需要检查它是否已存在于数据库中。如果是,则不应添加。

我可以做的一种可能的方法是维护查找的哈希表(例如STL映射),其中键是二进制字符串的十进制值。但问题是n可能非常大,存储它的十进制值是不可行的。有时n可以大到200+。

此外,有时n位字符串的位未指定。 例如: - 如果n = 4,则字符串可以是01xx的形式。低两位未指定的位置。在这种情况下,01xx实际上代表4个完全指定的4位字符串 - 0100,0101,0110,0111。因此,如果01xx在数据库中并且生成了0110,则0110不应存储在数据库中。

你能否提出一个有效的方法来检查这个问题。

我能想到的是: -

1)查找字符串的整个数据库,并将新生成的字符串逐个与数据库中的字符串进行比较。这是一种天真的方法,其复杂度为O(mn),其中m是数据库中当前字符串的数量。

2)将字符串存储在二元决策树类型结构中。在这种类型的方法中,查找将是对数的吗?

3)对于字符串中的每个位位置 - 我将字符串存储在指定值的位置。 例如: - 对于n = 4,如果数据库包含: - 01xx和1xx1,则此信息可以存储为: -

0 - 1xx1

1 -

2 - 01xx

3 - 01xx,1xx1

0表示LSB已设置。 3表示MSB已设置。因此,如果生成一个新字符串说0101,我可以在2或3中搜索它。这种方法在内存使用上似乎很昂贵。

您能否建议一些有效的方法来进行此字符串搜索。

问题2)同样在C ++实现方面,什么可能是存储这些n位字符串的有效方法?应该注意,大多数时候n比特串中的大多数比特是未指定的。因此,不是在存储器中保留与n成比例的空间,而是仅存储指定的位更有意义。

那是n可能是10.但是生成的字符串可能是这样的: - 1x1xxxxxxx。在这种情况下,存储像{(9,1),(7,1)}这样的东西更有意义。那么我应该将字符串存储为2元组的向量吗?在这种情况下,什么可能是存储这些字符串的数据库的好方法?

0 个答案:

没有答案