日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

PHP二分法查找,MYSQL索引即为用了此查找

發(fā)布時(shí)間:2025/5/22 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP二分法查找,MYSQL索引即为用了此查找 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
算法:當(dāng)數(shù)據(jù)量很大適宜采用該方法。采用二分法查找時(shí),數(shù)據(jù)需是排好序的。主要思想是:(設(shè)查找的數(shù)組區(qū)間為array[low, high]) (1)確定該區(qū)間的中間位置K (2)將查找的值T與array[k]比較。若相等,查找成功返回此位置;否則確定新的查找區(qū)域,繼續(xù)二分查找。區(qū)域確定如下:a.array[k]>T 由數(shù)組的有序性可知array[k,k+1,……,high]>T;故新的區(qū)間為array[low,……,K-1]b.array[k]<T 類似上面查找區(qū)間為array[k+1,……,high]。每一次查找與中間值比較,可以確定是否查找成功,不成功當(dāng)前查找區(qū)間縮小一半,遞歸找,即可。時(shí)間復(fù)雜度:O(log2n)。 比如說我有排序好的數(shù)組$arr = [1,5,7,8,10,34,35,70,90],我想找里面的$key70 判斷取所有值的長度,對半/2這里有9個(gè)數(shù)字/2這里是4.5,當(dāng)然數(shù)組里也沒有4.5的下標(biāo),我們可以強(qiáng)制轉(zhuǎn)為intval這里得到的是4為基數(shù) 我們拿$arr[4]也就是這里的10再和$key70進(jìn)行對比,發(fā)現(xiàn)10是比70小的,所以我們再把下標(biāo)剛剛的4再加1再查找,這樣的話,又縮小了一半的查詢,但如果你想找的$key小于10,只要把4減1可以查找 PHP寫法 /**
? ? ? * 二分查找
? ? ? * @param Array $arr 待查找的數(shù)組
? ? ? * @param Int $key 要查找的關(guān)鍵字
? ? ? * @return Int
? ? ? */
? ? function bin_search(Array $arr,$key)
? ? {
? ? ? ? $high = count($arr);
? ? ? ? if($high <= 0)
? ? ? ? ? ? return 0;
? ? ? ? $low = 0;
? ? ? ? while($low <= $high)
? ? ? ? {? ? ?
? ? ? ? ? ? //當(dāng)前查找區(qū)間arr[low..high]非空
? ? ? ? ? ? ? $mid=intval(($low + $high) / 2);
? ? ? ? ? ? if($arr[$mid] == $key)?
? ? ? ? ? ? ? ? return $mid; //查找成功返回
? ? ? ? ? ? if($arr[$mid] > $key)
? ? ? ? ? ? ? ? $high = $mid - 1; //繼續(xù)在arr[low..mid-1]中查找
? ? ? ? ? ? else
? ? ? ? ? ? ? ? $low = $mid + 1; //繼續(xù)在arr[mid+1..high]中查找
? ? ? ? }
? ? ? ? return 0; //當(dāng)low>high時(shí)表示查找區(qū)間為空,查找失敗
? ? }
? ? $arr = array(1,2,4,6,10,40,50,80,100,110);
? ? echo bin_search($arr,80);

總結(jié)

以上是生活随笔為你收集整理的PHP二分法查找,MYSQL索引即为用了此查找的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。