Tu as mieux ?
J’entends dans le cas général, c’est-à-dire sans savoir si des paires (voire n-uplets) de nombres vont apparaître en cours de route.
Sally (./33) :En fait, je crois que je n’ai toujours pas compris la nuance entre « majorer la complexité » et « majorer la cardinalité » dans le cas qui nous intéresse (cf ./27).
Euh dire que la suite (appelle-la suite de Walters si tu veux, c'est pas une série) a le bon comportement asymptotique et dire qu'elle est le meilleur majorant possible de la complexité (autrement dit que c'est un O(complexité dans le pire cas)) sont deux choses différentes...
Sally (./33) :À mon avis (j’ai bien souligné le mot « intuitivement »), je ne pense pas que ce facteur soit constant.
Sinon l'associativité signifie que dès que dans ton arbre tu as deux nœuds + ou × en relation père-fils tu peux les permuter, donc je ne vois pas ce qui te permet de penser que ça a moins d'influence s'il y a plus d'opérateurs : plus tu as d'opérateurs plus tu peux rencontrer cette relation... alors on pourrait penser que ça réduit la cardinalité d'un facteur constant (auquel cas ça ne change rien au O) mais la réduire d'un facteur qui tend vers 1, ça ne me semble pas très réaliste.
Sally (./33) :Il me semble que si :
pour les soustractions et les divisions on s'est contenté de dire qu'elles n'étaient définies que pour un seul ordre des nombres, donc on fait comme si ces opérateurs étaient commutatifs, ça n'a pas de rapport avec l'associativité ^^
Ethaniel (./16) :On joue, il me semble, sur l’associativité, pour dire que le calcul avec valeur intermédiaire négative pourra de toute façon être retrouvé autrement sans valeur négative.
Certes, on pourra argumenter du fait que l’on ait envie de calculer (4-9)+12, avec donc un nombre intermédiaire négatif, mais quand on va calculer (12-9)+4, on trouvera de toute façon le même résultat, donc autant éliminer immédiatement les cas dont on sait qu’ils réapparaîtront sous une autre forme lors de la recherche exhaustive des cas possibles.
Pollux (./19) :Rhââ Pollux, tout semble si simple avec toi
Si tu appelles ta suite c[n] tu as la relation :
c[0] = 0
c[1] = 1
c[n] = 1/2 sum[k=0..n] C(n,k) c[k] c[n-k] pour n>1
Si tu poses c'[n] = c[n]*2^(n-1) ça te donne une relation un peu plus simple
c'[0] = 0
c'[1] = 1
c'[n] = sum[k=0..n] C(n,k) c'[k] c'[n-k] pour n>1
( http://www.research.att.com/~njas/sequences/A001813 )
C'est la version étiquetée des http://en.wikipedia.org/wiki/Catalan_number (on peut aussi faire le lien avec les nombres de Catalan directement : c'[n] = catalan[n-1]*n! puisque pour avoir une version étiquetée d'un arbre non étiqueté il suffit de rajouter une permutation quelconque des feuilles, et c[n]*2^(n-1) = c'[n] puisque pour avoir une version asymétrique d'un arbre symétrique il suffit de rajouter une information de direction à chaque noeud).
Pollux (./19) :J’ai aussi essayé de cette manière (tous mes arbres ont leur notation RPN équivalente), mais ça n’a vraiment rien donné.
Ou bien tu peux trouver l'expression de c' directement en notant tes arbres en RPN : si tu rajoutes à tes n nombres n-1 opérateurs distincts o1..on-1 (donc au total tu as un alphabet A à 2n-1 éléments), tu peux faire correspondre à chaque arbre son expression RPN, qui est une permutation de A. Mais si tu prends une permutation quelconque de A, ça ne correspond pas toujours à une expression RPN... Heureusement il existe une unique permutation circulaire de ta permutation qui correspond à une vraie expression RPN : si tu notes p[k] la profondeur de la pile (éventuellement négative) avant le k-ème symbole, tu prends le plus grand k tel que p[k] soit minimale et en faisant une rotation de k éléments tu obtiens une expression RPN (et c'est le seul k vérifiant cette propriété). Ca te donne une relation d'équivalence entre permutations de A, et chaque classe d'équivalence a 2n-1 éléments. Donc il y a (2n-1)!/(2n-1) = (2n-2)! arbres utilisant o1..on-1. Puisqu'on veut un seul opérateur, il faut diviser par le nombre de permutations de o1..on-1 : ça donne bien c'[n] = (2n-2)!/(n-1)!
Ethaniel (./18) - Posté : 30-09-2008 :En fait, ce n’est pas un doublon, il y a un décalage :Pollux (./17) :Ne faudrait-il pas prévenir les admins du site que la seconde suite, qui date seulement du 21 septembre dernier, fait doublon avec la première ?
(ah tiens en fait elle y est aussi avec 4^(n-1), et même en doublehttp://www.research.att.com/~njas/sequences/?q=4,48,960,26880&sort=0&fmt=0&language=english&go=Search )
A144828a(n)=A052714(n+1). [From R. J. Mathar (mathar(AT)strw.leidenuniv.nl), Oct 01 2008]Pollux, c’est toi, R. J. Mathar
Sally (./36) :Je sais, mais #flemme# de répéter à chaque fois « (ou n-uplon) »
attention à la notion de « doublon » d'ailleurs, tu vas avoir des triplons ou des quadruplons etc.
Sally (./36) :J’ai dénombré précisément, pour N=3, les équivalences des arbres ne contenant que des + et des - (idem pour ceux ne contenant que des * et des /), et on passe finalement de 48 calculs différents à 32
il me semble que ça réduit beaucoup plus la cardinalité que tu ne le crois
Sally (./36) :Au temps pour mon « k tendant vers 1 », donc, puisqu’il est majoré par 15/16 pour N>2…
Ainsi rien qu'avec ce vague raisonnement simpliste je sais déjà qu'on peut éliminer au moins 1/16 des arbres.
Ethaniel (./37) :Pollux (./19) :J’ai aussi essayé de cette manière (tous mes arbres ont leur notation RPN équivalente), mais ça n’a vraiment rien donné.
Ou bien tu peux trouver l'expression de c' directement en notant tes arbres en RPN : si tu rajoutes à tes n nombres n-1 opérateurs distincts o1..on-1 (donc au total tu as un alphabet A à 2n-1 éléments), tu peux faire correspondre à chaque arbre son expression RPN, qui est une permutation de A. Mais si tu prends une permutation quelconque de A, ça ne correspond pas toujours à une expression RPN... Heureusement il existe une unique permutation circulaire de ta permutation qui correspond à une vraie expression RPN : si tu notes p[k] la profondeur de la pile (éventuellement négative) avant le k-ème symbole, tu prends le plus grand k tel que p[k] soit minimale et en faisant une rotation de k éléments tu obtiens une expression RPN (et c'est le seul k vérifiant cette propriété). Ca te donne une relation d'équivalence entre permutations de A, et chaque classe d'équivalence a 2n-1 éléments. Donc il y a (2n-1)!/(2n-1) = (2n-2)! arbres utilisant o1..on-1. Puisqu'on veut un seul opérateur, il faut diviser par le nombre de permutations de o1..on-1 : ça donne bien c'[n] = (2n-2)!/(n-1)!
Et je comprends pourquoi : dans ton explication, j’ai décroché dès la mention de p[k], donc dès le début, en fait.
Tu pourrais développer un peu si tu as le temps, STP?
Pollux, c’est toi, R. J. Mathar?
Ethaniel (./39) :
OK, merci beaucoup, je pense avoir saisi le concept…
Cette histoire de permutation circulaire, c’est un truc que l’on est censé apprendre quand on étudie les RPN?
Oh et sinon, le graphe en zig-zag avec sa droite qui reste en dessous, ça me fait penser aux “monotonic paths” en lien avec les nombres de Catalan!
Pollux (./40) :Ben disons que je sais juste lire une expression écrite en RPN et que c’est informatiquement implanté par une pile dans laquelle on empile les nombres lus et dont on retire les 2 nombres au sommet quand on lit une opération, en empilant le résultat.Ethaniel (./39) :
OK, merci beaucoup, je pense avoir saisi le concept…
Cette histoire de permutation circulaire, c’est un truc que l’on est censé apprendre quand on étudie les RPN?
Je sais pas trop ce que tu appelles "étudier les RPN"(peut-être que j'avais déjà vu ça, mais j'en suis pas sûr)
Yorkie (./43) :
Je l'ai écrit en PASCALE sous DELPHI (la seule langage que je connais).