BSEARCH |
Recherche binaire |
|---|---|
Perl |
POSIX |
Syntaxe
| sub POSIX::bsearch($clef, $base, $nmemb, $size, $elem1, $elem2); |
Paramètres
| Nom | Description |
|---|---|
| $clef | Ce paramètre permet d'indiquer l'adresse de la valeur à rechercher |
| $base | Ce paramètre permet d'indiquer l'adresse du tableau |
| $nmemb | Ce paramètre permet d'indiquer le nombre d'item que contient le tableau |
| $size | Ce paramètre permet d'indiquer la taille d'un item du tableau |
| $elem1 | Ce paramètre permet d'indiquer le premier item fonction a utiliser pour la comparaison |
| $elem2 | Ce paramètre permet d'indiquer le deuxième item fonction a utiliser pour la comparaison |
Description
Cette fonction effectue une recherche binaire (dichotomique) dans un tableau. Officiellement, cette fonction ne fonctionne pas. Il est recommandé d'utilisé «Search::Dict».
Remarques
- Fonction censée effectuer une recherche binaire en C : La fonction POSIX::bsearch est inspirée de la fonction C standard bsearch() qui permet de chercher efficacement une valeur dans un tableau trié, en utilisant la méthode dichotomique. En théorie, cela permet une complexité logarithmique (O(log n)).
- Non fonctionnelle en pratique dans Perl : Selon la documentation Perl et les retours de la communauté, POSIX::bsearch n'est pas opérationnelle. Elle est souvent déclarée mais pas implémentée correctement dans la bibliothèque POSIX, ce qui la rend inutilisable dans les scripts Perl classiques.
- Syntaxe complexe et très bas niveau : Les paramètres attendus, comme les adresses mémoire ($clef, $base), la taille en octets d'un élément, et deux fonctions de comparaison ($elem1, $elem2), n'ont pas de sens direct en Perl, étant un langage de haut niveau et non typé statiquement.
- Inadaptée à la philosophie Perl : Perl privilégie la souplesse et l'expressivité sur la gestion manuelle de mémoire et de pointeurs. Tenter de transposer la logique de bsearch() en C dans Perl contredit les paradigmes idiomatiques du langage, rendant son usage confus et risqué.
- L'alternative moderne est Search::Dict ou un tri + boucle manuelle : Puisque POSIX::bsearch ne fonctionne pas, la documentation recommande explicitement d'utiliser des modules comme Search::Dict, ou tout simplement d'écrire une recherche dichotomique personnalisée dans une liste triée.
- Problèmes de compatibilité avec les références et structures Perl : bsearch() en C travaille avec des pointeurs et des tailles fixes, ce qui entre en conflit avec la gestion dynamique de structures de données en Perl. Les tableaux Perl ne garantissent ni alignement mémoire ni taille fixe, rendant cette approche inapplicable.
- Inexistence de typage statique empêche l'optimisation : Perl n'ayant pas de typage statique comme en C, il est impossible pour bsearch de garantir que tous les éléments du tableau sont de même taille, ou même comparables. Cela empêche toute forme d'optimisation mémoire ou d'accès structuré comme prévu.
- Intéressante pour comprendre l'héritage POSIX dans Perl : Bien que POSIX::bsearch soit inutilisable, elle représente l'effort d'alignement de Perl sur certaines interfaces POSIX. Elle illustre les limites de l'importation directe de fonctions système dans un langage interprété de haut niveau.
Voir également
Langage de programmation - Fonction C pour Linux - bsearch
Dernière mise à jour : Dimanche, le 18 octobre 2015