国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
某人寫的php算法優(yōu)化
給你兩個分別有 5000 個元素的數(shù)組,計算他們的差集 
  -- 說白了也就是用 PHP 和你認(rèn)為最好的算法實現(xiàn) array_diff 的算法。 

初次接到這個題目,我發(fā)現(xiàn)這非常的簡單,于是按照以往的經(jīng)驗“隨便”寫了一個: 

function array_diff($array_1, $array_2) { 
    $diff = array(); 

    foreach ($array_1 as $k => $v1) { 
        $flag = false; 
        foreach ($array_2 as $v2) { 
            if ($flag = ($v1 == $v2)) { 
                break; 
            } 
        } 

        if (!$flag) { 
            $diff[$k] = $v1; 
        } 
    } 

    return $diff; 


雖然實現(xiàn)是可以的,但是發(fā)現(xiàn)這個函數(shù)的效率是慘不忍睹。于是我又重新考慮了下,并優(yōu)化了算法,第二個函數(shù)看起來是這個樣子的: 


function array_diff($array_1, $array_2) { 
    foreach ($array_1 as $key => $item) { 
        if (in_array($item, $array_2, true)) { 
            unset($array_1[$key]); 
        } 
    } 

    return $array_1; 


嗯,這次幾乎可以和原 array_diff 函數(shù)的速度媲美了。但是還有沒有更優(yōu)化的辦法呢?由 ChinaUnix 上的[url=http://bbs.chinaunix.net/viewthread.php?tid=938096]一篇文章(不好意思,作弊了),我發(fā)現(xiàn) PHP 竟然可以這樣寫: 

function array_diff($array_1, $array_2) { 
    $array_2 = array_flip($array_2); 
    foreach ($array_1 as $key => $item) { 
        if (isset($array_2[$item])) { 
            unset($array_1[$key]); 
        } 
     } 

    return $array_1; 


這個函數(shù)的效率非常的驚人,甚至比原 array_diff 函數(shù)的速度都要快。究其原因,我找到了解釋: 

因為鍵是進(jìn)行 HASH 組織的,查找很快; 
而 Value 只是由 Key 組織存放,本身沒有索引,每次查找都是遍歷。 

總結(jié) 

這雖然是 PHP 語言的一個小竅門,但在遍歷和對比數(shù)組的值上,如果需要對比值將其與鍵反轉(zhuǎn)的確比通常的值對值的比較效率要高得多。 

比如,上面的函數(shù)二需要調(diào)用 in_array 函數(shù)需要循環(huán)判斷是否在函數(shù)內(nèi);而函數(shù)三則僅僅判斷這個數(shù)組是否存在該鍵就可以了。 

加上數(shù)組鍵和值不同的組織索引方式,效率比想象的還高那就非??梢岳斫饬恕?/span>
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
編程語言PHP刪除數(shù)組中的空值的函數(shù)array_filter
php 數(shù)組排序?qū)崿F(xiàn)代碼
如何高效的遍歷數(shù)組?
php 經(jīng)典的算法題你懂的
PHP處理數(shù)組常用的幾個函數(shù)
PHP中常用的數(shù)組操作方法筆記整理
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服