Il devrait être possible de convertir l'ID en arbre et en arrière.
L'identifiant et bitstrings être:
0 -> 0
1 -> 100
2 -> 11000
3 -> 10100
4 -> 1110000
5 -> 1101000
6 -> 1100100
7 -> 1011000
8 -> 1010100
Considérons d'abord le fait que, compte tenu d'un bitstring, on peut facilement passer à l'arbre (une méthode récursive) et vice-versa (précommande, sortie 1 pour les parents et 0 pour feuille).
Le principal défi consiste à essayer de mapper l'identifiant à la chaîne de bits et vice versa.
Supposons une liste des arbres de n nœuds comme suit:
Left sub-tree n-1 nodes, Right sub-tree 0 nodes. (Cn-1*C0 of them)
Left sub-tree n-2 nodes, Right sub-tree 1 node. (Cn-2*C1 of them)
Left sub-tree n-3 nodes, right sub-tree 2 nodes. (Cn-3*C2 of them)
...
...
Left sub-tree 0 nodes, Right sub-tree n-1 nodes. (C0*Cn-1 of them)
Cr = rth catalan number.
L'énumération que vous avez donné semble provenir de la procédure suivante: nous gardons le sous-arbre gauche fixe, énumérer les bons sous-arbres. Passez ensuite à la sous-arborescence suivante, énumérer les sous-arborescences de droite, et ainsi de suite. Nous commençons par la taille maximale sous-arbre gauche, puis le suivant est la taille maximale -1, etc
Donc disons que nous avons un id = S dire. Nous trouvons d'abord un n tel que
C0 + C1 + C2 + ... + Cn < S < = C0 + C1 + C2 + ... + 1 + Cn
Alors S correspondrait à un arbre avec n + 1 nœuds. Donc, vous considérez maintenant P = S - (C0 + C1 + C2 + ... + Cn), qui est la position dans l'énumération des arbres de n + 1 nœuds.
Maintenant, nous trouver un r tel que * C0 + Cn Cn-1 * C1 + .. + Cn-r Cr < P < = C0 + Cn Cn-1 * C1 + .. + r-Cn + 1 * Cr-1
Ceci nous indique combien de nœuds le sous-arbre gauche et le sous-arbre droit ont. Considérant P - Cn * C0 + Cn-1 * C1 + .. + Cn-r * Cr, nous pouvons maintenant déterminer la position exacte de l'énumération de sous-arbres à gauche (en ne considérant que les arbres de cette taille) et la sous-arborescence exacte position d'énumération et forme récursivement la chaîne de bits. Le mappage de la chaîne de bits à l'ID doit être similaire, car nous savons à quoi ressemblent les sous-arborescences gauche et droite, tout ce que nous devons faire est de trouver les positions correspondantes et faire un peu d'arithmétique pour obtenir l'ID.
Vous ne savez pas à quel point c'est utile. Vous travaillerez avec des nombres assez énormes tout le temps.
Les nombres catalans augmentent en O (4^n), ce qui est plus lent que les factoriels. –
Vous avez raison. Je ne me souviens pas pourquoi je pensais qu'ils grandissent plus vite, mais j'ai supprimé l'erreur. Merci. – Joren