Bonjour,
Je souhaiterais construire une classe C++ pour les mots sur un alphabet à deux lettres (par exemple 0,1) et une autre pour les mots sur quatre lettres (par exemple 00, 01, 10 et 11). Ces classes doivent implémenter toutes les opérations standards sur les mots : concaténation, recherche de caractère, recherche de sous-mot,... avec un grand soucis d'efficacité.
Pour le stockage des données, une première implémentation possible serait d'utiliser le type char pour stocker une lettre mais on voit bien que question optimisation on a vu mieux.
Une seconde implémentation consiste à utiliser un vector<unsigned int> et considérer que chaque élément contient sizeof(unsigned int) lettres (ou bien la même chose divisé par 2 pour les mots sur quatre lettres). Il faudra alors écraser les méthodes d'accès aux éléments et les itérateurs en utilisant les opérations de décalage de bits. Ca me semble un peu fumeux car on démonte précisément tout ce qui est utile dans cette classe. On peut aussi créer de nouveaux itérateurs iterator_on_bit, reverse_iterator_on_bit... et de nouvelles méthodes d'accès aux éléments at_bit()...
Cependant, la solution la plus naturelle pour les mots sur deux lettres devrait utiliser vector<bool> ou bit_vector. J'aimerais savoir si ces deux classes sont standardisées quand au stockage des données. En effet, pour effectuer une recherche de sous-mot, on compare des 'segments' de mots de 32 ou 64 bits... il faut donc pouvoir y accéder directement et non pas simplement aux lettres.
Une dernière solution consisterait à reconstruire depuis le début une classe de tableau dynamique (ce qui, je pense, n'est jamais une bonne idée en C++).
Que feriez-vous/est-il possible de faire ? Voyez-vous d'autres solutions ?
Merci,
IFFL
Partager