Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1405 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [ocaml/algo] Comment représente-t-on une file en ocaml ?? :??:

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ocaml/algo] Comment représente-t-on une file en ocaml ?? :??:

n°921034
the_angel_​s
L'argent n'achete pas le temps
Posté le 12-12-2004 à 15:55:32  profilanswer
 

Je voudrais représenter une 'file' en ocaml...
Quelqu'un saurait comment ?
:heink:  
 :??:


Message édité par the_angel_s le 12-12-2004 à 16:36:36
mood
Publicité
Posté le 12-12-2004 à 15:55:32  profilanswer
 

n°921054
the_angel_​s
L'argent n'achete pas le temps
Posté le 12-12-2004 à 16:35:33  profilanswer
 

L'intérêt étant d'avoir une file avec une taille non fixée!
But :
Appliquer un traitement à la tête de la file, envoyer le résultat en queue de file, et itérer n fois (avec n fixé).

n°921088
nraynaud
lol
Posté le 12-12-2004 à 17:51:41  profilanswer
 

liste chaînée mutable avec sauvegarde du premier et dernier élément ?


---------------
trainoo.com, c'est fini
n°921089
Chronoklaz​m
Posté le 12-12-2004 à 17:58:43  profilanswer
 

J'ai ca en Scheme si tu veux (la syntaxe est similaire) :
 
C'est meme un generateur de file d'attente avec les operations en O(1) :)
 

Code :
  1. (define (make-file-attente)
  2.   (let ((file (cons '() '?)))
  3.     (define (this message . args)
  4.       (case message
  5.         ((vide?)
  6.          (null? (car file)))
  7.         ((premier)
  8.          (caar file))
  9.         ((enfiler!)
  10.          (if (this 'vide?)
  11.              (begin
  12.                (set-car! file (cons (car args) '()))
  13.                (set-cdr! file (car file)))
  14.              (begin
  15.                (set-cdr! (cdr file) (cons (car args) '()))
  16.                (set-cdr! file (cddr file)))))
  17.         ((defiler!)
  18.          (let ((r (this 'premier)))
  19.            (set-car! file (cdar file))
  20.            ; Pas la peine de nettoyer le cdr si la file est vide
  21.            r))
  22.         ((init)
  23.          (set-car! file '()))
  24.         (else
  25.          (error "Message inconnu :" message))))
  26.     this))


 
 :hello:


Message édité par Chronoklazm le 12-12-2004 à 18:01:50
n°922438
the_angel_​s
L'argent n'achete pas le temps
Posté le 14-12-2004 à 00:55:01  profilanswer
 

argh... ca fait longtemps que j'ai pas fait de scheme xD
et j'ai l'impression que qd j'avais appris le scheme (dr scheme), y'avait pas de "else" 8-)
=> n'empeche que si je comprenais ça, ce serait super génial... je vais donc tenter qd mm...  
 
quant à la solution d'une liste chainée mutable, je crois que l'énorme défaut là en ocaml, c'est que pour rajouter un élément à la fin d'une liste, il faut parcourir toute la liste... :s
 
si quelqu'un est curieux de savoir pourquoi je veux faire ça, c'est d'une part parce que j'aime bcp OCAML, d'autre part parce que j'ai envie de résoudre un casse-tête...
et enfin parce que ça m'entraine pour l'algo...
 
Pour ce que j'ai déjà fait et que je suis en train de faire : http://mythoughts.free.fr/ocaml/projet_en_cours/
=> pour l'instant, j'ai choisi de représenter la file avec un tableau et 2 entiers pointant l'un sur la tete et l'autre sur la queue...
(avec un tableau initialisé à 1000000 d'éléments...)
(l'accès à un élément du tableau se fasant en temps constant d'après mon prof de caml)


Message édité par the_angel_s le 14-12-2004 à 00:58:39
n°923275
nraynaud
lol
Posté le 14-12-2004 à 20:23:07  profilanswer
 

the_angel_s a écrit :

pour rajouter un élément à la fin d'une liste, il faut parcourir toute la liste... :s

Citation :

sauvegarde (...) dernier élément ?


[:petrus75]


---------------
trainoo.com, c'est fini
n°923391
the_angel_​s
L'argent n'achete pas le temps
Posté le 14-12-2004 à 22:55:09  profilanswer
 

Bon alors aujourd'hui j'ai appris qu'un module pour les files existait déjà... C'est le module "Queue"... Alors comme je n'avais vraiment pas pensé à traduire "File" par "Queue"...
Bon alors un ptit coup d'oeil dans le source... C'est représenté avec un enregistrement un peu bizarre... qui utilise le module Obj (qui n'a rien à voir avec les Objets => module "Oo" )
Bon... Je vais voir si c'est mieux que ma représentation avec un tableau... 8-)

n°924420
nraynaud
lol
Posté le 15-12-2004 à 20:15:09  profilanswer
 

iiiiiiiiiiiiiiiiirk  
 
[:kiki]


---------------
trainoo.com, c'est fini
n°924421
the_angel_​s
L'argent n'achete pas le temps
Posté le 15-12-2004 à 20:19:13  profilanswer
 

nraynaud a écrit :

iiiiiiiiiiiiiiiiirk  
[:kiki]


 
Pourquoi ??? ça fait quoi ?
tu trouves qu'il n'est pas très stable ou quoi ?
c'est vrai que je viens de faire quelques tests dessus, et Obj.magic, c'est vraiment quelque chose de MAGIQUE !
je fais la supposition que le niveau du langage descend qd on utilise Obj.magic...
=> (Obj.magic 1) && true - : bool = true  :pt1cable:  
=> ca me rappelle le C...  :heink:

n°924426
the_angel_​s
L'argent n'achete pas le temps
Posté le 15-12-2004 à 20:21:24  profilanswer
 

j'ai aussi re-regardé le source de Queue (queue.ml) ...
bah ça a l'air qd mm assez poussé...
Je fais confiance !
=> donc je reconverti tout ce que j'avais fait avec mon type de file (tout pourri avec un tableau de taille fixe...) en ce type Queue.t qui semble bien plus efficace...

mood
Publicité
Posté le 15-12-2004 à 20:21:24  profilanswer
 

n°924427
nraynaud
lol
Posté le 15-12-2004 à 20:22:06  profilanswer
 

c'est interdit d'utiliser Obj.magic.
 
C'est interdit d'utiliser Obj tout court, parce que sinon, je frappe !


---------------
trainoo.com, c'est fini
n°924430
the_angel_​s
L'argent n'achete pas le temps
Posté le 15-12-2004 à 20:26:18  profilanswer
 

mais dis pk ?!!  :??:


Message édité par the_angel_s le 15-12-2004 à 20:26:39
n°924432
the_angel_​s
L'argent n'achete pas le temps
Posté le 15-12-2004 à 20:28:33  profilanswer
 

dans le code source  
let create () = {
  length = 0;
  tail = Obj.magic None
}  
=> "Obj.magic None" est utilisé... sans doute parce que l'auteur ne savait pas quoi d'autre mettre dedans :??:

n°924436
nraynaud
lol
Posté le 15-12-2004 à 20:30:12  profilanswer
 

passke c'est mal, c'est même marqué dans la doc :
http://caml.inria.fr/ocaml/htmlman/libref/Obj.html


---------------
trainoo.com, c'est fini
n°924439
the_angel_​s
L'argent n'achete pas le temps
Posté le 15-12-2004 à 20:36:25  profilanswer
 

nraynaud a écrit :

passke c'est mal, c'est même marqué dans la doc :
http://caml.inria.fr/ocaml/htmlman/libref/Obj.html


ah oui c'est vrai :p
mais comme le module Queue est natif, chuis innocent :p
Et l'auteur de Queue a le droit :p
Oh et puis, tant que ca marche, chuis content  :D  
(je n'utiliserai pas Obj, alors ne me frappe paaaaaaas ! oscouuuuuuur  :pt1cable: )

n°924441
nraynaud
lol
Posté le 15-12-2004 à 20:42:15  profilanswer
 

j'vais peut-être même te taper préventivement ... [:gratgrat]


---------------
trainoo.com, c'est fini
n°924444
the_angel_​s
L'argent n'achete pas le temps
Posté le 15-12-2004 à 20:45:21  profilanswer
 

méchant !!!!!!!!!!!!!!
xD
 
dis, tu saurais (par hasard :??:) ce qui se passe si la taille de la file dépasse max_int ? :??:

n°924446
nraynaud
lol
Posté le 15-12-2004 à 20:47:13  profilanswer
 

tu fais voir le code source stp ?


---------------
trainoo.com, c'est fini
n°924447
the_angel_​s
L'argent n'achete pas le temps
Posté le 15-12-2004 à 20:49:08  profilanswer
 

exception Empty
 
(* O'Caml currently does not allow the components of a sum type to be
   mutable. Yet, for optimal space efficiency, we must have cons cells
   whose [next] field is mutable. This leads us to define a type of
   cyclic lists, so as to eliminate the [Nil] case and the sum
   type. *)
 
type 'a cell = {
    content: 'a;
    mutable next: 'a cell
  }  
 
(* A queue is a reference to either nothing or some cell of a cyclic
   list. By convention, that cell is to be viewed as the last cell in
   the queue. The first cell in the queue is then found in constant
   time: it is the next cell in the cyclic list. The queue's length is
   also recorded, so as to make [length] a constant-time operation.
 
   The [tail] field should really be of type ['a cell option], but
   then it would be [None] when [length] is 0 and [Some] otherwise,
   leading to redundant memory allocation and accesses. We avoid this
   overhead by filling [tail] with a dummy value when [length] is 0.
   Of course, this requires bending the type system's arm slightly,
   because it does not have dependent sums. *)
 
type 'a t = {
    mutable length: int;
    mutable tail: 'a cell
  }
 
Source en entier : http://mythoughts.free.fr/queue.ml


Message édité par the_angel_s le 15-12-2004 à 20:50:54
n°924456
nraynaud
lol
Posté le 15-12-2004 à 21:06:20  profilanswer
 

c'est pour gagner de l'espace mémoire qu'il a fait ça, mais c'est pas top :/
 
Il aurait du faire un  
type 'a MayBe = Some of 'a | None
 
et typer la queue comme ça :
type 'a t = {
    mutable length: int;
    mutable tail: MayBe ('a cell)
  }


---------------
trainoo.com, c'est fini
n°924535
the_angel_​s
L'argent n'achete pas le temps
Posté le 15-12-2004 à 21:47:14  profilanswer
 

nraynaud a écrit :

c'est pour gagner de l'espace mémoire qu'il a fait ça, mais c'est pas top :/
 
Il aurait du faire un  
type 'a MayBe = Some of 'a | None
 
et typer la queue comme ça :
type 'a t = {
    mutable length: int;
    mutable tail: MayBe ('a cell)
  }


ça j'y avais pensé :p
mais... tu ne m'as pas dit ce qui se passerait si la taille de la file depasse max_int...  :heink:  
 :sarcastic:

n°924555
nraynaud
lol
Posté le 15-12-2004 à 22:14:46  profilanswer
 

heu, j'ai oublié la question ...
J'ai répondu à ce que j'avais envie.
 
'retourne voir et je te dis.


---------------
trainoo.com, c'est fini
n°924561
nraynaud
lol
Posté le 15-12-2004 à 22:18:54  profilanswer
 

ayé, 'me souviens : ça fait le tour, parce que en o'caml, y'a pas d'exceptions synchrones (la flemme de réexpliquer pourquoi va voir sur la mailing list, X. Leroy l'avait expliqué à propos des réels).
 
http://pauillac.inria.fr/~levy/x/m2/0bis/


---------------
trainoo.com, c'est fini
n°924592
the_angel_​s
L'argent n'achete pas le temps
Posté le 15-12-2004 à 22:49:28  profilanswer
 

mouais...
en tous cas, je pense que la file continue tranquillement sa route, son compteur mutable "length" arrivera du côté des entiers négatifs...
certaines fonctions lèveront l'exception Empty, et d'autres (comme "for" par ex) ne feront pas ce qu'on attendrait d'elles...
bref... en tous cas, je viens de terminer ma conversion (file avec un tableau en file avec Queue), il ne me reste plus qu'à traiter la gestion des fichiers pour stocker mes résultats intermédiaire :D
(je fais un programme de recherche de toutes les solutions d'un casse-tête, ou peut-être devrais-je l'appeler un "passe-temps"... :p)
Merci nraynaud, en tous cas ;)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [ocaml/algo] Comment représente-t-on une file en ocaml ?? :??:

 

Sujets relatifs
recupération d'un input type = file[ALGO]prog en Algo
[OCAML] Quels sont les bons sites pour Ocaml ?Connaitre l'algo de cryptage utilisé
aidez moi dans un exercice d algo svpAlgo Caisse de magasin !
[jsp]problème à la compilation : class file contains wrong class[Ocaml] Vive Ocaml ! (*au fait, pk y'a pas une section ocaml???*)
<input type="file"> mais sans envoyer le fichier ... possible ?Representation dynamique d'une file !!!
Plus de sujets relatifs à : [ocaml/algo] Comment représente-t-on une file en ocaml ?? :??:


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR