URL cache

转自:http://hihocoder.com/discuss/question/2154/

今天在hiho上看到一个题目,要求模拟浏览器的URL请求过程,有n个请求,本地有一个容量为m的cache。当浏览器请求URL时,先在cache里面查找,如果没有,从服务器请求,并把内容存入cache中。如果cache满了,则删除最早访问的内容。

朴素的做法是o(n * m)。

o(n * log(m))做法:

cache中的查找可以用一个堆或者二叉树实现,复杂度是log(n)。

删除最早的访问记录,可以用一个数组记录访问顺序。

具体:访问内容为

abc->123      vis[a]=1, vis[b]=2, vis[c] = 3,         h = 1, t = 3

abcd->1234     vis[a] = 1, vis[b] = 2, vis[c] = 3, vis[d] = 4,   h = 2, t = 4,   从map中删除a

abcdb->12345     vis[a] = 1, vis[b] = 5, vis[c] = 3, vis[d] = 4,   h = 3, t = 5  因为vis[a[2]] != 2,说明2不是最新的b的位置跳过b

abcdba->123456   vis[a] = 6, vis[b] = 5, vis[c] = 3, vis[d] = 4,   h = 4, t = 6  从map中删除c

代码:

s = 1
For i = 1..n
    If (lastVisit[ a[i] ] in [s,i])
        Print "Cache"
    Else
        cacheCnt = cacheCnt + 1;
        If (cacheCnt > m)        // 缓存已满
            s = s + 1            // 将该a[s]从cache中抛弃
        End If
        Print "Internet"
    End
    lastVisit[ a[i] ] = i    // 更新最后一次访问时间
    While (lastVisit[ a[s] ] != s)
        s = s + 1
    End While                // 更新s找到新的最早的访问记录
End For
时间: 2024-12-22 04:59:04

URL cache的相关文章

ASIHTTPRequest缓存策略download cache

本文为大家介绍了iOS开发ASIHTTPRequest使用download cache的内容,其中包括cache策略,存储策略,其他cache相关的特性,编写自己的cache等等内容. 从1.8版本开始,ASIDownloadCache和ASICacheDelegate的API改变了,你可能需要修改你的代码. 尤其是,cache策略的可用选项发生了改变,你现在可以对单一request使用结合的cache策略 ASIHTTPRequest可以自动缓存下载的数据,在很多情况下这很有用. 当你离线时,

[Vue-rx] Cache Remote Data Requests with RxJS and Vue.js

A Promise invokes a function which stores a value that will be passed to a callback. So when you wrap a Promise with an Observable, you'll always get that same value. This enables you to use the behavior as a caching mechanism when the Promises make

hiho_1086_browser_caching

题目 浏览器有一个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&g

python 訪问webservice

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">如今最流行的就是suds了,可是里面仍然有很多bug未修复.也好像没有人更新了</span> import sys from suds.client import Client sys.setrecursionlimit(1500) test_url = 'http://we

地道的 Python(二)

作者: Zhang Yang 列表推导 上文介绍了一个高逼格的创建字典的方法,那列表呢?根据蛋痛定律,它也一定有,但是它被起了一个非常蛋痛的名字,叫列表推导: 先看看这样的代码: li = [] for a in A: if a%2 != 0: li.append(a) 看到代码第一行的时候,小编已经不想再看下去了,是的,这才真正的万变不离 C 语言.蛋痛指数直冲云霄了.Python 里一行就应该搞定它 li = [a for a in A if a%2 != 0] 上文产生的列表包含:从列表A

非常好用的JQuery自动补全插件bigautocomplete

自动补全插件,有些功能有限,有些是老外做的,不支持中文.今天发现一个国人做的,叫做bigautocomplete,还不错. 官网下载地址:http://code.google.com/p/jquery-bigui/downloads/list 如果不想翻墙的话,可以从这里下载(已经转码为UTF-8):http://download.csdn.net/detail/clementad/8917219 使用步骤: 1.把两个js和css文件放到项目中: 2.在项目页面中引用: <script src

第三方苹果开发库之ASIHTTPRequest(翻译版)

本文转载至 http://www.cnblogs.com/daguo/archive/2012/08/03/2622090.html 来自:http://www.dreamingwish.com/dream-2011/apples-third-party-development-libraries-asihttprequest.html 第三方苹果开发库之ASIHTTPRequest ASIHttpRequest库简介.配置和安装 ASIHttpRequest-创建和执行request ASIH

微信二次分享不显示摘要和图片的解决方法

微信二次分享不显示摘要和图片的解决方法 解决不显示摘要和图片的问题,需要调用微信公众号的js-sdk的api ,需要前端和后台的配合, 后台需要返回 appid (公众号的appid ) . timestamp (生成签名的时间戳) .nonceStr (签名的随机字符串) . signature (签名* 可能出错): 1.绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"js接口安全域名".(特别提示不需要加上http或者h

自定义事件解决重复请求BUG

现在,组件化开发还是比较流行的,毕竟其优点相当突出.最近在开发一个组件的时候,遇到了一个很有意思的BUG... BUG的背景 最近在开发一个组件,好不容易开发好了转测试.然后,测试给我提了一个这样的bug,orz... 因为是一个组件,最大的好处就是可以随处复用,随处使用,然而,当一个页面用了多个组件,只有最后一个生效的时候,这个组件就没有什么意义了... BUG原因查找 这个组件的初始数据来源的接口是固定的,也就是说,页面内的所有这个组件在初始化的时候都会发出同样的请求,这里的请求是jsonp