Je suis en train d'écrire une fonction qui effectue les opérations suivantes:trouver les numéros de ligne de toutes les occurences d'une chaîne dans un fichier texte
Compte tenu d'un fichier texte, je veux trouver toutes les occurences d'une certaine chaîne dans ce fichier; ensuite, pour chaque occurrence, la ligne sur laquelle elle a été trouvée devrait être ajoutée à une liste. Nous supposons que chaque ligne contient au plus une occurence. Le fichier texte peut devenir très volumineux, ce qui signifie qu'une simple boucle for-itera sur chaque ligne le fichier sera trop lent.
Par exemple, disons que nous avons un fichier avec le contenu:
- ABCDEFG
- HJKLMNO
- GFEDCBA
- PQRSTUV
Si je devais rechercher "A" , la fonction le trouverait sur les lignes 1 et 3 et ainsi ajouter 1 et 3 à une liste (puis retourner la liste). Je pensais à la recherche binaire, mais il semble exiger une liste à trier et les éléments à distinguer - je cherche des valeurs identiques.
Alors, y a-t-il un autre algorithme de recherche sur lequel je peux baser ma fonction, avec à peu près les mêmes performances que la recherche binaire?
Merci!
Toutes les lignes ont-elles la même longueur? – Ryan
Si la chaîne recherchée peut être n'importe où sur n'importe quelle ligne, comment pensez-vous pouvoir vérifier qu'elle ne se trouve pas sur une ligne donnée avant de visiter cette ligne? En d'autres termes, avez-vous quelque chose de mieux que O (n) (une boucle for) –
Quelle est la taille de ce fichier? Et, comme @Rune l'a fait remarquer, vous ne pouvez pas faire mieux que O (n) à moins de pré-traiter le fichier et de maintenir un index de chaque mot. –