J'ai passé pas mal de temps à bien optimiser mon implémentation.
Au début, j'avais également fait une fonction récursive avec cache mais de la programmation dynamique s'est avérée plus rapide (3x fois plus rapide pour être précis).
L'algo en pseudo-code est le suivant
fonction(trie, design):
initialiser t un tableau de (len(design)+1) entiers à 0
t[0] = 1
pour i de 0 à len(design) - 1:
pour chaque prefixe p de design[i..] dans trie:
t[i + len(p)] += t[i]
renvoyer t[design]
La structure de données trie permet de très efficacement trouver les préfixes d'un mot appartenant à une liste.
170 microsecondes partie + partie 2.
[^] # Re: jour 19 - on souffle
Posté par Guillaume.B . En réponse au journal Advent of code 2024. Évalué à 2.
Comme d'habitude, j'essaie de trouver le meilleur algorithme pour résoudre le problème même si ce n'est pas nécessaire.
Aujourd'hui, la structure donnée à utiliser m'a paru naturelle: les
prefix trees(également appeléstries).https://fr.wikipedia.org/wiki/Trie_(informatique)
J'ai passé pas mal de temps à bien optimiser mon implémentation.
Au début, j'avais également fait une fonction récursive avec cache mais de la programmation dynamique s'est avérée plus rapide (3x fois plus rapide pour être précis).
L'algo en pseudo-code est le suivant
La structure de données
triepermet de très efficacement trouver les préfixes d'un mot appartenant à une liste.170 microsecondes partie + partie 2.