Précédent   Forum des professionnels en informatique > Autres langages > Algorithmes
Algorithmes Forum d'entraide sur l'algorithmique, l'intelligence artificielle, le traitement numérique d'images et les mathématiques. Avant de poster : Cours d'algorithmique
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/12/2011, 18h57   #1
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 94
Points : 38
Points : 38
Par défaut Complexité algorithmique des Courbes de Hilbert

Bonjour,

j'ai cet algorithme des Courbes de Hilbert :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
private static final long serialVersionUID = 1L;
    private int level;
    private double h;
    private double x;
    private double y;
    
    public MyJPanel(int niveau) {
        super();        
        this.level = niveau;
        this.setVisible(true);
    }
    
    public void paintComponent(Graphics g) {
        super.paintComponents(g);
        init(g);
    }
    
    public void deplacement(Graphics g, int vx, int vy) {
        double ax = x;
        double ay = y;
        x = x + h * vx;
        y = y + h * vy;
        g.drawLine((int) ax, (int) ay, (int) x, (int) y);
    }

    public void A(Graphics g, int n) {
        if (n > 0) {
            D(g, n - 1);
            deplacement(g, -1, 0);
            A(g, n - 1);
            deplacement(g, 0, 1);
            A(g, n - 1);
            deplacement(g, 1, 0);
            B(g, n - 1);
        }
    }

    public void B(Graphics g, int n) {
        if (n > 0) {
            C(g, n - 1);
            deplacement(g, 0, -1);
            B(g, n - 1);
            deplacement(g, 1, 0);
            B(g, n - 1);
            deplacement(g, 0, 1);
            A(g, n - 1);
        }
    }

    public void C(Graphics g, int n) {
        if (n > 0) {
            B(g, n - 1);
            deplacement(g, 1, 0);
            C(g, n - 1);
            deplacement(g, 0, -1);
            C(g, n - 1);
            deplacement(g, -1, 0);
            D(g, n - 1);
        }
    }

    public void D(Graphics g, int n) {
        if (n > 0) {
            A(g, n - 1);
            deplacement(g, 0, 1);
            D(g, n - 1);
            deplacement(g, -1, 0);
            D(g, n - 1);
            deplacement(g, 0, -1);
            C(g, n - 1);
        }
    }

    public void init(Graphics g) {
        int adiviser = 1;
        if (level > 1) {
            adiviser = (int) (Math.pow(2, level)) - 1;
        }

        if (this.getWidth() > this.getHeight()) {
            h = (this.getHeight() - 20) / adiviser;
            x = this.getWidth() / 2 + this.getHeight() / 2;
            y = 10;
        } else {
            h = (this.getWidth() - 20) / adiviser;
            x = this.getWidth() - 10;
            y = this.getHeight() / 2 - this.getWidth() / 2;
        }
        A(g, level);
    }
Seulement je n'arrive pas à déterminer sa complexité. Quelqu'un pourrait-il m'aider ?

Merci beaucoup.
alexgille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 20h29   #2
Modérateur
 
Avatar de Franck Dernoncourt
 
Homme Franck Dernoncourt
Chercheur en informatique
Inscription : avril 2010
Messages : 807
Détails du profil
Informations personnelles :
Nom : Homme Franck Dernoncourt
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur en informatique
Secteur : Enseignement

Informations forums :
Inscription : avril 2010
Messages : 807
Points : 2 408
Points : 2 408
Envoyer un message via ICQ à Franck Dernoncourt Envoyer un message via AIM à Franck Dernoncourt Envoyer un message via MSN à Franck Dernoncourt Envoyer un message via Yahoo à Franck Dernoncourt Envoyer un message via Skype™ à Franck Dernoncourt
J'ai survolé le code (30 secondes), mais ça me semble être du T(n) = 4T(n-1) non ?
Franck Dernoncourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2011, 06h55   #3
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 94
Points : 38
Points : 38
Mais si on a du T(n) = 4T(n-1), on a donc du O(1) non? Hors ça me parait faux pour cet algorithme ..
alexgille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2011, 12h35   #4
Modérateur
 
Avatar de Franck Dernoncourt
 
Homme Franck Dernoncourt
Chercheur en informatique
Inscription : avril 2010
Messages : 807
Détails du profil
Informations personnelles :
Nom : Homme Franck Dernoncourt
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur en informatique
Secteur : Enseignement

Informations forums :
Inscription : avril 2010
Messages : 807
Points : 2 408
Points : 2 408
Envoyer un message via ICQ à Franck Dernoncourt Envoyer un message via AIM à Franck Dernoncourt Envoyer un message via MSN à Franck Dernoncourt Envoyer un message via Yahoo à Franck Dernoncourt Envoyer un message via Skype™ à Franck Dernoncourt
(T(n) = 4T(n-1) et T(1) = O(1)) => T(n) = O(4^n)

Il suffit de dessiner l'arbre des appels pour voir cela (ici T(n) = 2T(n-1)) :
Images attachées
Type de fichier : jpg fullbinary1.jpg (14,4 Ko, 0 affichages)
Franck Dernoncourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 20h35   #5
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 94
Points : 38
Points : 38
Effectivement ça parait beaucoup plus simple vu comme cela.
Dernière question : peut-on dire que O(4^n) est équivalent à O(2^n) ? Est-ce une aberration? :p

Merci beaucoup pour ton aide
alexgille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 20h40   #6
Modérateur
 
Avatar de Franck Dernoncourt
 
Homme Franck Dernoncourt
Chercheur en informatique
Inscription : avril 2010
Messages : 807
Détails du profil
Informations personnelles :
Nom : Homme Franck Dernoncourt
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur en informatique
Secteur : Enseignement

Informations forums :
Inscription : avril 2010
Messages : 807
Points : 2 408
Points : 2 408
Envoyer un message via ICQ à Franck Dernoncourt Envoyer un message via AIM à Franck Dernoncourt Envoyer un message via MSN à Franck Dernoncourt Envoyer un message via Yahoo à Franck Dernoncourt Envoyer un message via Skype™ à Franck Dernoncourt
Citation:
Envoyé par alexgille Voir le message
peut-on dire que O(4^n) est équivalent à O(2^n) ? Est-ce une aberration? :p
Une aberration
(car la limite de 4^n / 2^n tend vers +infini lors n tend vers +infini)
Franck Dernoncourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 10h00   #7
Invité de passage
 
Homme
Inscription : août 2011
Messages : 61
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 61
Points : 1
Points : 1
Salut
pour cet algorithme de Hilbert , comment l'utiliser pour parcourir une image
( Au lieu de parcourir l'image horizontalement je veux la parcourir a l'aide de la courbe de Hilbert) pouvez vous m'aider ? et merci
aymenbech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 10h07   #8
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 94
Points : 38
Points : 38
Tu devrais poser ta question dans un nouveau topic, plus de gens pourrait t'aider.

Pour le parcours d'image avec Hilbert je ne connais pas trop. Toutefois:
Les courbes de Hilbert fonctionnent comme ceci:
Tu prend un carré, tu le divise en 4 sous-carrés, ainsi de suite jusqu'à obtenir autant de sous-carrés de sous-carrés de sous-carrés qu'il n'en faut pour calculer ta courbe au rang voulu. Puis tu parcours ta matrice ainsi formée en reliant les centres de chacun des petits carrés obtenus.

Dans ton cas, ton image est une matrice, et le chemin de passage que représente la courbe de Hilbert est la façon dont tu dois lire les pixels de ton image (donc les cases de ta matrice).

Sur internet il y a des algorithmes expliqués pour cela.
alexgille est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h50.


 
 
 
 
Partenaires

Hébergement Web