Maison  >  Article  >  développement back-end  >  Comment implémenter la méthode de recherche binaire en php

Comment implémenter la méthode de recherche binaire en php

王林
王林original
2019-09-20 17:53:003324parcourir

Comment implémenter la méthode de recherche binaire en php

Implémentation PHP de la méthode de recherche binaire

Le tableau requis par la méthode de recherche binaire est un tableau ordonné, en supposant que notre tableau est un nombre croissant Tableau, nous devons d’abord trouver la position médiane du tableau.

1. Pour connaître la position médiane, vous devez connaître la position de départ et la position finale, puis retirer la valeur de la position médiane pour la comparer avec notre valeur.

2. Si la valeur médiane est supérieure à notre valeur donnée, cela signifie que notre valeur est avant la position médiane. À ce moment-là, nous devons la diviser à nouveau en deux parties, car elle est avant la position médiane. , donc la valeur que nous devons modifier est la valeur de la position finale. La valeur de la position finale à ce moment devrait être notre position médiane à ce moment.

3. Au contraire, si la valeur médiane est inférieure à la valeur que nous donnons, cela signifie que la valeur donnée est après la position médiane. À ce moment, la valeur de cette dernière partie doit être divisée. à nouveau en deux parties, car c'est après la valeur médiane, donc nous La valeur qui doit être modifiée est la valeur de la position de départ, qui devrait être notre position médiane à ce moment jusqu'à ce que nous trouvions la valeur spécifiée.

4. Ou la valeur intermédiaire est égale à la position de départ initiale, ou à la position finale (dans ce cas, la valeur donnée n'est pas trouvée)

Utilisons le code pour implémenter it

1. Implémentation de la boucle

function getValue($num,$arr)
{
//查找数组的中间位置
$length=count($arr);
$start=0;
$end=$length;
$middle=floor(($start+$end)/2);
//循环判断
while($start>$end-1)
{
if($arr[middle]==$num)
{
return middle+1;
}elseif($arr[middle]<$num)
{
//如果当前要查找的值比当前数组的中间值还要打,那么意味着该值在数组的后半段
//所以起始位置变成当前的middle的值,end位置不变。
$start=$middle;
$middle=floor(($start+$end)/2);
}else{
//反之
$end=$middle;
$middle=floor(($start+$end)/2);
}}
return false;
}

2. Implémentation récursive

/*
     * 从数组中获取元素值
     * @param1 int $num,要查找的目标值
     * @param2 array $arr,要查找的数组
     * @param3 int $start,查找的起始位置
     * @param4 int $end,查找的结束位置
     * @return mixed,找到了返回位置,没找到返回false
     */
     function getValue4($num,$arr,$start = 0,$end = 100){
        //采用二分法查找
        $middle = floor(($end + $start) / 2);

        //判断
        if($arr[$middle] == $num){
            //已经找到了,递归的出口
            return $middle + 1;
        }elseif($arr[$middle] < $num){
            //要查找的元素在数组的后半段
            $start = $middle + 1;
            //边界值
            if($start >= $end){
                //没有找到,但是已经超出边界值,递归出口
                return false;
            }
            //调用自己去查找:递归点
            return getValue4($num,$arr,$start,$end);    //getValue4($num,$arr,51,100)
        }else{
            //要查找的元素在数组的前半段
            $end = $middle - 1;
            //判断边界值
            if($end < 0)return false;

            //调用自己:递归点
            return getValue4($num,$arr,$start,$end);    //getValue4($num,$arr,0,49)
        }

        //都没有找到
        return false;
     }

Le contenu ci-dessus est à titre de référence seulement !

Tutoriel recommandé : Tutoriel vidéo PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn