php二分查找二種實(shí)現(xiàn)示例
php二分查找示例
二分查找常用寫(xiě)法有遞歸和非遞歸,在尋找中值的時(shí)候,可以用插值法代替求中值法。
當(dāng)有序數(shù)組中的數(shù)據(jù)均勻遞增時(shí),采用插值方法可以將算法復(fù)雜度從中值法的lgN減小到lglgN
/**
* 二分查找遞歸解法
* @param type $subject
* @param type $start
* @param type $end
* @param type $key
* @return boolean
*/
function binarySearch_r($subject, $start, $end, $key)
{
if ( $start >= $end ) return FALSE;
$mid = getMidKey($subject, $start, $end, $key);
if ( $subject[$mid] == $key ) return $mid;
if ( $key > $subject[$mid] ) {
return binarySearch($subject, $mid, $end, $key);
}
if ( $key <= $subject[$mid] ) {
return binarySearch($subject, $start, $mid, $key);
}
}
/**
* 二分查找的非遞歸算法
* @param type $subject
* @param type $n
* @param type $key
*/
function binarySearch_nr($subject, $n, $key)
{
$low = 0;
$high = $n;
while ( $low <= $high ) {
$mid = getMidKey($subject, $low, $high, $key);
if ( $subject[$mid] == $key ) return $mid;
if ( $subject[$mid] < $key ) {
$low = $mid + 1;
}
if ( $subject[$mid] > $key ) {
$high = $mid - 1;
}
}
}
function getMidKey($subject, $low, $high, $key)
{
/**
* 取中值算法1 取中值 不用 ($low+$high)/2的方式是因?yàn)?防止low和high較大時(shí)候,產(chǎn)生溢出....
*/
//return round($low + ($high - $low) / 2);
/**
* 經(jīng)過(guò)改進(jìn)的插值算法求中值,當(dāng)數(shù)值分布均勻情況下,再降低算法復(fù)雜度到lglgN
* 取中值算法2
*/
return round( (($key - $subject[$low]) / ($subject[$high] - $subject[$low])*($high-$low) ) );
}
- 使用PHP實(shí)現(xiàn)二分查找算法代碼分享
- PHP 冒泡排序 二分查找 順序查找 二維數(shù)組排序算法函數(shù)的詳解
- php二分法在IP地址查詢(xún)中的應(yīng)用
- 深入理解PHP幾個(gè)算法:PHP冒泡、PHP二分法、PHP求素?cái)?shù)、PHP乘法表
- PHP字符串逆序排列實(shí)現(xiàn)方法小結(jié)【strrev函數(shù),二分法,循環(huán)法,遞歸法】
- php順序查找和二分查找示例
- php 數(shù)組二分法查找函數(shù)代碼
- php數(shù)據(jù)結(jié)構(gòu)與算法(PHP描述) 查找與二分法查找
- php中二分法查找算法實(shí)例分析
- 數(shù)據(jù)結(jié)構(gòu)之利用PHP實(shí)現(xiàn)二分搜索樹(shù)
相關(guān)文章
thinkPHP框架實(shí)現(xiàn)類(lèi)似java過(guò)濾器的簡(jiǎn)單方法示例
這篇文章主要介紹了thinkPHP框架實(shí)現(xiàn)類(lèi)似java過(guò)濾器的簡(jiǎn)單方法,結(jié)合實(shí)例形式分析了thinkPHP基于繼承實(shí)現(xiàn)的登錄驗(yàn)證功能相關(guān)操作方法,需要的朋友可以參考下2018-09-09
PHP通用分頁(yè)類(lèi)page.php[仿google分頁(yè)]
PHP通用分頁(yè)類(lèi)。本代碼是用于分頁(yè)用的,稍做修改可用于各種程序。 使用方式請(qǐng)參考本人文章。2008-08-08
PHP將URL轉(zhuǎn)換成短網(wǎng)址的算法分享
短網(wǎng)址(Short URL)顧名思義就是在形式上比較短的網(wǎng)址。在Web 2.0的今天,不得不說(shuō)這是一個(gè)潮流。目前已經(jīng)有許多類(lèi)似服務(wù),借助短網(wǎng)址您可以用簡(jiǎn)短的網(wǎng)址替代原來(lái)冗長(zhǎng)的網(wǎng)址,讓使用者可以更容易的分享鏈接,下面來(lái)看看如何用PHP實(shí)現(xiàn)這個(gè)功能,有需要的朋友們可以參考。2016-09-09
Laravel 5.5中為響應(yīng)請(qǐng)求提供的可響應(yīng)接口詳解
這篇文章主要給大家介紹了關(guān)于Laravel 5.5中為響應(yīng)請(qǐng)求提供的可響應(yīng)接口的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
PHP驗(yàn)證信用卡卡號(hào)是否正確函數(shù)
這篇文章主要介紹了PHP驗(yàn)證信用卡卡號(hào)是否正確函數(shù),本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-05-05

