首页 > Web开发 > 详细

URL cache

时间:2015-09-08 00:19:27      阅读:315      评论:0      收藏:0      [点我收藏+]

转自: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

 

URL cache

原文:http://www.cnblogs.com/ywys/p/4790146.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!