1. 程式人生 > >靜態變量數組實現LRU算法

靜態變量數組實現LRU算法

nsh unset 是我 ima rec ast 變量 index 去除

LRU算法的解釋詳情請見 https://baike.baidu.com/item/LRU/1269842

這裏百度百科給出的比較詳細,然後後面有一個例子 說

LRU(least recently used)最近最少使用。 假設 序列為 4 3 4 2 3 1 4 2 物理塊有3個 則 首輪 4調入內存 4 次輪 3調入內存 3 4 之後 4調入內存 4 3 之後 2調入內存 2 4 3 之後 3調入內存 3 2 4 之後 1調入內存 1 3 2(因為最少使用的是4,所以丟棄4) 之後 4調入內存 4 1 3(原理同上) 最後 2調入內存 2 4 1 又如: 考慮下述頁面走向: 1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6 1 1 2 2 1 3 3 2 1 4 4 3 2 1 2 2 4 3 1 1 1 2 4 3 5 5 1 2 4 6 6 5 1 2 2 2 6 5 1 1 1 2 6 5 2 2 1 6 5 3 3 2 1 6 7 7 3 2 1 6 6 7 3 2 3 3 6 7 2 2 2 3 6 7 1 1 2 3 6 2 2 1 3 6 3 3 2 1 6 6 6 3 2 1 那麽想達到這樣的效果 用PHP如何實現呢? 我給出核心函數如下
<?php
function lru($into_data="") { static $array=array(); $max_length=5;//最大長度 if(empty($array)) { $array[]=$into_data; }else { //說明不為空 不為空則進行查找 $find_index=array_search($into_data, $array); if($find_index!==false) { //說明找到了 找到的話就放到第一個來
unset($array[$find_index]);//去掉這個 拿到第一個去 array_unshift($array,$into_data);//放到第一個去 }else { //沒找到 判斷是否達到最大長度 如果達到 去掉最後一個 if(count($array)==$max_length-1) { //到達最大長度 // 去除最後一個 array_pop($array
); array_unshift($array,$into_data);//放到第一個去 }else { array_unshift($array,$into_data);//放到第一個去 } } $array=array_values($array);//數組重置 } return $array; } ?>

調用代碼如下:

<?php
$array=array(1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6);
foreach ($array as $key => $v)
{
    $now=lru($v);
    echo ($v)." ".(implode(" ",$now))."<br/>";
}
?>

效果如下:

技術分享

結果如下:

技術分享

正是我們想要的!

靜態變量數組實現LRU算法