Je viens de lire Cet algorithme peut-il encore être considéré comme un algorithme de recherche binaire? et j'ai rappelé qu'il y a quelques années, j'ai écrit un indexeur / recherche de fichiers journaux pour trouver des entrées de journal dans de gros fichiers texte brut par date / heure.
En faisant cela, j'ai décidé d'essayer la recherche par interpolation (je ne savais pas que c'était comme ça, je suis tombé sur l'idée par moi-même). Ensuite, pour une raison quelconque, j'ai continué à l'idée d'alterner les étapes d'interpolation avec les étapes de division binaire: à l'étape 0, j'interpolais pour décider du point de test, puis à l'étape 1, je prenais le milieu exact, etc.
J'ai ensuite testé le système en utilisant la recherche d'interpolation pure, la recherche binaire pure et ma tentative de combinaison. L'approche alternative a été clairement gagnante, à la fois en temps et en nombre de tests requis avant de trouver un ensemble de temps choisis au hasard.
Inspiré par la question liée, je viens de faire une recherche rapide pour "recherche d'interpolation alternée et recherche binaire" et je n'ai rien trouvé. J'ai également essayé la "recherche d'interpolation couverte" comme suggéré dans mon commentaire sur l'une des réponses.
Suis-je tombé sur une chose connue? Y a-t-il une justification théorique pour qu'il soit plus rapide pour certains types de données? Les fichiers journaux étaient généralement volumineux pour l'époque (par exemple, 1 à 2 Go de texte avec peut-être 10 millions de lignes à rechercher), et la répartition des dates / heures en eux était complexe avec de fortes périodes d'activité, des heures de pointe générales et des périodes de silence. Mes tests de référence échantillonnés à partir d'une distribution uniforme des temps cibles à trouver.
la source
prefetcht0
instructions ) les deux possibilités pour l'itération NEXT avant de charger le point médian actuel, pour une recherche en mémoire sur du matériel x86 moderne. Vous ne pouvez pas faire cela si vous ne pouvez pas prévoir à l'avance les prochaines adresses de récupération. Les détails pratiques de mise en œuvre peuvent donc être importants, en dehors des considérations théoriques .