读取内存数据问题
2011-05-12 13:17
253 查看
哎,看来一天写一篇算法有点不是很可能哦,利用中午时间把一道网上的百度笔试题写下嘿嘿
题目如下:
在处理磁盘数据时,需要首先将其读入内存才能进行处理。如果要读取的数据已经在内存中,则可以直接 访问内存。通常来说内存是有限的,因此要读取新的数据时必须覆盖内存中一部分原有的数据。假设现在有n块同样大小的数据,内存一共可以容纳m块数据。现在给出 一系列对这些数据的读取请求,要求它们必须按照给定的顺序被读取,同时要求读取磁盘 的次数尽可能地少。请简述一个策略满足这样的要求。
整个系统分为三部分:
1.内存,可以存放m块数据
2.外存磁盘,有n块数据
3.数据队列,存放了数据读取的顺序 (一系列对数据的读取请求)
例如n为3 (1,2,3) 此时 数据队列可能是 (1,2,1,3,2,2)等等
内存呢,可以有两种状态
1.内存未满
2.内存已满
策略:
一、如果内存未满,对于要读取的数据,首先查找内存中是否已经存在,如果存在则直接从内存中读取,如果不存在则从硬盘中读取,这样既可以防止内存中有重复数据出现,又能尽可能少的读取磁盘数据
二、如果内存已经满,就是n>m时呗,这时候对于读取的数据,首先查找内存中是否已经存在,如果存在则直接读取内存中的数据,如果不存在,则要替换内存中的数据,即旧的被移走,新的数据移进。
其中替换算法有:
内存中的m个数据,依次检查待读的n-m个数据,是否在内存中存在,如果存在则内存中的相应数据不能替换,对于内存中的数据没有对应的n-m个数据的可以替换。
只可以保证尽可能少的读取磁盘数据。
这个题,按照数据队列读数据时,内存中有的就直接从内存中读取,没有的就从磁盘中读取,其中还涉及到内存是否已满时操作的差异,如果内存已满则要用旧的替换新的。
题目如下:
在处理磁盘数据时,需要首先将其读入内存才能进行处理。如果要读取的数据已经在内存中,则可以直接 访问内存。通常来说内存是有限的,因此要读取新的数据时必须覆盖内存中一部分原有的数据。假设现在有n块同样大小的数据,内存一共可以容纳m块数据。现在给出 一系列对这些数据的读取请求,要求它们必须按照给定的顺序被读取,同时要求读取磁盘 的次数尽可能地少。请简述一个策略满足这样的要求。
整个系统分为三部分:
1.内存,可以存放m块数据
2.外存磁盘,有n块数据
3.数据队列,存放了数据读取的顺序 (一系列对数据的读取请求)
例如n为3 (1,2,3) 此时 数据队列可能是 (1,2,1,3,2,2)等等
内存呢,可以有两种状态
1.内存未满
2.内存已满
策略:
一、如果内存未满,对于要读取的数据,首先查找内存中是否已经存在,如果存在则直接从内存中读取,如果不存在则从硬盘中读取,这样既可以防止内存中有重复数据出现,又能尽可能少的读取磁盘数据
二、如果内存已经满,就是n>m时呗,这时候对于读取的数据,首先查找内存中是否已经存在,如果存在则直接读取内存中的数据,如果不存在,则要替换内存中的数据,即旧的被移走,新的数据移进。
其中替换算法有:
内存中的m个数据,依次检查待读的n-m个数据,是否在内存中存在,如果存在则内存中的相应数据不能替换,对于内存中的数据没有对应的n-m个数据的可以替换。
只可以保证尽可能少的读取磁盘数据。
这个题,按照数据队列读数据时,内存中有的就直接从内存中读取,没有的就从磁盘中读取,其中还涉及到内存是否已满时操作的差异,如果内存已满则要用旧的替换新的。
相关文章推荐
- 关于android当中Service读取应用中的内存数据不更新问题
- C++升级到C#,内存数据读取问题
- java读取excel数据,导致内存泄露的问题
- myeclipse 读取数据内存不足问题
- C++升级到C#,内存数据读取问题
- java读取文件时在最后的缓冲区内存在多余数据的问题
- mac上mysql数据库读取数据中文乱码问题
- java从Eclipse的Console中读取数据(尤其汉字)遇到的问题
- java InputStream读取数据问题【转http://cuisuqiang.iteye.com/blog/1434416】
- Delphi XE2读取内存偏移数据代码
- 游戏外挂内存数据读取
- 解决ListView1的界面数据与内存不一致问题,将内存数据更新到界面上
- 关于Class MyBatisPagingItemReader<T> 读取数据只读第一条分页数据就结束了问题
- gpu显存(全局内存)在使用时数据对齐的问题
- 解决Java Web开发中Jsp存储读取MySQL数据中文乱码的问题
- Java使用jacob组件读取大量Excel数据,性能差的问题
- 各类数据在内存中的存放形式的问题
- SSH开发框架中,实现系统启动加载类,读取数据库常用数据进入内存以及将数据放在application
- 解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题
- C#中如何解决sqlite数据表/记录删除后数据库内存不变的问题