/**
* LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页
*/
class LFU_Cache{
private $array_lfu = array();
private $array_count = array();
private $max_size = 0;
function __construct($size)
{
// 缓存最大存储
$this->max_size = $size;
}
public function set_value($key, $value)
{
// 如果存在,则存入值
if (array_key_exists($key, $this->array_lfu)) {
$this->array_lfu[$key] = $value;
}else if(count($this->array_lfu) < $this->max_size){
$this->array_lfu[$key] = $value;
}else{
// 找出最少使用的key,删除它
$min_key = '';
$min_count = PHP_INT_MAX;
foreach($this->array_count as $key=>$value){
if($value < $min_count){
$min_key = $key;
$min_count = $value;
}
}
unset($this->array_lfu[$min_key]);
unset($this->array_count[$min_key]);
}
// 次数加一
if (array_key_exists($key, $this->array_count)) {
$this->array_count[$key] = $this->array_count[$key] + 1;
}else{
$this->array_count[$key] = 1;
}
}
public function get_value($key)
{
$ret_value = false;
if (array_key_exists($key, $this->array_lfu)) {
$ret_value = $this->array_lfu[$key];
$this->array_count[$key] = $this->array_count[$key] + 1;
}
return $ret_value;
}
public function vardump_cache()
{
var_dump($this->array_lfu);
}
}
$cache = new LFU_Cache(5);
$cache->set_value("01", "01");
$cache->get_value('01');
$cache->set_value("02", "02");
$cache->set_value("03", "03");
$cache->set_value("04", "04");
$cache->set_value("05", "05");
$cache->set_value("03", "33");
$cache->vardump_cache();
$cache->set_value("06", "06");
$cache->set_value("07", "07");
$cache->vardump_cache();
LFU算法的PHP实现
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 最近几天一直再抢红包,发红包,分析了抢红包结果: XX 领取了 11.26元 XX 领取了 50.29元 XX 领...
- 最近几天一直再抢红包,发红包,分析了抢红包结果:XX 领取了 11.26元XX 领取了 50.29元XX 领取了 ...