码迷,mamicode.com
首页 > Web开发 > 详细

URL cache

时间:2015-09-08 00:20:28      阅读:144      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!