recherche dichotomique sur chaîne de caractères

recherche dichotomique sur chaîne de caractères - Perl - Programmation

Marsh Posté le 12-04-2006 à 18:31:51    

Bonjour à tous,
 
Je ne pensais pas rencontrer ce genre de problème en Perl un jour, mais là, j' :ouch: .  
 
Je dispose d'un lexique de noms propres, une forme par ligne dans un fichier texte trié par les bons soins de la fonction sort du plus petit au plus grand. Dans ce fichier, "Allemagne de l'Est"  se situe avant "Allemagne".
 
Le problème, c'est que quand je fais une recherche dichotomique sur ce fichier, j'utilise la fonction lt pour savoir si le mot que je cherche est situé avant ou arpès le mot que je teste, et que cette fonction considère que la forme "Allemagne" est plus petite que la forme "Allemagne de l'Est". Résultat, à chaque fois que j'ai une forme simple et une forme composée à partir de celle-ci dans mon lexique, ma recherche n'aboutit pas.
 
voici le code de ma recherche:
 
my ($forme1) = shift @_;
 
 #initialisation des variables pour la recherche dichotomique
 my ($debut)=0;
 my ($fin)=$#lexique_NP;
 my ($tampon)=0;
 my ($milieu);
   
 #comparer les deux listes
 while($debut<=$fin) {
   
  $milieu= ($debut+$fin)/2;
  $milieu=~s/(.*),.*/$1/;
   
  chomp $lexique_NP[$milieu];
   
  #si la forme est identifiée, modifier la valeur de tampon  
  if($forme1=~/^$lexique_NP[$milieu]$/i){
   $tampon=1;
   $debut=$fin+1;
   }
   
  elsif($forme1 lt $lexique_NP[$milieu]){
    $fin=$milieu-1;
  }
   
  else{
   $debut=$milieu+1;
  }
   
 }
 return($tampon);
 
Je ne vois pas comment faire ma comparaison sans lt, quelqu'un pour m'éclairer?
 
Merci par avance

Reply

Marsh Posté le 12-04-2006 à 18:31:51   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed