Divide and conquer

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

divide and conquer

par fatal_error » 24 Oct 2019, 06:46

hi all,

j'ai une suite t(n) = t(n/2)+t(n/3)
je voudrais calculer son terme général. (pas sa complexité)
mettons t(0) = t(1) = 1

dans le cas où u(n)=u(n/2) je sais que je peux opérer le changement de variable w=2^n, mais ici?
la vie est une fête :)



jonses
Membre Relatif
Messages: 496
Enregistré le: 19 Mai 2013, 10:33

Re: divide and conquer

par jonses » 24 Oct 2019, 09:02

Salut !

Un peu en réflexion à la va-vite, je pense au changement de variable

Je vais essayer de voir ce que ça donne.

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: divide and conquer

par GaBuZoMeu » 24 Oct 2019, 09:35

fatal_error a écrit:j'ai une suite t(n) = t(n/2)+t(n/3)
je voudrais calculer son terme général. (pas sa complexité)
mettons t(0) = t(1) = 1

J'ai du mal à voir le sens de cette question telle que tu la formules. Déjà, n/2 et n/3 n'ont aucune raison d'être des entiers.
Vu le titre que tu as choisi, je comprends que tu cherches à estimer la complexité d'un algorithme de type de type diviser pour gagner, avec la propriété que la complexité pour une taille n d'entrée est égale à la somme de la complexité pour une taille n/2 et de la complexité pour une taille n/3
dans le cas où u(n)=u(n/2) je sais que je peux opérer le changement de variable w=2^n, mais ici?

Dans ce cas là, la complexité est constante ! Tu n'as sans doute pas écrit ce que tu voulais écrire.

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: divide and conquer

par GaBuZoMeu » 24 Oct 2019, 10:36

Bon, pour ne pas être entièrement négatif : une représentation graphique de la suite définie par , et pour , .

Code: Tout sélectionner
L=[(0,1),(1,1)]
for i in range(2,2000) :
    L.append((i,L[(i/2).ceil()][1]+L[(i/3).ceil()][1]))
line(L)


Image

C'est sous-linéaire, bien sûr.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: divide and conquer

par fatal_error » 24 Oct 2019, 10:37

Dans ce cas là, la complexité est constante !

J'étais pas clair dans l'idée que je voulais transmettre:

Si on considère (pour éviter le cas constant...)

en posant par , , et
d'où et en passant au logarithme base 2, , ce qu'on vérifie rapidement pour les puissances de 2:
u(1) = 1
u(2) = u(1) + 1 = 2
u(4) = u(2) + 1 = 3
u(8) = u(4) + 1 = 4
...
et d'autre part

pour autant, u(n) est définie pour tout n (positif) et "recolle" bien pour les puissances de 2.
l'idée que je voulais montrer c'est que même si on a une relation que pour les n divisibles par deux, on a pu "interpoler" pour tout n.
J'imagine qu'on peut avoir la même chose pour

J'ai du mal à voir le sens de cette question telle que tu la formules. Déjà, n/2 et n/3 n'ont aucune raison d'être des entiers.

est-ce que ci-dessous va mieux?

t(n) = t(n/2) + t(n/3) si n%6 = 0
t(n) = t((n-k)/2) + t((n-k)/3) si n%6 = k (k different de 0)
les conditions intiales au choix, mais on peut dire dans la continuité (sans jeu de mots voulu...): t(n) = 1 pour n=0 à 5

edit: nos messages ce sont croisés.
à choisir je prendraiS le floor plutot que le ceil, (dans le sens où pour diviser n par 2, si n vaut 5, j'admettrais n == 4). Dans mes modulo 6 je suis un peu plus grossier pour la simplification mais effectivement on peut être plus précis
la vie est une fête :)

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: divide and conquer

par GaBuZoMeu » 24 Oct 2019, 10:46

Code: Tout sélectionner
L=[(0,1),(1,1),(2,1),(3,1),(4,1),(5,1)]
for i in range(6,2000) :
    n=(i/6).floor()
    L.append((i,L[2*n][1]+L[3*n][1]))
line(L)


Image

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: divide and conquer

par fatal_error » 24 Oct 2019, 10:52

Je ressssens le python en toi :mrgreen:
partons sur la def de t(n) ci-dessous
t(n) = t((n-k)/2) + t((n-k)/3) avec n%6=k
t(n) = 1 si n<=5

si elle est correcte, peut-on avoir un terme général de t(n)?
la vie est une fête :)

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: divide and conquer

par GaBuZoMeu » 24 Oct 2019, 11:47

Tu as vu la tête de la représentation graphique ?
Il me semble plus raisonnable de trouver une majoration qui précise le comportement sous-linéaire.
J'aurais un faible pour .
Je te laisse voir pourquoi. :mrgreen:

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 146 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite