博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hiho_1086_browser_caching
阅读量:6974 次
发布时间:2019-06-27

本文共 1332 字,大约阅读时间需要 4 分钟。

题目

    浏览器有一个cache,可以存放M(M <= 5000) 个url地址(url为长度小于30的字符串)。现在进行N(N <= 20000)次访问,每一个访问,如果访问的url在cache中存在,则输出Cache,如果不在cache中存在,输出Internet,且从cache中删除一个最近最少访问的url,然后将该新访问的url添加到cache中。

分析

    LRU cache类似的题目,维持一个unordered_map记录< url, iterator in cache list>,以及一个 list< string> 用作cache(因为list相比较vector,deque,queue等容器,它从中间删除一个元素的时间复杂度为O(1)). 

    如果url在< url, iterator in list>中存在,则将url在list中的节点提前到list的头部,并更新 < url, iterator in list>;     如果url在容器中不存在,(1)如果unordered_map< url, iterator in list>的大小为M,则需要删除list中尾部的url,同时将 unordered_map< url, iterator in list>中对应的项一块删除。(2)如果unordered_map< url, iterator in list>的大小小于M,则直接加入list头部,并设置unordered_map< url, iterator in list>

实现

 

#include
#include
#include
#include
#include
#include
#include
using namespace std;list
cache;unordered_map
::iterator> str_it_map;int main(){ int n, m; char url[50]; scanf("%d %d", &n, &m); getchar(); for (int i = 0; i < n; i++){ scanf("%s", url); if (str_it_map.find(url) == str_it_map.end()){ if (str_it_map.size() == m){ str_it_map.erase(*(--cache.end())); cache.erase(--cache.end()); } cache.push_front(url); str_it_map[url] = cache.begin(); printf("Internet\n"); } else{ cache.erase(str_it_map[url]); cache.push_front(url); str_it_map[url] = cache.begin(); printf("Cache\n"); } } return 0;}

 

转载地址:http://mhesl.baihongyu.com/

你可能感兴趣的文章
oracle 写declare例子
查看>>
某熊周刊系列:一周推荐外文技术资料(2.5)
查看>>
七牛云对象存储简单使用心得
查看>>
IBM发布基于Kubernetes和Cloud Foundry的混合云计算平台IBM Cloud Private
查看>>
高效使用微软Azure服务总线的消息功能
查看>>
C++ 20的悲叹,未出世就被群嘲“劝退”
查看>>
干净架构在 Web 服务开发中的实践
查看>>
微软Windows Core OS被曝应用了开源组件
查看>>
Build 2018大会:.NET概述和路线图
查看>>
6 款 Javascript 的图像处理库
查看>>
Netflix是如何针对云构建和部署代码的
查看>>
为所有PHP-FPM容器构建单独的Nginx Docker镜像
查看>>
您的公司能从渐进式网页应用中受益吗?
查看>>
Python 2寿命即将终结,在此之前你需要做些什么?
查看>>
Bazel发布Beta版本,增加对Groovy、Rust和Scala语言的支持
查看>>
重构到更深层的模型
查看>>
Lodash,你正在使用的JavaScript库
查看>>
敏捷宣言和企业Scrum作者Mike Beedle去世
查看>>
简析Uber的可伸缩监控:uMonitor和Neris
查看>>
ChakraCore现在可以在Linux和Mac OS上运行了
查看>>