• 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>,以及一个 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<iostream>
    #include<stdio.h>
    #include<algorithm>
    #include<unordered_map>
    #include<list>
    #include<string>
    #include<set>
    using namespace std;
    list<string> cache;
    unordered_map<string, list<string>::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
    ");
    		}
    		else{
    			cache.erase(str_it_map[url]);
    			cache.push_front(url);
    			str_it_map[url] = cache.begin();
    			printf("Cache
    ");
    		}
    		
    	}
    	return 0;
    }
    
  • 相关阅读:
    FluentValidation 验证框架笔记1
    AutoMapper 笔记1
    MediatR框架笔记1
    vscode调试python时提示无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的解决方法
    Selenium使用自带浏览器自动化
    Selenium启动Chrome插件(Chrome Extensions)
    Gitee,Github 图片转直链
    CentOS 7.3 修改root密码 passwd: Authentication token manipulation error
    阿里云服务器 被入侵植入dhpcd导致cpu飙升100%问题
    Github 切换分支
  • 原文地址:https://www.cnblogs.com/gtarcoder/p/5548029.html
Copyright © 2020-2023  润新知