cs_leonard14
Messages postés1Date d'inscriptiondimanche 11 janvier 2009StatutMembreDernière intervention11 janvier 2009 11 janv. 2009 à 09:48
Peut-on m'expliquer comment lancer la recherche avec le programme?
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 28 déc. 2004 à 21:34
C'est gadget, car entre temps tu as 40 secondes pour réfléchir. Et comme le prog prend moins de 40 secondes, tu vois ce que je veux dire... Mais ce peut tout à fait être une idée.
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 28 déc. 2004 à 15:58
Le prog est très bien, mais un petit Application.ProcessMessages pendant la recherche serait bien ;-)
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 22 déc. 2004 à 13:08
Evidemment... Le jour où la liste des mots sera complètement terminée, ce prog rivalisera avec tout ce qui existe. Bien sûr que le programme ne trouve pas les vrais bon mots, mais ça, je n'y suis pour rien. Faudrait être 500 000 pour lister tous les mots en moins d'une journée. Pour l'instant, faut faire avec... et ce programme est tout à fait fonctionnel ! De ce fait, il peut très bien servir comme entraînement, sans nécessairement rechercher les performances dignes d'un grand cérébral des mots.
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 19 déc. 2004 à 17:11
Je ne connaissais pas du tout cette fonction. En fait, pour justifier mon choix, c'est que la classe TStringList cache une procédure QuickSort (non publiée) qui utilise mes mémorisations avec chaînes. N'ayant jamais croisé Exchange jusqu'à ton commentaire... points de suspension. La technique m'avait inspiré le code source N°22063.
Et comme on est prudent, on rajoutera:
BeginUpdate;
try
...
finally
EndUpdate;
end;
On ne sait jamais.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 19 déc. 2004 à 13:37
Stg est bien une référence sur un objet, n'est-ce pas ?
Alors pourquoi ajouter le mot clé Var ?
La classe TStrings dispose d'une méthode Exchange hautement performante pour réaliser des permutations.
Et comme ici, tu n'es pas dans la cadre d'un "banal" tableau de données, il vaut mieux utiliser cette méthode exchange.
Résultat, sur ma machine et une liste de 10000 éléments :
1- ta méthode de permutation : 3140 Msec
2- Avec la méthode Exchange : 1375 Msec
Le code utilisé :
procedure TForm1.ReverseSort(List: TStrings);
var
i: integer;
begin
with List do
begin
BeginUpdate;
for i := 0 to Count div 2 do
Exchange(i, Count - 1 - i);
EndUpdate;
end;
end;
Même sans utiliser BeginUpdate et EndUpdate, la méthode Exchange est plus performante de 30% par rapport à une routine de permutation classique.
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 19 déc. 2004 à 11:45
Il manque une petite ligne de code. Cruel oubli qui ne mérite pas de MAJ.
procedure ReverseSort(var Stg:TStringList);
var
x, Cnt : integer;
s : string;
begin
Cnt:=Stg.Count;
{Celle là ==>} if Stg.Count>0 then
for x:=0 to (Cnt div 2) do
begin
s:=Stg[Cnt-x-1];
Stg[Cnt-x-1]:=Stg[x];
Stg[x]:=s;
end;
end;
11 janv. 2009 à 09:48
28 déc. 2004 à 21:34
28 déc. 2004 à 15:58
22 déc. 2004 à 13:08
19 déc. 2004 à 17:11
Et comme on est prudent, on rajoutera:
BeginUpdate;
try
...
finally
EndUpdate;
end;
On ne sait jamais.
19 déc. 2004 à 13:37
Alors pourquoi ajouter le mot clé Var ?
La classe TStrings dispose d'une méthode Exchange hautement performante pour réaliser des permutations.
Et comme ici, tu n'es pas dans la cadre d'un "banal" tableau de données, il vaut mieux utiliser cette méthode exchange.
Résultat, sur ma machine et une liste de 10000 éléments :
1- ta méthode de permutation : 3140 Msec
2- Avec la méthode Exchange : 1375 Msec
Le code utilisé :
procedure TForm1.ReverseSort(List: TStrings);
var
i: integer;
begin
with List do
begin
BeginUpdate;
for i := 0 to Count div 2 do
Exchange(i, Count - 1 - i);
EndUpdate;
end;
end;
Même sans utiliser BeginUpdate et EndUpdate, la méthode Exchange est plus performante de 30% par rapport à une routine de permutation classique.
19 déc. 2004 à 11:45
procedure ReverseSort(var Stg:TStringList);
var
x, Cnt : integer;
s : string;
begin
Cnt:=Stg.Count;
{Celle là ==>} if Stg.Count>0 then
for x:=0 to (Cnt div 2) do
begin
s:=Stg[Cnt-x-1];
Stg[Cnt-x-1]:=Stg[x];
Stg[x]:=s;
end;
end;